aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-03-22 22:52:59 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2013-01-13 22:40:51 +0100
commitfb7542a5e7d390a20eefc946cc5054dc79d74180 (patch)
tree164c6640dfbb0be0b260cd6fb709477e6d753f58
parentb44ac46e4e54f228fd9c25c042da2efd2ab45b64 (diff)
downloadusdx-fb7542a5e7d390a20eefc946cc5054dc79d74180.tar.gz
usdx-fb7542a5e7d390a20eefc946cc5054dc79d74180.tar.xz
usdx-fb7542a5e7d390a20eefc946cc5054dc79d74180.zip
menu/container: clipping requires window coordinates
glScissor only work with window coordinates. to calculate that a control has to know it position on the window and therefor the parent container have to track the position in the window
-rw-r--r--src/menu/container.cpp9
-rw-r--r--src/menu/container.hpp4
-rw-r--r--src/menu/drawable_control.cpp5
3 files changed, 15 insertions, 3 deletions
diff --git a/src/menu/container.cpp b/src/menu/container.cpp
index 795d57ab..ce73c1c2 100644
--- a/src/menu/container.cpp
+++ b/src/menu/container.cpp
@@ -33,13 +33,13 @@ namespace usdx
log4cpp::Category::getInstance("usdx.menu.container");
Container::Container(Container* owner)
- : DrawableControl(owner), frame(NULL)
+ : DrawableControl(owner), frame(NULL), window_coords(0, 0)
{
set_clipping_required(true);
}
Container::Container(Container* owner, const ContainerHelper& add)
- : DrawableControl(owner, add), frame(NULL)
+ : DrawableControl(owner, add), frame(NULL), window_coords(0, 0)
{
set_clipping_required(true);
}
@@ -86,4 +86,9 @@ namespace usdx
{
frame = NULL;
}
+
+ const Point<int>& Container::get_window_coords(void) const
+ {
+ return window_coords;
+ }
};
diff --git a/src/menu/container.hpp b/src/menu/container.hpp
index 9b30b117..147a0d92 100644
--- a/src/menu/container.hpp
+++ b/src/menu/container.hpp
@@ -31,6 +31,7 @@
#include <log4cpp/Category.hh>
#include "drawable_control.hpp"
+#include "utils/point.hpp"
namespace usdx
{
@@ -48,6 +49,7 @@ namespace usdx
Container(Container*, const ContainerHelper&);
virtual void draw(void);
+ Point<int> window_coords;
public:
Container(Container*);
@@ -58,6 +60,8 @@ namespace usdx
virtual void setFrame(Frame*);
virtual void removeFrame(void);
+
+ const Point<int>& get_window_coords(void) const;
};
};
diff --git a/src/menu/drawable_control.cpp b/src/menu/drawable_control.cpp
index 00b6fa78..10da2bfc 100644
--- a/src/menu/drawable_control.cpp
+++ b/src/menu/drawable_control.cpp
@@ -81,8 +81,11 @@ namespace usdx
clipping_lock.unlock();
boost::mutex::scoped_lock lock(size_mutex);
- ClippingHelper clipping(Rectangle<int>(position, size));
+ Point<int> offset(0, 0);
+ if (parent)
+ offset = parent->get_window_coords();
+ ClippingHelper clipping(Rectangle<int>(offset + position, size));
Drawable::repaint();
}
else {