summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-04-18 14:31:07 +0000
committerManolo Gouy <Manolo>2016-04-18 14:31:07 +0000
commit0629b40afd8fc49ef2d9db898d190e3a1a508d8d (patch)
treed339e4c02fa7a222446dc441398966a7ab07c05c /src
parent516d0e5f9ca1850ad76c81c10c5e3c415f21c5cd (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.cxx8
-rw-r--r--src/Fl_cocoa.mm20
-rw-r--r--src/Fl_win32.cxx11
-rw-r--r--src/Fl_x.cxx8
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H6
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx1
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H5
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.H3
-rw-r--r--src/fl_cursor.cxx4
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;