]> git.mxchange.org Git - flightgear.git/blob - src/Canvas/window.hxx
Allow Canvas Windows to be resized by dragging
[flightgear.git] / src / Canvas / window.hxx
1 // Window for placing a Canvas onto it (for dialogs, menus, etc.)
2 //
3 // Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18
19 #ifndef CANVAS_WINDOW_HXX_
20 #define CANVAS_WINDOW_HXX_
21
22 #include <simgear/canvas/elements/CanvasImage.hxx>
23 #include <simgear/canvas/MouseEvent.hxx>
24 #include <simgear/props/PropertyBasedElement.hxx>
25 #include <simgear/props/propertyObject.hxx>
26
27 #include <osg/Geode>
28 #include <osg/Geometry>
29
30 namespace canvas
31 {
32   class Window:
33     public simgear::PropertyBasedElement
34   {
35     public:
36
37       enum Resize
38       {
39         NONE    = 0,
40         LEFT    = 1,
41         RIGHT   = LEFT << 1,
42         TOP     = RIGHT << 1,
43         BOTTOM  = TOP << 1,
44         INIT    = BOTTOM << 1
45       };
46
47       Window(SGPropertyNode* node);
48       virtual ~Window();
49
50       virtual void update(double delta_time_sec);
51       virtual void valueChanged(SGPropertyNode* node);
52
53       osg::Group* getGroup();
54       const simgear::Rect<float>& getRegion() const;
55
56       void setCanvas(simgear::canvas::CanvasPtr canvas);
57       simgear::canvas::CanvasWeakPtr getCanvas() const;
58
59       bool isResizable() const;
60
61       bool handleMouseEvent(const simgear::canvas::MouseEventPtr& event);
62
63       void handleResize(uint8_t mode, const osg::Vec2f& delta = osg::Vec2f());
64
65       void doRaise(SGPropertyNode* node_raise = 0);
66
67     protected:
68
69       simgear::canvas::Image _image;
70       bool _resizable;
71
72       simgear::PropertyObject<int> _resize_top,
73                                    _resize_right,
74                                    _resize_bottom,
75                                    _resize_left,
76                                    _resize_status;
77
78   };
79 } // namespace canvas
80
81 #endif /* CANVAS_WINDOW_HXX_ */