diff options
| author | Manolo Gouy <Manolo> | 2016-04-18 14:31:07 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2016-04-18 14:31:07 +0000 |
| commit | 0629b40afd8fc49ef2d9db898d190e3a1a508d8d (patch) | |
| tree | d339e4c02fa7a222446dc441398966a7ab07c05c /src | |
| parent | 516d0e5f9ca1850ad76c81c10c5e3c415f21c5cd (diff) | |
Move set_cursor() member functions from class Fl_X to classes Fl_Window_Driver and derived.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11652 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Window_Driver.cxx | 8 | ||||
| -rw-r--r-- | src/Fl_cocoa.mm | 20 | ||||
| -rw-r--r-- | src/Fl_win32.cxx | 11 | ||||
| -rw-r--r-- | src/Fl_x.cxx | 8 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx | 1 | ||||
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H | 5 | ||||
| -rw-r--r-- | src/drivers/X11/Fl_X11_Window_Driver.H | 3 | ||||
| -rw-r--r-- | src/fl_cursor.cxx | 4 |
9 files changed, 44 insertions, 22 deletions
diff --git a/src/Fl_Window_Driver.cxx b/src/Fl_Window_Driver.cxx index 7a0c9848d..b5ba4c556 100644 --- a/src/Fl_Window_Driver.cxx +++ b/src/Fl_Window_Driver.cxx @@ -232,6 +232,14 @@ void Fl_Window_Driver::flush() pWindow->flush(); } +int Fl_Window_Driver::set_cursor(Fl_Cursor) { + return 0; +} + +int Fl_Window_Driver::set_cursor(const Fl_RGB_Image*, int, int) { + return 0; +} + // // End of "$Id$". // diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index eebd07da1..0e1b44e98 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -2318,8 +2318,8 @@ static FLTextInputContext* fltextinputcontext_instance = nil; if (!i) return; // fix for STR #3128 // We have to have at least one cursor rect for invalidateCursorRectsForView // to work, hence the "else" clause. - if (i->cursor) - [self addCursorRect:[self visibleRect] cursor:(NSCursor*)i->cursor]; + if (((Fl_Cocoa_Window_Driver*)w->driver())->cursor) + [self addCursorRect:[self visibleRect] cursor:((Fl_Cocoa_Window_Driver*)w->driver())->cursor]; else [self addCursorRect:[self visibleRect] cursor:[NSCursor arrowCursor]]; } @@ -2947,7 +2947,6 @@ void Fl_X::make(Fl_Window* w) x->other_xid = 0; // room for doublebuffering image map. On OS X this is only used by overlay windows x->region = 0; x->subRect(0); - x->cursor = NULL; ((Fl_Cocoa_Window_Driver*)w->pWindowDriver)->gc = 0; x->mapped_to_retina(false); x->changed_resolution(false); @@ -3519,10 +3518,9 @@ void Fl_Cocoa_Window_Driver::map() { // after a subwindow has been unmapped, it has lost its parent window and its frame may be wrong [xid setSubwindowFrame]; } - Fl_X *i = Fl_X::i(pWindow); - if (i->cursor) { - [(NSCursor*)i->cursor release]; - i->cursor = NULL; + if (cursor) { + [cursor release]; + cursor = NULL; } } @@ -3571,7 +3569,7 @@ static NSImage *CGBitmapContextToNSImage(CGContextRef c) return [image autorelease]; } -int Fl_X::set_cursor(Fl_Cursor c) +int Fl_Cocoa_Window_Driver::set_cursor(Fl_Cursor c) { if (cursor) { [(NSCursor*)cursor release]; @@ -3596,12 +3594,12 @@ int Fl_X::set_cursor(Fl_Cursor c) [(NSCursor*)cursor retain]; - [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]]; + [(NSWindow*)fl_xid(pWindow) invalidateCursorRectsForView:[(NSWindow*)fl_xid(pWindow) contentView]]; return 1; } -int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { +int Fl_Cocoa_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { if (cursor) { [(NSCursor*)cursor release]; cursor = NULL; @@ -3665,7 +3663,7 @@ int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { initWithImage:nsimage hotSpot:NSMakePoint(hotx, hoty)]; - [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]]; + [(NSWindow*)fl_xid(pWindow) invalidateCursorRectsForView:[(NSWindow*)fl_xid(pWindow) contentView]]; [bitmap release]; [nsimage release]; diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 721f66e31..a96ad3773 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -1383,7 +1383,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar case WM_SETCURSOR: if (LOWORD(lParam) == HTCLIENT) { while (window->parent()) window = window->window(); - SetCursor(Fl_X::i(window)->cursor); + SetCursor(((Fl_WinAPI_Window_Driver*)window->driver())->cursor); return 0; } break; @@ -1800,8 +1800,9 @@ Fl_X* Fl_X::make(Fl_Window* w) { x->w = w; w->i = x; x->region = 0; x->private_dc = 0; - x->cursor = LoadCursor(NULL, IDC_ARROW); - x->custom_cursor = 0; + Fl_WinAPI_Window_Driver *driver = (Fl_WinAPI_Window_Driver*)w->driver(); + driver->cursor = LoadCursor(NULL, IDC_ARROW); + driver->custom_cursor = 0; if (!fl_codepage) fl_get_codepage(); WCHAR *lab = NULL; @@ -2160,7 +2161,7 @@ void Fl_WinAPI_Window_Driver::set_icons() { # define IDC_HAND MAKEINTRESOURCE(32649) #endif // !IDC_HAND -int Fl_X::set_cursor(Fl_Cursor c) { +int Fl_WinAPI_Window_Driver::set_cursor(Fl_Cursor c) { LPSTR n; HCURSOR new_cursor; @@ -2211,7 +2212,7 @@ int Fl_X::set_cursor(Fl_Cursor c) { return 1; } -int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { +int Fl_WinAPI_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { HCURSOR new_cursor; new_cursor = image_to_icon(image, false, hotx, hoty); diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index faa8a068b..020a41ad8 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -2666,7 +2666,7 @@ void Fl_X11_Window_Driver::set_icons() { //////////////////////////////////////////////////////////////// -int Fl_X::set_cursor(Fl_Cursor c) { +int Fl_X11_Window_Driver::set_cursor(Fl_Cursor c) { /* The cursors are cached, because creating one takes 0.5ms including opening, reading, and closing theme files. They are kept until program @@ -2720,12 +2720,12 @@ int Fl_X::set_cursor(Fl_Cursor c) { #undef cache_cursor - XDefineCursor(fl_display, xid, xc); + XDefineCursor(fl_display, fl_xid(pWindow), xc); return 1; } -int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { +int Fl_X11_Window_Driver::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { #if ! HAVE_XCURSOR return 0; #else @@ -2769,7 +2769,7 @@ int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) { cursor->yhot = hoty; xc = XcursorImageLoadCursor(fl_display, cursor); - XDefineCursor(fl_display, xid, xc); + XDefineCursor(fl_display, fl_xid(pWindow), xc); XFreeCursor(fl_display, xc); XcursorImageDestroy(cursor); diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index 9f72f7725..5b0bba2f9 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -32,8 +32,10 @@ class Fl_Image; class Fl_Window; #ifdef __OBJC__ @class CALayer; +@class NSCursor; #else class CALayer; +class NSCursor; #endif // __OBJC__ /* @@ -69,6 +71,7 @@ public: Fl_Cocoa_Window_Driver(Fl_Window*); ~Fl_Cocoa_Window_Driver(); CGContextRef gc; // graphics context + NSCursor *cursor; static void q_release_context(Fl_Cocoa_Window_Driver *x = 0); // free all resources associated with gc // --- window data @@ -94,6 +97,9 @@ public: virtual void size_range(); virtual void iconize(); virtual void decoration_sizes(int *top, int *left, int *right, int *bottom); + // --- window cursor stuff + virtual int set_cursor(Fl_Cursor); + virtual int set_cursor(const Fl_RGB_Image*, int, int); virtual void shape(const Fl_Image* img); // that one is implemented in Fl_Cocoa.mm because it uses Objective-c diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx index a96039918..47fb70242 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx @@ -36,6 +36,7 @@ Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w) Fl_Cocoa_Window_Driver::Fl_Cocoa_Window_Driver(Fl_Window *win) : Fl_Window_Driver(win) { + cursor = nil; } diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H index f1d36b6a1..a5f7f0ed8 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H @@ -70,6 +70,8 @@ public: ~Fl_WinAPI_Window_Driver(); struct icon_data *icon_; + HCURSOR cursor; + int custom_cursor; // --- window data virtual int decorated_w(); virtual int decorated_h(); @@ -89,6 +91,9 @@ public: virtual void fullscreen_off(int X, int Y, int W, int H); virtual void iconize(); virtual void decoration_sizes(int *top, int *left, int *right, int *bottom); + // --- window cursor stuff + virtual int set_cursor(Fl_Cursor); + virtual int set_cursor(const Fl_RGB_Image*, int, int); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H index c5378475e..c79aacc11 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.H +++ b/src/drivers/X11/Fl_X11_Window_Driver.H @@ -107,6 +107,9 @@ public: virtual void decoration_sizes(int *top, int *left, int *right, int *bottom); virtual void show_with_args_begin(); virtual void show_with_args_end(int argc, char **argv); + // --- window cursor stuff + virtual int set_cursor(Fl_Cursor); + virtual int set_cursor(const Fl_RGB_Image*, int, int); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); diff --git a/src/fl_cursor.cxx b/src/fl_cursor.cxx index 9b9c9b9e2..30f523c26 100644 --- a/src/fl_cursor.cxx +++ b/src/fl_cursor.cxx @@ -131,7 +131,7 @@ void Fl_Window::cursor(Fl_Cursor c) { if (!i) return; - ret = i->set_cursor(c); + ret = pWindowDriver->set_cursor(c); if (ret) return; @@ -168,7 +168,7 @@ void Fl_Window::cursor(const Fl_RGB_Image *image, int hotx, int hoty) { if (!i) return; - ret = i->set_cursor(image, hotx, hoty); + ret = pWindowDriver->set_cursor(image, hotx, hoty); if (ret) return; |
