STR #1061: fixed Fl_Window::cursor for subwindows and GL windows on WIN32
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4634 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
fa517add2e
commit
4663981310
@ -59,8 +59,13 @@ void Fl_Window::default_cursor(Fl_Cursor c, Fl_Color fg, Fl_Color bg) {
|
||||
# define IDC_HAND MAKEINTRESOURCE(32649)
|
||||
# endif // !IDC_HAND
|
||||
|
||||
void Fl_Window::cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
|
||||
void Fl_Window::cursor(Fl_Cursor c, Fl_Color c1, Fl_Color c2) {
|
||||
if (!shown()) return;
|
||||
// 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, c1, c2); return; }
|
||||
// now set the actual cursor
|
||||
if (c == FL_CURSOR_DEFAULT) {
|
||||
c = cursor_default;
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ public:
|
||||
|
||||
class cube_box : public Fl_Gl_Window {
|
||||
void draw();
|
||||
int handle(int);
|
||||
public:
|
||||
double lasttime;
|
||||
int wire;
|
||||
@ -123,6 +124,14 @@ void cube_box::draw() {
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
int cube_box::handle(int e) {
|
||||
switch (e) {
|
||||
case FL_ENTER: cursor(FL_CURSOR_CROSS); break;
|
||||
case FL_LEAVE: cursor(FL_CURSOR_DEFAULT); break;
|
||||
}
|
||||
return Fl_Gl_Window::handle(e);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Fl_Window *form;
|
||||
|
@ -79,11 +79,13 @@ class testwindow : public Fl_Window {
|
||||
int handle(int);
|
||||
void draw();
|
||||
int cx, cy; char key;
|
||||
Fl_Cursor crsr;
|
||||
public:
|
||||
testwindow(Fl_Boxtype b,int x,int y,const char *l)
|
||||
: Fl_Window(x,y,l) {box(b); key = 0;}
|
||||
: Fl_Window(x,y,l), crsr(FL_CURSOR_DEFAULT) {box(b); key = 0;}
|
||||
testwindow(Fl_Boxtype b,int x,int y,int w,int h,const char *l)
|
||||
: Fl_Window(x,y,w,h,l) {box(b); key = 0;}
|
||||
void use_cursor(Fl_Cursor c) { crsr = c; }
|
||||
};
|
||||
|
||||
#include <FL/fl_draw.H>
|
||||
@ -100,6 +102,12 @@ int testwindow::handle(int e) {
|
||||
#ifdef DEBUG
|
||||
if (e != FL_MOVE) printf("%s : %s\n",label(),eventnames[e]);
|
||||
#endif
|
||||
if (crsr!=FL_CURSOR_DEFAULT) {
|
||||
if (e == FL_ENTER)
|
||||
cursor(crsr);
|
||||
if (e == FL_LEAVE)
|
||||
cursor(FL_CURSOR_DEFAULT);
|
||||
}
|
||||
if (Fl_Window::handle(e)) return 1;
|
||||
if (e == FL_FOCUS) return 1;
|
||||
if (e == FL_PUSH) {Fl::focus(this); return 1;}
|
||||
@ -169,6 +177,7 @@ int main(int argc, char **argv) {
|
||||
subwindow->resizable(subwindow);
|
||||
window->resizable(subwindow);
|
||||
subwindow->end();
|
||||
subwindow->use_cursor(FL_CURSOR_HAND);
|
||||
(new Fl_Box(FL_NO_BOX,0,0,400,100,
|
||||
"A child Fl_Window with children of it's own may "
|
||||
"be useful for imbedding controls into a GL or display "
|
||||
|
Loading…
Reference in New Issue
Block a user