48ad3af51a73500415fcfea0d4275f69bac2ec98
1 /** @file
2 * Affine transform handles component
3 */
4 /* Authors:
5 * Krzysztof KosiĆski <tweenk.pl@gmail.com>
6 *
7 * Copyright (C) 2009 Authors
8 * Released under GNU GPL, read the file 'COPYING' for more information
9 */
11 #ifndef SEEN_UI_TOOL_TRANSFORM_HANDLE_SET_H
12 #define SEEN_UI_TOOL_TRANSFORM_HANDLE_SET_H
14 #include <memory>
15 #include <gdk/gdk.h>
16 #include <2geom/forward.h>
17 #include "display/display-forward.h"
18 #include "ui/tool/commit-events.h"
19 #include "ui/tool/manipulator.h"
21 class SPDesktop;
22 class CtrlRect; // this is not present in display-forward.h!
23 namespace Inkscape {
24 namespace UI {
26 //class TransformHandle;
27 class RotateHandle;
28 class SkewHandle;
29 class ScaleCornerHandle;
30 class ScaleSideHandle;
31 class RotationCenter;
33 class TransformHandleSet : public Manipulator {
34 public:
35 enum Mode {
36 MODE_SCALE,
37 MODE_ROTATE_SKEW
38 };
40 TransformHandleSet(SPDesktop *d, SPCanvasGroup *th_group);
41 virtual ~TransformHandleSet();
42 virtual bool event(GdkEvent *);
44 bool visible() { return _visible; }
45 Mode mode() { return _mode; }
46 Geom::Rect bounds();
47 void setVisible(bool v);
48 void setMode(Mode);
49 void setBounds(Geom::Rect const &, bool preserve_center = false);
51 bool transforming() { return _in_transform; }
52 ControlPoint &rotationCenter();
54 sigc::signal<void, Geom::Matrix const &> signal_transform;
55 sigc::signal<void, CommitEvent> signal_commit;
56 private:
57 void _emitTransform(Geom::Matrix const &);
58 void _setActiveHandle(ControlPoint *h);
59 void _clearActiveHandle();
60 void _updateVisibility(bool v);
61 union {
62 ControlPoint *_handles[17];
63 struct {
64 ScaleCornerHandle *_scale_corners[4];
65 ScaleSideHandle *_scale_sides[4];
66 RotateHandle *_rot_corners[4];
67 SkewHandle *_skew_sides[4];
68 RotationCenter *_center;
69 };
70 };
71 ControlPoint *_active;
72 SPCanvasGroup *_transform_handle_group;
73 CtrlRect *_trans_outline;
74 Mode _mode;
75 bool _in_transform;
76 bool _visible;
77 bool _rot_center_visible;
78 friend class TransformHandle;
79 friend class RotationCenter;
80 };
82 } // namespace UI
83 } // namespace Inkscape
85 #endif
87 /*
88 Local Variables:
89 mode:c++
90 c-file-style:"stroustrup"
91 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
92 indent-tabs-mode:nil
93 fill-column:99
94 End:
95 */
96 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :