summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2001-09-02 11:23:27 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2001-09-02 11:23:27 +0000
commitbc3de1ec15062a9016150c124d6a4d6c14d87720 (patch)
tree182960a45f3b0e681708c9bba00f8ebe94112f57 /src
parente864789db9c66f588c232d1a901b92beb8e8d817 (diff)
Fix label/image problems.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1581 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/fl_draw.cxx52
-rw-r--r--src/fl_labeltype.cxx9
2 files changed, 35 insertions, 26 deletions
diff --git a/src/fl_draw.cxx b/src/fl_draw.cxx
index 83e73bb40..f727711e9 100644
--- a/src/fl_draw.cxx
+++ b/src/fl_draw.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: fl_draw.cxx,v 1.6.2.4.2.3 2001/08/06 15:19:20 easysw Exp $"
+// "$Id: fl_draw.cxx,v 1.6.2.4.2.4 2001/09/02 11:23:27 easysw Exp $"
//
// Label drawing code for the Fast Light Tool Kit (FLTK).
//
@@ -149,13 +149,15 @@ void fl_draw(
}
symtotal = symwidth[0] + symwidth[1];
-
- for (p = str, lines=0; p;) {
- e = expand(p, buf, w - symtotal, buflen, width, align&FL_ALIGN_WRAP);
- lines++;
- if (!*e || *e == '@') break;
- p = e;
- }
+
+ if (str) {
+ for (p = str, lines=0; p;) {
+ e = expand(p, buf, w - symtotal, buflen, width, align&FL_ALIGN_WRAP);
+ lines++;
+ if (!*e || *e == '@') break;
+ p = e;
+ }
+ } else lines = 0;
if ((symwidth[0] || symwidth[1]) && lines) {
if (symwidth[0]) symwidth[0] = lines * fl_height();
@@ -189,24 +191,26 @@ void fl_draw(
}
// now draw all the lines:
- int desc = fl_descent();
- for (p=str; ; ypos += height) {
- if (lines>1) e = expand(p, buf, w - symtotal, buflen, width,
- align&FL_ALIGN_WRAP);
+ if (str) {
+ int desc = fl_descent();
+ for (p=str; ; ypos += height) {
+ if (lines>1) e = expand(p, buf, w - symtotal, buflen, width,
+ align&FL_ALIGN_WRAP);
- if (width > symoffset) symoffset = (int)(width + 0.5);
+ if (width > symoffset) symoffset = (int)(width + 0.5);
- if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
- else if (align & FL_ALIGN_RIGHT) xpos = x + w - (int)(width + .5) - symwidth[1];
- else xpos = x + (w - (int)(width + .5) - symtotal) / 2 + symwidth[0];
+ if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
+ else if (align & FL_ALIGN_RIGHT) xpos = x + w - (int)(width + .5) - symwidth[1];
+ else xpos = x + (w - (int)(width + .5) - symtotal) / 2 + symwidth[0];
- callthis(buf,buflen,xpos,ypos-desc);
+ callthis(buf,buflen,xpos,ypos-desc);
- if (underline_at)
- callthis("_",1,xpos+int(fl_width(buf,underline_at-buf)),ypos-desc);
+ if (underline_at)
+ callthis("_",1,xpos+int(fl_width(buf,underline_at-buf)),ypos-desc);
- if (!*e || *e == '@') break;
- p = e;
+ if (!*e || *e == '@') break;
+ p = e;
+ }
}
// draw the image if the "text over image" alignment flag is set...
@@ -253,7 +257,7 @@ void fl_draw(
int x, int y, int w, int h, // bounding box
Fl_Align align,
Fl_Image* img) {
- if (!str || !*str) return;
+ if ((!str || !*str) && !img) return;
if (w && h && !fl_not_clipped(x, y, w, h)) return;
if (align & FL_ALIGN_CLIP) fl_clip(x, y, w, h);
fl_draw(str, x, y, w, h, align, fl_draw, img);
@@ -261,8 +265,8 @@ void fl_draw(
}
void fl_measure(const char* str, int& w, int& h) {
+ if (!str || !*str) {w = 0; h = 0; return;}
h = fl_height();
- if (!str || !*str) {w = 0; return;}
const char* p;
const char* e;
char buf[MAXBUF];
@@ -318,5 +322,5 @@ void fl_measure(const char* str, int& w, int& h) {
}
//
-// End of "$Id: fl_draw.cxx,v 1.6.2.4.2.3 2001/08/06 15:19:20 easysw Exp $".
+// End of "$Id: fl_draw.cxx,v 1.6.2.4.2.4 2001/09/02 11:23:27 easysw Exp $".
//
diff --git a/src/fl_labeltype.cxx b/src/fl_labeltype.cxx
index ce503bc55..3783c97d6 100644
--- a/src/fl_labeltype.cxx
+++ b/src/fl_labeltype.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: fl_labeltype.cxx,v 1.6.2.3.2.2 2001/08/06 03:17:43 easysw Exp $"
+// "$Id: fl_labeltype.cxx,v 1.6.2.3.2.3 2001/09/02 11:23:27 easysw Exp $"
//
// Label drawing routines for the Fast Light Tool Kit (FLTK).
//
@@ -31,6 +31,7 @@
#include <FL/Fl_Widget.H>
#include <FL/Fl_Group.H>
#include <FL/fl_draw.H>
+#include <FL/Fl_Image.H>
void
fl_no_label(const Fl_Label*,int,int,int,int,Fl_Align) {}
@@ -56,6 +57,10 @@ void
fl_normal_measure(const Fl_Label* o, int& W, int& H) {
fl_font(o->font, o->size);
fl_measure(o->value, W, H);
+ if (o->image) {
+ if (o->image->w() > W) W = o->image->w();
+ H += o->image->h();
+ }
}
#define MAX_LABELTYPE 16
@@ -131,5 +136,5 @@ void Fl_Widget::draw_label(int X, int Y, int W, int H, Fl_Align a) const {
#include <FL/Fl_Input_.H>
//
-// End of "$Id: fl_labeltype.cxx,v 1.6.2.3.2.2 2001/08/06 03:17:43 easysw Exp $".
+// End of "$Id: fl_labeltype.cxx,v 1.6.2.3.2.3 2001/09/02 11:23:27 easysw Exp $".
//