summaryrefslogtreecommitdiff
path: root/src/Fl_Browser.cxx
diff options
context:
space:
mode:
authorBill Spitzak <spitzak@gmail.com>1999-03-07 08:51:44 +0000
committerBill Spitzak <spitzak@gmail.com>1999-03-07 08:51:44 +0000
commit51d37642ba4f9071ac178328cec7d421d4724187 (patch)
tree6ac5e6ad6e0b210b2b8bf32168752787bdb46db4 /src/Fl_Browser.cxx
parent6c793587e3305a4de1a080bb5663a356392c1075 (diff)
Contributed code for more accurate item_height() in Fl_Browser.
Fixed display of Fl_Choice yet again Tried to remove warning egcs warning messages from Fl_Color_Chooser Fl_Value_Input updates without user having to type Enter git-svn-id: file:///fltk/svn/fltk/trunk@374 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Browser.cxx')
-rw-r--r--src/Fl_Browser.cxx48
1 files changed, 39 insertions, 9 deletions
diff --git a/src/Fl_Browser.cxx b/src/Fl_Browser.cxx
index 0d85a22d1..4a7fef20e 100644
--- a/src/Fl_Browser.cxx
+++ b/src/Fl_Browser.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Browser.cxx,v 1.7 1999/01/30 00:39:28 carl Exp $"
+// "$Id: Fl_Browser.cxx,v 1.8 1999/03/07 08:51:41 bill Exp $"
//
// Browser widget for the Fast Light Tool Kit (FLTK).
//
@@ -206,13 +206,43 @@ int Fl_Browser::item_height(void* lv) const {
FL_BLINE* l = (FL_BLINE*)lv;
if (l->flags & NOTDISPLAYED) return 0;
char* str = l->txt;
- int t = textsize()+2;
- if (*str == format_char()) switch (*(str+1)) {
- case 'l': case 'L': t = 26; break;
- case 'm': case 'M': t = 20; break;
- case 's': case 'S': t = 13; break;
+ Fl_Font font;
+ int size;
+ int w, h;
+ int hmax = 0;
+
+ for(;*str;str++)
+ {
+ w = 0; // no wrap
+ font = Fl_Font(0); // default font
+ size = textsize(); // default size
+ while(*str==format_char())
+ {
+ str++;
+ switch (*str++) {
+ case 'l': case 'L': size = 24; break;
+ case 'm': case 'M': size = 18; break;
+ case 's': size = 11; break;
+ case 'b': font = (Fl_Font)(font|FL_BOLD); break;
+ case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
+ case 'f': case 't': font = FL_COURIER; break;
+ case 'S': size = strtol(str,&str,10); break;
+ case 'F': font = (Fl_Font)strtol(str,&str,10); break;
+ case 0: case '@': str--;
+ case '.': goto END_FORMAT;
+ }
+ }
+ END_FORMAT:
+ char* ptr = str;
+ for(;*str && (*str!=column_char());str++) ;
+ char prev = *str;
+ *str = 0;
+ fl_font(font,size);
+ fl_measure(ptr,w,h);
+ *str = prev;
+ if(h>hmax) hmax=h;
}
- return t;
+ return hmax+2;
}
int Fl_Browser::item_width(void* v) const {
@@ -334,7 +364,7 @@ void Fl_Browser::item_draw(void* v, int x, int y, int w, int h) const {
if (((FL_BLINE*)v)->flags & SELECTED)
lcol = contrast(lcol, selection_color());
fl_color(lcol);
- fl_draw(str, x+3, y, w1-6, h, align);
+ fl_draw(str, x+3, y, w1-6, h, e ? Fl_Align(align|FL_ALIGN_CLIP) : align);
if (!e) break; // no more fields...
*e = column_char(); // put the seperator back
x += w1;
@@ -451,5 +481,5 @@ int Fl_Browser::value() const {
}
//
-// End of "$Id: Fl_Browser.cxx,v 1.7 1999/01/30 00:39:28 carl Exp $".
+// End of "$Id: Fl_Browser.cxx,v 1.8 1999/03/07 08:51:41 bill Exp $".
//