From 30786c2ed39ef0e8482b48b6663ffd99fb032ddd Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Tue, 6 Jun 2006 08:00:56 +0000 Subject: STR #1310: OS X Quartz support fixed. All test codes now work without complaints fro Quickdraw or CoreGraphics. If no more major bugs are reported for Quartz, I will make Quartz the default over Quickdraw in the next release of FLTK 1. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5178 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Double_Window.cxx | 25 +++++++++++++++++++------ src/Fl_mac.cxx | 11 +++++++++-- src/cgdebug.h | 28 ++++++++++++++++++++-------- 3 files changed, 48 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/Fl_Double_Window.cxx b/src/Fl_Double_Window.cxx index e1fa64e67..54fd2b935 100644 --- a/src/Fl_Double_Window.cxx +++ b/src/Fl_Double_Window.cxx @@ -219,12 +219,19 @@ void fl_delete_offscreen(Fl_Offscreen ctx) { free(data); } -static CGContextRef prev_gc = 0; -static Window prev_window = 0; +const int stack_max = 16; +static int stack_ix = 0; +static CGContextRef stack_gc[stack_max]; +static Window stack_window[stack_max]; void fl_begin_offscreen(Fl_Offscreen ctx) { - prev_gc = fl_gc; - prev_window = fl_window; + if (stack_ix0) + stack_ix--; + else + fprintf(stderr, "FLTK CGContext Stack underflow error\n"); + if (stack_ixxid), &i->gc); + err = QDBeginCGContext(GetWindowPort(i->xid), &i->gc); + if (err!=noErr) + fprintf(stderr, "Error %d in QDBeginCGContext\n", (int)err); fl_gc = i->gc; CGContextSaveGState(fl_gc); Fl_X::q_fill_context(); @@ -2117,7 +2120,11 @@ void Fl_X::q_release_context(Fl_X *x) { if (x && x->gc!=fl_gc) return; if (!fl_gc) return; CGContextRestoreGState(fl_gc); - if (fl_window) QDEndCGContext(GetWindowPort(fl_window), &fl_gc); + if (fl_window) { + OSStatus err = QDEndCGContext(GetWindowPort(fl_window), &fl_gc); + if (err!=noErr) + fprintf(stderr, "Error %d in QDEndCGContext\n", (int)err); + } fl_gc = 0; } diff --git a/src/cgdebug.h b/src/cgdebug.h index 3d11158ff..a8a605322 100644 --- a/src/cgdebug.h +++ b/src/cgdebug.h @@ -83,6 +83,18 @@ //+StrokePath //+TranslateCTM +inline OSStatus dbgLocation(const char *file, int line) +{ + fprintf(stderr, "%s:%d ", file, line); + return 0; +} + +inline OSStatus dbgEndl() +{ + fprintf(stderr, "\n"); + return 0; +} + inline void dbgCGContextClipToRect(CGContextRef a, CGRect b) { @@ -109,20 +121,20 @@ inline OSStatus dbgQDEndCGContext(CGrafPtr a, CGContextRef *b) return QDEndCGContext(a, b); } -#define QDEndCGContext(a, b) { \ - fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \ - dbgQDEndCGContext(a, b); \ - fprintf(stderr, "\n"); } +#define QDEndCGContext(a, b) ( \ + dbgLocation(__FILE__, __LINE__) + \ + dbgQDEndCGContext(a, b) + \ + dbgEndl() ) inline OSStatus dbgQDBeginCGContext(CGrafPtr a, CGContextRef *b) { return QDBeginCGContext(a, b); } -#define QDBeginCGContext(a, b) { \ - fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \ - dbgQDBeginCGContext(a, b); \ - fprintf(stderr, "\n"); } +#define QDBeginCGContext(a, b) ( \ + dbgLocation(__FILE__, __LINE__) + \ + dbgQDBeginCGContext(a, b) + \ + dbgEndl() ) inline void dbgClipCGContextToRegion(CGContextRef a, const Rect *b, RgnHandle c) { -- cgit v1.2.3