From 00ec9da8f5cf0f37f3c64e0a45b4046f86153765 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Tue, 29 Aug 2006 10:04:02 +0000 Subject: - removed more inconsistencies between fl_draw and fl_measure (STR #1408) - made the Tooltip hide code a little bit smarter - Added subwindow test case to Fl_Tabs git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5378 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- CHANGES | 2 ++ src/Fl_Tooltip.cxx | 6 +++--- src/fl_draw.cxx | 42 +++++++++++++++++++++--------------------- test/tabs.fl | 21 +++++++++++++-------- 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/CHANGES b/CHANGES index 3fbab9522..be63beef9 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ CHANGES IN FLTK 1.1.8 + - Fixed more inconsistencies between fl_draw + and fl_measure (STR #1408) - Fixed fl_measure which mistook a trailing '@@' for a symbol (STR #1406) - Fixed GLUT behavior on window creation (STR #1403) diff --git a/src/Fl_Tooltip.cxx b/src/Fl_Tooltip.cxx index 2834b3cec..acba0be7d 100644 --- a/src/Fl_Tooltip.cxx +++ b/src/Fl_Tooltip.cxx @@ -194,7 +194,7 @@ Fl_Tooltip::exit_(Fl_Widget *w) { widget_ = 0; Fl::remove_timeout(tooltip_timeout); Fl::remove_timeout(recent_timeout); - if (window) window->hide(); + if (window && window->visible()) window->hide(); if (recent_tooltip) { if (Fl::event_state() & FL_BUTTONS) recent_tooltip = 0; else Fl::add_timeout(Fl_Tooltip::hoverdelay(), recent_timeout); @@ -233,11 +233,11 @@ Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t) #ifdef WIN32 // possible fix for the Windows titlebar, it seems to want the // window to be destroyed, moving it messes up the parenting: - if (window) window->hide(); + if (window && window->visible()) window->hide(); #endif // WIN32 tooltip_timeout(0); } else { - if (window) window->hide(); + if (window && window->visible()) window->hide(); Fl::add_timeout(Fl_Tooltip::delay(), tooltip_timeout); } diff --git a/src/fl_draw.cxx b/src/fl_draw.cxx index d1fe15839..64aabb690 100644 --- a/src/fl_draw.cxx +++ b/src/fl_draw.cxx @@ -158,15 +158,13 @@ void fl_draw( symtotal = symwidth[0] + symwidth[1]; - if (str) { - for (p = str, lines=0; p;) { - e = expand(p, buf, w - symtotal, buflen, width, align&FL_ALIGN_WRAP, - draw_symbols); - lines++; - if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break; - p = e; - } - } else lines = 0; + for (p = str, lines=0; p;) { + e = expand(p, buf, w - symtotal, buflen, width, align&FL_ALIGN_WRAP, + draw_symbols); + lines++; + if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break; + p = e; + } if ((symwidth[0] || symwidth[1]) && lines) { if (symwidth[0]) symwidth[0] = lines * fl_height(); @@ -295,19 +293,21 @@ void fl_measure(const char* str, int& w, int& h, int draw_symbols) { symbol[1][0] = '\0'; symwidth[1] = 0; - if (str && str[0] == '@' && str[1] && str[1] != '@') { - // Start with a symbol... - for (symptr = symbol[0]; - *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 1); - *symptr++ = *str++); - *symptr = '\0'; - if (isspace(*str)) str++; - symwidth[0] = h; - } + if (draw_symbols) { + if (str && str[0] == '@' && str[1] && str[1] != '@') { + // Start with a symbol... + for (symptr = symbol[0]; + *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 1); + *symptr++ = *str++); + *symptr = '\0'; + if (isspace(*str)) str++; + symwidth[0] = min(w,h); + } - if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1]!='@') { - strlcpy(symbol[1], p, sizeof(symbol[1])); - symwidth[1] = h; + if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1]!='@') { + strlcpy(symbol[1], p, sizeof(symbol[1])); + symwidth[1] = min(w,h); + } } symtotal = symwidth[0] + symwidth[1]; diff --git a/test/tabs.fl b/test/tabs.fl index 2f23562d6..4424f138a 100644 --- a/test/tabs.fl +++ b/test/tabs.fl @@ -1,18 +1,18 @@ # data file for the Fltk User Interface Designer (fluid) -version 1.0107 +version 1.0108 header_name {.h} code_name {.cxx} Function {} {open } { Fl_Window foo_window {open - xywh {561 88 320 331} type Double resizable visible + xywh {423 205 320 331} type Double resizable visible } { Fl_Tabs {} {open tooltip {the various index cards test different aspects of the Fl_Tabs widget} xywh {10 10 300 200} selection_color 4 labelcolor 7 resizable } { Fl_Group {} { - label Label1 open - tooltip {this Tab tests correct keyboard navigation between text input fields} xywh {10 30 300 180} selection_color 1 hide resizable + label Label1 open selected + tooltip {this Tab tests correct keyboard navigation between text input fields} xywh {10 30 300 180} selection_color 1 resizable } { Fl_Input {} { label {input:} @@ -28,8 +28,8 @@ Function {} {open } } Fl_Group {} { - label tab2 open selected - tooltip {tab2 tests among other things the cooperation of modal windows and tabs} xywh {10 30 300 180} selection_color 2 + label tab2 open + tooltip {tab2 tests among other things the cooperation of modal windows and tabs} xywh {10 30 300 180} selection_color 2 hide } { Fl_Button {} { label button1 @@ -93,16 +93,21 @@ Function {} {open } { Fl_Button {} { label button2 - tooltip {button2 has a different tooltp than tab5} xywh {20 80 60 80} + tooltip {button2 has a different tooltp than tab5} xywh {20 45 60 80} } Fl_Button {} { label button - xywh {90 90 60 80} + xywh {90 45 60 80} } Fl_Clock {} { label {Make sure this clock does not use processor time when this tab is hidden or window is iconized} xywh {160 50 100 100} box OSHADOW_BOX color 238 selection_color 0 labelfont 8 labelsize 10 align 130 } + Fl_Group {} { + label subwindow open + xywh {20 135 130 65} box THIN_DOWN_BOX color 167 align 16 + class Fl_Window + } {} } } Fl_Input {} { -- cgit v1.2.3