diff options
Diffstat (limited to 'FL/mac.H')
| -rw-r--r-- | FL/mac.H | 69 |
1 files changed, 60 insertions, 9 deletions
@@ -36,16 +36,47 @@ // Standard MacOS Carbon API includes... #include <Carbon/Carbon.h> +#if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) && !__LP64__ +typedef float CGFloat; +#endif +#include <config.h> // Now make some fixes to the headers... #undef check // Dunno where this comes from... // Some random X equivalents -typedef WindowPtr Window; struct XPoint { int x, y; }; struct XRectangle {int x, y, width, height;}; + +#ifdef __APPLE_COCOA__ + +typedef void *Window; //this is really a pter to the subclass FLWindow of NSWindow +typedef struct flCocoaRegion{ + int count; + CGRect *rects; +} *Fl_Region; // a region is the union of a series of rectangles +inline Fl_Region XRectangleRegion(int x, int y, int w, int h) { + Fl_Region R = (Fl_Region)malloc(sizeof(*R)); + R->count = 1; + R->rects = (CGRect *)malloc(sizeof(CGRect)); + *(R->rects) = CGRectMake(x, y, w - 1, h - 1); + return R; +} +inline void XDestroyRegion(Fl_Region r) { + if(r) { + free(r->rects); + free(r); + } +} +extern void *fl_default_cursor; +extern void *fl_system_menu; +typedef CGContextRef Fl_Offscreen; +typedef CGImageRef Fl_Bitmask; + +#else + +typedef WindowRef Window; typedef RgnHandle Fl_Region; -void fl_clip_region(Fl_Region); inline Fl_Region XRectangleRegion(int x, int y, int w, int h) { Fl_Region R = NewRgn(); SetRectRgn(R, x, y, x+w, y+h); @@ -54,6 +85,14 @@ inline Fl_Region XRectangleRegion(int x, int y, int w, int h) { inline void XDestroyRegion(Fl_Region r) { DisposeRgn(r); } +extern CursHandle fl_default_cursor; +extern Handle fl_system_menu; +typedef GWorldPtr Fl_Offscreen; +typedef GWorldPtr Fl_Bitmask; // Carbon requires a 1-bit GWorld instead of a BitMap + +#endif + +void fl_clip_region(Fl_Region); # include "Fl_Window.H" @@ -62,15 +101,19 @@ inline void XDestroyRegion(Fl_Region r) { class Fl_X { public: - Window xid; // Mac WindowPtr - GWorldPtr other_xid; // pointer for offscreen bitmaps (doublebuffer) + Window xid; // Cocoa: FLWindow* ; Carbon: WindowRef + Fl_Offscreen other_xid; // pointer for offscreen bitmaps (doublebuffer) Fl_Window *w; // FLTK window for Fl_Region region; Fl_Region subRegion; // region for this specific subwindow Fl_X *next; // linked tree to support subwindows Fl_X *xidChildren, *xidNext; // more subwindow tree int wait_for_expose; +#ifdef __APPLE_COCOA__ + void *cursor; // is really NSCursor* +#else CursHandle cursor; +#endif static Fl_X* first; static Fl_X* i(const Fl_Window* w) {return w->i;} static int fake_X_wm(const Fl_Window*,int&,int&,int&,int&,int&); @@ -78,8 +121,10 @@ public: void flush(); // Quartz additions: CGContextRef gc; // graphics context (NULL when using QD) +#ifndef __APPLE_COCOA__ static ATSUTextLayout atsu_layout; // windows share a global font static ATSUStyle atsu_style; +#endif static void q_fill_context(); // fill a Quartz context with current FLTK state static void q_clear_clipping(); // remove all clipping from a Quartz context static void q_release_context(Fl_X *x=0); // free all resources associated with fl_gc @@ -87,18 +132,27 @@ public: static void q_end_image(); }; +#ifdef __APPLE_COCOA__ +extern void MacDestroyWindow(Fl_Window*,void *); +extern void MacMapWindow(Fl_Window*,void *); +extern void MacUnmapWindow(Fl_Window*,void *); +extern WindowRef MACwindowRef(Fl_Window *w); +extern Fl_Region MacRectRegionIntersect(Fl_Region current, int x,int y,int w, int h); +extern void MacCollapseWindow(Window w); +#else extern void MacDestroyWindow(Fl_Window*,WindowPtr); extern void MacMapWindow(Fl_Window*,WindowPtr); extern void MacUnmapWindow(Fl_Window*,WindowPtr); +#endif + extern int MacUnlinkWindow(Fl_X*,Fl_X*start=0L); +extern void fl_open_callback(void (*cb)(const char *)); inline Window fl_xid(const Fl_Window*w) { return Fl_X::i(w)->xid; } -extern CursHandle fl_default_cursor; - extern struct Fl_XMap { RGBColor rgb; ulong pen; @@ -107,10 +161,8 @@ extern struct Fl_XMap { extern FL_EXPORT void *fl_display; extern FL_EXPORT Window fl_window; extern FL_EXPORT CGContextRef fl_gc; -extern FL_EXPORT Handle fl_system_menu; extern FL_EXPORT class Fl_Sys_Menu_Bar *fl_sys_menu_bar; -typedef GWorldPtr Fl_Offscreen; extern Fl_Offscreen fl_create_offscreen(int w, int h); extern void fl_copy_offscreen(int x,int y,int w,int h, Fl_Offscreen gWorld, int srcx,int srcy); @@ -118,7 +170,6 @@ extern void fl_delete_offscreen(Fl_Offscreen gWorld); extern void fl_begin_offscreen(Fl_Offscreen gWorld); extern void fl_end_offscreen(); -typedef GWorldPtr Fl_Bitmask; // Carbon requires a 1-bit GWorld instead of a BitMap extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data); extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data); |
