From b4df2ee169fd31d40c86fcea0d472d7376074b10 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 5 Sep 2012 18:38:57 +0200 Subject: menu/drawable_control: always cache modelview matrix Some controls modify the modelview matrix during drawing their contents. Restore it afterwards, so that other parts could be drawn easily on top. --- src/menu/drawable_control.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/menu/drawable_control.cpp b/src/menu/drawable_control.cpp index 4d0d9c3c..298abdfe 100644 --- a/src/menu/drawable_control.cpp +++ b/src/menu/drawable_control.cpp @@ -27,6 +27,7 @@ #include "drawable_control.hpp" #include "container.hpp" #include "clipping_helper.hpp" +#include "modelview_matrix_cache.hpp" namespace usdx { @@ -87,18 +88,22 @@ namespace usdx glTranslatef(position.get_x(), position.get_y(), 0.0f); } - boost::shared_lock clipping_lock(clipping_required_mutex); - if (clipping_required) { - clipping_lock.unlock(); - - boost::shared_lock size_lock(size_mutex); - boost::shared_lock position_lock(position_mutex); - ClippingHelper clipping(parent, Rectangle(position, size)); - Drawable::repaint(); - } - else { - clipping_lock.unlock(); - Drawable::repaint(); + { + ModelviewMatrixCache c; + + boost::shared_lock clipping_lock(clipping_required_mutex); + if (clipping_required) { + clipping_lock.unlock(); + + boost::shared_lock size_lock(size_mutex); + boost::shared_lock position_lock(position_mutex); + ClippingHelper clipping(parent, Rectangle(position, size)); + Drawable::repaint(); + } + else { + clipping_lock.unlock(); + Drawable::repaint(); + } } } -- cgit v1.2.3