fltk/src/fl_cursor.cxx
Albrecht Schlosser 42d8aba117 Replace FL/x.H with FL/platform.H - step 2 (STR #3435).
This second step replaces FL/x.H with FL/platform.H in all source files.
Dependencies have been adjusted as well.

This commit completes the replacement of FL/x.H with FL/platform.H.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12641 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
2018-01-31 21:17:17 +00:00

198 lines
4.3 KiB
C++

//
// "$Id$"
//
// Mouse cursor support for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2018 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
// Change the current cursor.
// Under X the cursor is attached to the X window. I tried to hide
// this and pretend that changing the cursor is a drawing function.
// This avoids a field in the Fl_Window, and I suspect is more
// portable to other systems.
#include <FL/Fl.H>
#include <FL/platform.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Pixmap.H>
#include <FL/Fl_RGB_Image.H>
#include <FL/Fl_Window_Driver.H>
#include <FL/fl_draw.H>
#include "fl_cursor_wait.xpm"
#include "fl_cursor_help.xpm"
#include "fl_cursor_nwse.xpm"
#include "fl_cursor_nesw.xpm"
#include "fl_cursor_none.xpm"
/**
Sets the cursor for the current window to the specified shape and colors.
The cursors are defined in the <FL/Enumerations.H> header file.
*/
void fl_cursor(Fl_Cursor c) {
if (Fl::first_window()) Fl::first_window()->cursor(c);
}
/* For back compatibility only. */
void fl_cursor(Fl_Cursor c, Fl_Color fg, Fl_Color bg) {
fl_cursor(c);
}
/**
Sets the default window cursor. This is the cursor that will be used
after the mouse pointer leaves a widget with a custom cursor set.
\see cursor(const Fl_RGB_Image*, int, int), default_cursor()
*/
void Fl_Window::default_cursor(Fl_Cursor c) {
cursor_default = c;
cursor(c);
}
static void fallback_cursor(Fl_Window *w, Fl_Cursor c) {
const char **xpm;
int hotx, hoty;
// The standard arrow is our final fallback, so something is broken
// if we get called back here with that as an argument.
if (c == FL_CURSOR_ARROW)
return;
switch (c) {
case FL_CURSOR_WAIT:
xpm = (const char**)fl_cursor_wait_xpm;
hotx = 7;
hoty = 9;
break;
case FL_CURSOR_HELP:
xpm = (const char**)fl_cursor_help_xpm;
hotx = 1;
hoty = 3;
break;
case FL_CURSOR_NWSE:
xpm = (const char**)fl_cursor_nwse_xpm;
hotx = 7;
hoty = 7;
break;
case FL_CURSOR_NESW:
xpm = (const char**)fl_cursor_nesw_xpm;
hotx = 7;
hoty = 7;
break;
case FL_CURSOR_NONE:
xpm = (const char**)fl_cursor_none_xpm;
hotx = 0;
hoty = 0;
break;
default:
w->cursor(FL_CURSOR_ARROW);
return;
}
Fl_Pixmap pxm(xpm);
Fl_RGB_Image image(&pxm);
w->cursor(&image, hotx, hoty);
}
void Fl_Window::cursor(Fl_Cursor c) {
int ret;
// the cursor must be set for the top level window, not for subwindows
Fl_Window *w = window(), *toplevel = this;
while (w) {
toplevel = w;
w = w->window();
}
if (toplevel != this) {
toplevel->cursor(c);
return;
}
if (c == FL_CURSOR_DEFAULT)
c = cursor_default;
if (!i)
return;
ret = pWindowDriver->set_cursor(c);
if (ret)
return;
fallback_cursor(this, c);
}
/**
Changes the cursor for this window. This always calls the system, if
you are changing the cursor a lot you may want to keep track of how
you set it in a static variable and call this only if the new cursor
is different.
The default cursor will be used if the provided image cannot be used
as a cursor.
\see cursor(Fl_Cursor), default_cursor()
*/
void Fl_Window::cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
int ret;
// the cursor must be set for the top level window, not for subwindows
Fl_Window *w = window(), *toplevel = this;
while (w) {
toplevel = w;
w = w->window();
}
if (toplevel != this) {
toplevel->cursor(image, hotx, hoty);
return;
}
if (!i)
return;
ret = pWindowDriver->set_cursor(image, hotx, hoty);
if (ret)
return;
cursor(FL_CURSOR_DEFAULT);
}
/**
For back compatibility only.
Same as Fl_Window::cursor(Fl_Cursor)
*/
void Fl_Window::cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
cursor(c);
};
/**
For back compatibility only.
same as Fl_Window::default_cursor(Fl_Cursor)
*/
void Fl_Window::default_cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
default_cursor(c);
};
//
// End of "$Id$".
//