// // "$Id: Fl_Window_fullscreen.cxx 8515 2011-03-12 21:36:21Z manolo $" // // Fullscreen window support for the Fast Light Tool Kit (FLTK). // // Copyright 1998-2010 by Bill Spitzak and others. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please report all bugs and problems on the following page: // // http://www.fltk.org/str.php // // Turning the border on/off by changing the motif_wm_hints property // works on Irix 4DWM. Does not appear to work for any other window // manager. Fullscreen still works on some window managers (fvwm is one) // because they allow the border to be placed off-screen. // Unfortunately most X window managers ignore changes to the border // and refuse to position the border off-screen, so attempting to make // the window full screen will lose the size of the border off the // bottom and right. #include #include #include void Fl_Window::border(int b) { if (b) { if (border()) return; clear_flag(NOBORDER); } else { if (!border()) return; set_flag(NOBORDER); } #if defined(USE_X11) if (shown()) Fl_X::i(this)->sendxjunk(); #elif defined(WIN32) // not yet implemented, but it's possible // for full fullscreen we have to make the window topmost as well #elif defined(__APPLE_QUARTZ__) // warning: not implemented in Quartz/Carbon #else # error unsupported platform #endif } void fullscreen_x(Fl_Window *w); void fullscreen_off_x(); void fullscreen_off_x(Fl_Window *w, int X, int Y, int W, int H); /* Note: The previous implementation toggled border(). With this new implementation this is not necessary. Additionally, if we do that, the application may lose focus when switching out of fullscreen mode with some window managers. Besides, the API does not say that the FLTK border state should be toggled; it only says that the borders should not be *visible*. */ void Fl_Window::fullscreen() { if (shown() && !(flags() & Fl_Widget::FULLSCREEN)) { no_fullscreen_x = x(); no_fullscreen_y = y(); no_fullscreen_w = w(); no_fullscreen_h = h(); fullscreen_x(this); } else { set_flag(FULLSCREEN); } } void Fl_Window::fullscreen_off(int X,int Y,int W,int H) { if (shown() && (flags() & Fl_Widget::FULLSCREEN)) { fullscreen_off_x(this, X, Y, W, H); } else { clear_flag(FULLSCREEN); } no_fullscreen_x = no_fullscreen_y = no_fullscreen_w = no_fullscreen_h = 0; } void Fl_Window::fullscreen_off() { if (!no_fullscreen_x && !no_fullscreen_y) { // Window was initially created fullscreen - default to current monitor no_fullscreen_x = x(); no_fullscreen_y = y(); } fullscreen_off(no_fullscreen_x, no_fullscreen_y, no_fullscreen_w, no_fullscreen_h); } // // End of "$Id: Fl_Window_fullscreen.cxx 8515 2011-03-12 21:36:21Z manolo $". //