summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2009-02-25 08:44:54 +0000
committerAlbrecht Schlosser <albrechts.fltk@online.de>2009-02-25 08:44:54 +0000
commit561c52455c2e9dbc620df9a12f5d2e25fa97bf15 (patch)
treecf9bceb5104b19364409bfa14722d747ab03d7c9
parent9effc624af9441bc6f9a55f52ebbd6b2e3b973af (diff)
Fl_Window::draw() now doesn't reset its x/y-coordinates to 0 anymore
before drawing itself and its children. The problem was that subwindows "lost" their x/y-coordinates during draw(), and child widgets couldn't get their parent window's coordinates. Currently this is needed (maybe only) in fl_set_spot() for Windows, but it had been solved there with a Windows-specific coordinate transformation (MapWindowPoints). Todo: rewrite Fl_win32.cxx/fl_set_spot(). git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6669 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--CHANGES2
-rw-r--r--src/Fl_Window.cxx23
2 files changed, 12 insertions, 13 deletions
diff --git a/CHANGES b/CHANGES
index dcd2c35e7..1e133e154 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,7 @@
CHANGES IN FLTK 1.3.0
+ - Fl_Window::draw() now doesn't reset its x/y-coordinates to 0
+ anymore before drawing itself and its children.
- All draw() methods of widgets are now protected (STR #2142).
- The new configure option --enable-x11 (lowercase 'x') enables
cygwin builds under Windows (with --enable-cygwin) to use X11
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index 0cab6f232..c8870d81a 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -99,14 +99,16 @@ int Fl_Window::y_root() const {
}
void Fl_Window::draw() {
- const char *savelabel = label();
- int saveflags = flags();
- int savex = x(); x(0);
- int savey = y(); y(0);
- // Make sure we don't draw the window title in the window background...
- clear_flag(COPIED_LABEL); // do not free copied labels!
- Fl_Widget::label(0);
- Fl_Group::draw();
+
+ // The following is similar to Fl_Group::draw(), but ...
+ // - we draw the box with x=0 and y=0 instead of x() and y()
+ // - we don't draw a label
+
+ if (damage() & ~FL_DAMAGE_CHILD) { // draw the entire thing
+ draw_box(box(),0,0,w(),h(),color()); // draw box with x/y = 0
+ }
+ draw_children();
+
#ifdef __APPLE_QUARTZ__
if (!parent() && resizable() && (!size_range_set || minh!=maxh || minw!=maxw)) {
int dx = Fl::box_dw(box())-Fl::box_dx(box());
@@ -127,11 +129,6 @@ void Fl_Window::draw() {
}
}
#endif
- // Restore the label...
- Fl_Widget::label(savelabel);
- set_flag(saveflags);
- y(savey);
- x(savex);
# if defined(USE_CAIRO)
Fl::cairo_make_current(this); // checkout if an update is necessary