Code

* Merge from trunk
[inkscape.git] / src / ui / tool / transform-handle-set.h
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 :