diff --git a/test/fullscreen.cxx b/test/fullscreen.cxx index 65c25036abd6859b88f19ddc6ddf4b5f4e070444..56432859e065307c1075d17353764a3c1e774292 100644 --- a/test/fullscreen.cxx +++ b/test/fullscreen.cxx @@ -1,6 +1,6 @@ // // -// Copyright 1998-2024 by Bill Spitzak and others. +// Copyright 1998-2025 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 @@ -121,43 +121,31 @@ void shape_window::draw() { class fullscreen_window : public Fl_Single_Window { public: - fullscreen_window(int W, int H, const char *t=0); - int handle (int e) FL_OVERRIDE; + fullscreen_window(int W, int H, const char *t=0) : Fl_Single_Window(W, H, t) {} void resize(int x, int y, int w, int h) FL_OVERRIDE; - Fl_Toggle_Light_Button *b3_maxi; - Fl_Toggle_Light_Button *b3; - Fl_Toggle_Light_Button *b4; + Fl_Toggle_Light_Button *border_button; + Fl_Toggle_Light_Button *maximize_button; + Fl_Toggle_Light_Button *fullscreen_button; + Fl_Toggle_Light_Button *allscreens_button; }; -fullscreen_window::fullscreen_window(int W, int H, const char *t) : Fl_Single_Window(W, H, t) { +void after_resize(fullscreen_window *win) { + if (win->maximize_active()) win->maximize_button->set(); + else win->maximize_button->clear(); + win->maximize_button->redraw(); + if (win->fullscreen_active()) win->fullscreen_button->set(); + else win->fullscreen_button->clear(); + win->fullscreen_button->redraw(); } -void after_resize(void *data) { - Fl::remove_check(after_resize, data); - fullscreen_window *win = (fullscreen_window*)data; - if (win->maximize_active()) win->b3_maxi->set(); - else win->b3_maxi->clear(); - win->b3_maxi->redraw(); - if (win->fullscreen_active()) win->b3->set(); - else win->b3->clear(); - win->b3->redraw(); -} void fullscreen_window::resize(int x, int y, int w, int h) { Fl_Single_Window::resize(x,y,w,h); - Fl::add_check(after_resize, this); -}; - -int fullscreen_window::handle(int e) { - if (e == FL_FULLSCREEN) { - // fprintf(stderr, "Received FL_FULLSCREEN event\n"); - b3->value(fullscreen_active()); - } - if (Fl_Single_Window::handle(e)) return 1; - return 0; + Fl::add_timeout(0, (Fl_Timeout_Handler)after_resize, this); } + void sides_cb(Fl_Widget *o, void *p) { shape_window *sw = (shape_window *)p; sw->sides = int(((Fl_Slider *)o)->value()); @@ -184,25 +172,25 @@ void border_cb(Fl_Button *b, Fl_Window *w) { void maximize_cb(Fl_Button *b, Fl_Window *w) { + if (w->fullscreen_active()) { + b->value(1 - b->value()); + return; + } if (w->maximize_active()) { w->un_maximize(); - if (w->maximize_active()) b->set(); } else { w->maximize(); - if (!w->maximize_active()) b->clear(); } } -Fl_Button *border_button; -void fullscreen_cb(Fl_Widget *o, void *p) { - Fl_Window *w = (Fl_Window *)p; - int d = ((Fl_Button *)o)->value(); - if (d) { +void fullscreen_cb(Fl_Button *b, Fl_Window *w) { + if (w->maximize_active()) { + b->value(1 - b->value()); + return; + } + if (b->value()) { w->fullscreen(); -#ifndef _WIN32 // update our border state in case border was turned off - border_button->value(w->border()); -#endif } else { w->fullscreen_off(); } @@ -307,7 +295,7 @@ int main(int argc, char **argv) { #endif Fl_Window *w; - if (twowindow) { // make it's own window + if (twowindow) { // make its own window sw.resizable(&sw); w = &sw; window.set_modal(); // makes controls stay on top when fullscreen pushed @@ -337,22 +325,21 @@ int main(int argc, char **argv) { Fl_Input i1(50,y,window.w()-60,30, "Input"); y+=30; - Fl_Toggle_Light_Button b2(50,y,window.w()-60,30,"Border"); - b2.callback((Fl_Callback*)border_cb,w); - b2.set(); - border_button = &b2; + window.border_button = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"Border"); + window.border_button->callback((Fl_Callback*)border_cb,w); + window.border_button->set(); y+=30; - window.b3 = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"FullScreen"); - window.b3->callback(fullscreen_cb,w); + window.fullscreen_button = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"FullScreen"); + window.fullscreen_button->callback((Fl_Callback*)fullscreen_cb,w); y+=30; - window.b3_maxi = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"Maximize"); - window.b3_maxi->callback((Fl_Callback*)maximize_cb,w); + window.maximize_button = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"Maximize"); + window.maximize_button->callback((Fl_Callback*)maximize_cb,w); y+=30; - window.b4 = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"All Screens"); - window.b4->callback(allscreens_cb,w); + window.allscreens_button = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"All Screens"); + window.allscreens_button->callback(allscreens_cb,w); y+=30; Fl_Button eb(50,y,window.w()-60,30,"Exit"); @@ -367,7 +354,7 @@ int main(int argc, char **argv) { update.callback(update_screeninfo, browser); y+=30; - if (initfull) {window.b3->set(); window.b3->do_callback();} + if (initfull) {window.fullscreen_button->set(); window.fullscreen_button->do_callback();} window.end(); window.show(argc,argv);