2 // "$Id: Fl_Window_hotspot.cxx 7903 2010-11-28 21:06:39Z matt $"
4 // Common hotspot routines for the Fast Light Tool Kit (FLTK).
6 // Copyright 1998-2010 by Bill Spitzak and others.
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Library General Public License for more details.
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23 // Please report all bugs and problems on the following page:
25 // http://www.fltk.org/str.php
29 #include <FL/Fl_Window.H>
33 void Fl_Window::hotspot(int X
, int Y
, int offscreen
) {
36 // Update the screen position based on the mouse position.
40 // If offscreen is 0 (the default), make sure that the window
41 // stays on the screen, if possible.
43 int scr_x
, scr_y
, scr_w
, scr_h
;
44 Fl::screen_xywh(scr_x
, scr_y
, scr_w
, scr_h
);
53 if (size_range_set
&& (maxw
!= minw
|| maxh
!= minh
)) {
54 left
= right
= GetSystemMetrics(SM_CXSIZEFRAME
);
55 top
= bottom
= GetSystemMetrics(SM_CYSIZEFRAME
);
57 left
= right
= GetSystemMetrics(SM_CXFIXEDFRAME
);
58 top
= bottom
= GetSystemMetrics(SM_CYFIXEDFRAME
);
60 top
+= GetSystemMetrics(SM_CYCAPTION
);
61 #elif defined(__APPLE__)
67 // Ensure border is on screen; these values are generic enough
68 // to work with many window managers, and are based on KDE defaults.
75 // now insure contents are on-screen (more important than border):
76 if (X
+w()+right
> scr_w
-scr_x
) X
= scr_w
-scr_x
-right
-w();
77 if (X
-left
< scr_x
) X
= left
;
78 if (Y
+h()+bottom
> scr_h
-scr_y
) Y
= scr_h
-scr_y
-bottom
-h();
79 if (Y
-top
< scr_y
) Y
= top
;
80 // make sure that we will force this position
87 void Fl_Window::hotspot(const Fl_Widget
*o
, int offscreen
) {
90 while (o
!= this && o
) {
91 X
+= o
->x(); Y
+= o
->y();
94 hotspot(X
,Y
,offscreen
);
99 // End of "$Id: Fl_Window_hotspot.cxx 7903 2010-11-28 21:06:39Z matt $".