From 685d58c4979f7c6a307b191321307e32130ed959 Mon Sep 17 00:00:00 2001 From: Bill Spitzak Date: Sun, 16 Jan 2000 04:30:39 +0000 Subject: Buttons on scrollbars draw pushed in (fix from barrero@irit.fr) Fl_Menu_::remove(int i) will remove an entire submenu if i is the index of the menu title. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.0@985 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl.cxx | 10 +++++++--- src/Fl_Menu_add.cxx | 15 +++++++++++---- src/Fl_Scrollbar.cxx | 16 ++++++++-------- 3 files changed, 26 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/Fl.cxx b/src/Fl.cxx index 4628ae017..aa0700e73 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -1,6 +1,6 @@ #include // -// "$Id: Fl.cxx,v 1.24.2.13 1999/10/23 06:19:59 bill Exp $" +// "$Id: Fl.cxx,v 1.24.2.14 2000/01/16 04:30:36 bill Exp $" // // Main event handling code for the Fast Light Tool Kit (FLTK). // @@ -573,7 +573,11 @@ void Fl_Window::hide() { #ifdef WIN32 if (x->private_dc) ReleaseDC(x->xid,x->private_dc); - if (x->xid == fl_window) fl_GetDC(0); // releases dc belonging to window + if (x->xid == fl_window && fl_gc) { + ReleaseDC(fl_window, fl_gc); + fl_window = (HWND)-1; + fl_gc = 0; + } #else if (x->region) XDestroyRegion(x->region); #endif @@ -700,5 +704,5 @@ int fl_old_shortcut(const char* s) { } // -// End of "$Id: Fl.cxx,v 1.24.2.13 1999/10/23 06:19:59 bill Exp $". +// End of "$Id: Fl.cxx,v 1.24.2.14 2000/01/16 04:30:36 bill Exp $". // diff --git a/src/Fl_Menu_add.cxx b/src/Fl_Menu_add.cxx index fe1647f78..82bc5df4b 100644 --- a/src/Fl_Menu_add.cxx +++ b/src/Fl_Menu_add.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Menu_add.cxx,v 1.9.2.4 1999/07/12 12:22:45 carl Exp $" +// "$Id: Fl_Menu_add.cxx,v 1.9.2.5 2000/01/16 04:30:37 bill Exp $" // // Menu utilities for the Fast Light Tool Kit (FLTK). // @@ -225,10 +225,17 @@ void Fl_Menu_::remove(int i) { int n = size(); if (i<0 || i>=n) return; if (!alloc) copy(menu_); - if (alloc > 1) free((void *)menu_[i].text); - memmove(&menu_[i],&menu_[i+1],(n-i)*sizeof(Fl_Menu_Item)); + // find the next item, skipping submenus: + Fl_Menu_Item* item = menu_+i; + const Fl_Menu_Item* next_item = item->next(); + // delete the text only if all items were created with add(): + if (alloc > 1) { + for (Fl_Menu_Item* m = item; m < next_item; m++) + if (m->text) free((void*)(m->text)); + } + memmove(item, next_item, ((menu_+n+1)-next_item)*sizeof(Fl_Menu_Item)); } // -// End of "$Id: Fl_Menu_add.cxx,v 1.9.2.4 1999/07/12 12:22:45 carl Exp $". +// End of "$Id: Fl_Menu_add.cxx,v 1.9.2.5 2000/01/16 04:30:37 bill Exp $". // diff --git a/src/Fl_Scrollbar.cxx b/src/Fl_Scrollbar.cxx index 88dc8971b..16ba09074 100644 --- a/src/Fl_Scrollbar.cxx +++ b/src/Fl_Scrollbar.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Scrollbar.cxx,v 1.7.2.4 1999/12/29 03:14:37 mike Exp $" +// "$Id: Fl_Scrollbar.cxx,v 1.7.2.5 2000/01/16 04:30:37 bill Exp $" // // Scroll bar widget for the Fast Light Tool Kit (FLTK). // @@ -106,7 +106,7 @@ int Fl_Scrollbar::handle(int event) { case FL_LEAVE: return 1; case FL_RELEASE: - damage(FL_DAMAGE_EXPOSE); + damage(FL_DAMAGE_ALL); if (pushed_) { Fl::remove_timeout(timeout_cb, this); pushed_ = 0; @@ -120,7 +120,7 @@ int Fl_Scrollbar::handle(int event) { handle_push(); Fl::add_timeout(INITIALREPEAT, timeout_cb, this); increment_cb(); - damage(FL_DAMAGE_EXPOSE); + damage(FL_DAMAGE_ALL); return 1; } return Fl_Slider::handle(event, X,Y,W,H); @@ -190,9 +190,9 @@ void Fl_Scrollbar::draw() { if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;} Fl_Slider::draw(X+H,Y,W-2*H,H); if (damage()&FL_DAMAGE_ALL) { - draw_box((pushed_&1) ? down(slider()) : slider(), + draw_box((pushed_==1) ? down(slider()) : slider(), X, Y, H, H, selection_color()); - draw_box((pushed_&2) ? down(slider()) : slider(), + draw_box((pushed_==2) ? down(slider()) : slider(), X+W-H, Y, H, H, selection_color()); if (active_r()) fl_color(labelcolor()); @@ -210,9 +210,9 @@ void Fl_Scrollbar::draw() { if (H < 3*W) {Fl_Slider::draw(X,Y,W,H); return;} Fl_Slider::draw(X,Y+W,W,H-2*W); if (damage()&FL_DAMAGE_ALL) { - draw_box((pushed_&1) ? down(slider()) : slider(), + draw_box((pushed_==1) ? down(slider()) : slider(), X, Y, W, W, selection_color()); - draw_box((pushed_&2) ? down(slider()) : slider(), + draw_box((pushed_==2) ? down(slider()) : slider(), X, Y+H-W, W, W, selection_color()); if (active_r()) fl_color(labelcolor()); @@ -241,5 +241,5 @@ Fl_Scrollbar::Fl_Scrollbar(int X, int Y, int W, int H, const char* L) } // -// End of "$Id: Fl_Scrollbar.cxx,v 1.7.2.4 1999/12/29 03:14:37 mike Exp $". +// End of "$Id: Fl_Scrollbar.cxx,v 1.7.2.5 2000/01/16 04:30:37 bill Exp $". // -- cgit v1.2.3