diff --git a/radiant/clippertool.cpp b/radiant/clippertool.cpp index a38682d3..31a85e57 100644 --- a/radiant/clippertool.cpp +++ b/radiant/clippertool.cpp @@ -72,9 +72,23 @@ void Clipper_setPlanePoints( const ClipperPoints& points ){ } void Clipper_SelectionChanged( const Selectable& selectable ){ +// globalOutputStream() << " Clipper_SelectionChanged\n"; if ( Clipper_ok() ) Clipper_update(); } +#include "gtkutil/idledraw.h" +void Clipper_BoundsChanged(){ +// globalOutputStream() << " Clipper_BoundsChanged\n"; + if ( Clipper_ok() ) + Clipper_update(); +} + +IdleDraw g_idle_clipper_update = IdleDraw( FreeCaller() ); + +void Clipper_BoundsChanged_Queue(){ + g_idle_clipper_update.queueDraw(); +} + void Clipper_modeChanged( bool isClipper ){ GdkCursor* cursor = isClipper? g_clipper_cursor : 0; @@ -160,6 +174,8 @@ void Clipper_registerCommands(){ GlobalCommands_insert( "ClipperFlip", FreeCaller(), Accelerator( GDK_Return, (GdkModifierType)GDK_CONTROL_MASK ) ); } +SignalHandlerId ClipperTool_boundsChanged; + void Clipper_Construct(){ g_clipper_cursor = gdk_cursor_new( GDK_HAND2 ); @@ -172,8 +188,11 @@ void Clipper_Construct(){ typedef FreeCaller1 ClipperSelectionChangedCaller; GlobalSelectionSystem().addSelectionChangeCallback( ClipperSelectionChangedCaller() ); + + ClipperTool_boundsChanged = GlobalSceneGraph().addBoundsChangedCallback( FreeCaller() ); } void Clipper_Destroy(){ gdk_cursor_unref( g_clipper_cursor ); + GlobalSceneGraph().removeBoundsChangedCallback( ClipperTool_boundsChanged ); }