changeset 1101:d7eafaa054ab

Added support for dw_window_redraw() causing splitbar panes to redraw without having to wait for a resize event from window resizing or splitbar movement.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 26 Jul 2011 00:25:57 +0000
parents 13ea7575d9e8
children cfe7d2b6bc16
files mac/dw.m
diffstat 1 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Mon Jul 25 23:22:04 2011 +0000
+++ b/mac/dw.m	Tue Jul 26 00:25:57 2011 +0000
@@ -690,15 +690,22 @@
 @end
 
 @interface DWWindow : NSWindow
+{
+    int redraw;
+}
 -(void)sendEvent:(NSEvent *)theEvent;
 -(void)keyDown:(NSEvent *)theEvent;
 -(void)mouseDragged:(NSEvent *)theEvent;
+-(int)redraw;
+-(void)setRedraw:(int)val;
 @end
 
 @implementation DWWindow
 -(void)sendEvent:(NSEvent *)theEvent { if([theEvent type] == NSKeyDown) { _event_handler(self, theEvent, 2); } [super sendEvent:theEvent]; }
 -(void)keyDown:(NSEvent *)theEvent { }
 -(void)mouseDragged:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
+-(int)redraw { return redraw; }
+-(void)setRedraw:(int)val { redraw = val; }
 @end
 
 /* Subclass for a render area type */
@@ -2558,16 +2565,21 @@
                     [stepper setFrameOrigin:NSMakePoint(size.width-20,0)];
                     [stepper setFrameSize:NSMakeSize(20,size.height)];
                 }
-                else if([handle isMemberOfClass:[DWSplitBar class]] && size.width > 20 && size.height > 20)
+                else if([handle isMemberOfClass:[DWSplitBar class]])
                 {
                     DWSplitBar *split = (DWSplitBar *)handle;
+                    DWWindow *window = (DWWindow *)[split window];
                     float percent = [split percent];
 
-                    if(percent > 0)
+                    if(percent > 0 && size.width > 20 && size.height > 20)
                     {
                         dw_splitbar_set(handle, percent);
                         [split setPercent:0];
                     }
+                    else if([window redraw])
+                    {
+                        [split splitViewDidResizeSubviews:nil];                        
+                    }
                 }
                 if(thisbox->type == DW_HORZ)
                     currentx += width + vectorx + (pad * 2);
@@ -7660,9 +7672,11 @@
  */
 void API dw_window_redraw(HWND handle)
 {
-    NSWindow *window = handle;
+    DWWindow *window = handle;
+    [window setRedraw:YES];
     [[window contentView] showWindow];
     [window flushWindow];
+    [window setRedraw:NO];
 }
 
 /*