Fix for STR #2944 [2]: Fix Apple-specifc nested window problem for Fl_Gl_Window's.

Added new method Fl_Widget::window_offset(x,y)
		       to access the top-level window offset of the current widget.

		       Open to alternative names for the new method.



git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9866 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Greg Ercolano 2013-04-08 18:24:17 +00:00
parent 2a5d5aab30
commit d5404dea25
3 changed files with 20 additions and 2 deletions

View File

@ -120,6 +120,7 @@ protected:
\see force_position(int)
*/
int force_position() const { return ((flags() & FORCE_POSITION)?1:0); }
Fl_Window* window_offset(int& xoff, int& yoff) const;
public:

View File

@ -183,8 +183,10 @@ void Fl_Gl_Window::make_current() {
GLint xywh[4];
if (window()) {
xywh[0] = x();
xywh[1] = window()->h() - y() - h();
int xoff,yoff;
const Fl_Window *win = window_offset(xoff, yoff); // STR #2944 [2]
xywh[0] = xoff;
xywh[1] = win->h() - yoff - h();
} else {
xywh[0] = 0;
xywh[1] = 0;

View File

@ -278,6 +278,21 @@ void Fl_Window::icon(const void * ic) {
icon_ = ic;
}
/**
Finds the x/y offset of the current window relative to the top-level window.
\param[out] xoff,yoff Returns the x/y offset
\returns the top-level window
*/
Fl_Window* Fl_Window::window_offset(int& xoff, int& yoff) const {
xoff = yoff = 0;
const Fl_Window *win = (const Fl_Window*)this;
while (win && win->window()) {
xoff += win->x(); // accumulate offsets
yoff += win->y();
win = win->window(); // walk up window hierarchy
}
return (Fl_Window*)win;
}
//
// End of "$Id$".