From d894034ab13c7909de74981613e5e403a52bb6f6 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sun, 26 Sep 2010 22:43:24 +0900 Subject: [PATCH] Replace PS*instance. It's a little flakey (doesn't always do the right thing), but it's a good start. I'd like to do much smaller rectangles, and get the timing right. --- tools/Forge/Bundles/MapEdit/QuakeEd.h | 3 ++ tools/Forge/Bundles/MapEdit/QuakeEd.m | 52 +++++++++++++++++++-------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/tools/Forge/Bundles/MapEdit/QuakeEd.h b/tools/Forge/Bundles/MapEdit/QuakeEd.h index cbd90a640..7c9001b64 100644 --- a/tools/Forge/Bundles/MapEdit/QuakeEd.h +++ b/tools/Forge/Bundles/MapEdit/QuakeEd.h @@ -21,6 +21,9 @@ void qprintf (char *fmt, ...); // prints text to cmd_out_i BOOL dirty; char filename[1024]; // full path with .map extension + NSBitmapImageRep *cache[3]; + NSRect cache_rect[3]; + // UI objects id brushcount_i; id entitycount_i; diff --git a/tools/Forge/Bundles/MapEdit/QuakeEd.m b/tools/Forge/Bundles/MapEdit/QuakeEd.m index fe8eca2f7..1bc0d9c0d 100644 --- a/tools/Forge/Bundles/MapEdit/QuakeEd.m +++ b/tools/Forge/Bundles/MapEdit/QuakeEd.m @@ -250,50 +250,74 @@ flushWindow instance draw the brush after each flush =============== */ --flushWindow +- (void) flushWindow { + NSRect rect; + int i; + NSView *cv; + [super flushWindow]; if (!running) - return self; // don't lock focus before nib is + return; // don't lock focus before nib is // finished loading if (_disableFlushWindow) - return self; + return; + + cv = [self contentView]; + [cv lockFocus]; + for (i = 3; i >= 0; i--) { + if (cache[i]) { + if (clearinstance) { + rect = cache_rect[i]; + [cache[i] drawAtPoint: rect.origin]; + } + [cache[i] release]; + cache[i] = 0; + } + } + rect = [cameraview_i frame]; + //rect = [cv convertRect: rect fromView: cameraview_i]; + cache_rect[0] = rect = NSIntegralRect (rect); + cache[0] = [[NSBitmapImageRep alloc] initWithFocusedViewRect: rect]; + + rect = [[xyview_i superview] frame]; + rect = [cv convertRect: rect fromView: [[xyview_i superview] superview]]; + cache_rect[1] = rect = NSIntegralRect (rect); + cache[1] = [[NSBitmapImageRep alloc] initWithFocusedViewRect: rect]; + + rect = [[zview_i superview] frame]; + rect = [cv convertRect: rect fromView: [[zview_i superview] superview]]; + cache_rect[2] = rect = NSIntegralRect (rect); + cache[2] = [[NSBitmapImageRep alloc] initWithFocusedViewRect: rect]; + [[self contentView] unlockFocus]; [cameraview_i lockFocus]; - if (clearinstance) { - // XXX PSnewinstance (); - clearinstance = NO; - } - // XXX PSsetinstance (1); linestart (0, 0, 0); [map_i makeSelectedPerform:@selector (CameraDrawSelf)]; [clipper_i cameraDrawSelf]; lineflush (); - // XXX PSsetinstance (0); [cameraview_i unlockFocus]; [xyview_i lockFocus]; - // XXX PSsetinstance (1); linestart (0, 0, 0); [map_i makeSelectedPerform:@selector (XYDrawSelf)]; lineflush (); [cameraview_i XYDrawSelf]; [zview_i XYDrawSelf]; [clipper_i XYDrawSelf]; - // XXX PSsetinstance (0); [xyview_i unlockFocus]; [zview_i lockFocus]; - // XXX PSsetinstance (1); [map_i makeSelectedPerform:@selector (ZDrawSelf)]; [cameraview_i ZDrawSelf]; [clipper_i ZDrawSelf]; - // XXX PSsetinstance (0); [zview_i unlockFocus]; - return self; + clearinstance = NO; + + [super flushWindow]; }