summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--FL/Fl_Tabs.H19
-rw-r--r--src/Fl_Tabs.cxx21
3 files changed, 40 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 9ac323966..84d3df40a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,8 @@ Changes in FLTK 1.4.0 Released: ??? ?? 2017
New Features and Extensions
+ - New method Fl_Tabs::tab_align() allows to set alignment of tab labels,
+ particularly to support icons on tab labels (STR #3076).
- Added '--enable-print' option to configure effective under X11 platforms
and with 'yes' default value. Using '--enable-print=no' removes print
and PostScript support from the FLTK library, thus reducing its size.
@@ -51,6 +53,7 @@ Changes in FLTK 1.4.0 Released: ??? ?? 2017
Bug Fixes
- (add new items here)
+ - Fix Fl_Tabs label drawing for Fl_Window children (STR #3075).
- Fix line number alignment in Fl_Text_Display/Editor (STR #3363).
- Fix ignored buffer pre-allocation (requestedSize) in Fl_Text_Buffer.
See fltk.general "Fl_Text_Buffer constructor bug" on Dec 5, 2016.
diff --git a/FL/Fl_Tabs.H b/FL/Fl_Tabs.H
index 3d75db81d..06c23aee5 100644
--- a/FL/Fl_Tabs.H
+++ b/FL/Fl_Tabs.H
@@ -208,6 +208,7 @@ class FL_EXPORT Fl_Tabs : public Fl_Group {
int tab_height();
void draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int sel=0);
protected:
+ Fl_Align tab_align_; // tab label alignment
void redraw_tabs();
void draw();
@@ -231,6 +232,24 @@ public:
Fl_Widget *which(int event_x, int event_y);
~Fl_Tabs();
void client_area(int &rx, int &ry, int &rw, int &rh, int tabh=0);
+ /**
+ Sets the tab label alignment.
+
+ The default is FL_ALIGN_CENTER so tab labels are centered, but since
+ the label space is measured (per label) to fit the labels, there
+ wouldn't be any difference if labels were aligned left or right.
+
+ If you want to show an image (icon) next to the group's label you can
+ set a different label alignment. FL_ALIGN_IMAGE_NEXT_TO_TEXT is the
+ recommended alignment to show the icon left of the text.
+ */
+ void tab_align(Fl_Align a) {tab_align_ = a;}
+ /**
+ Gets the tab label alignment.
+
+ \see tab_align(Fl_Align)
+ */
+ Fl_Align tab_align() const {return tab_align_;}
};
#endif
diff --git a/src/Fl_Tabs.cxx b/src/Fl_Tabs.cxx
index d57b92bc9..eaba0dbbb 100644
--- a/src/Fl_Tabs.cxx
+++ b/src/Fl_Tabs.cxx
@@ -63,7 +63,15 @@ int Fl_Tabs::tab_positions() {
if (o->visible()) selected = i;
int wt = 0; int ht = 0;
+ Fl_Labeltype ot = o->labeltype();
+ Fl_Align oa = o->align();
+ if (ot == FL_NO_LABEL) {
+ o->labeltype(FL_NORMAL_LABEL);
+ }
+ o->align(tab_align());
o->measure_label(wt,ht);
+ o->labeltype(ot);
+ o->align(oa);
tab_width[i] = wt + EXTRASPACE;
tab_pos[i+1] = tab_pos[i] + tab_width[i] + BORDER;
@@ -380,8 +388,13 @@ void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
Fl_Boxtype bt = (o == push_ && !sel) ? fl_down(box()) : box();
Fl_Color bc = sel ? selection_color() : o->selection_color();
- // Save the label color
+ // Save the label color and label type
Fl_Color oc = o->labelcolor();
+ Fl_Labeltype ot = o->labeltype();
+
+ // Set a labeltype that really draws a label
+ if (ot == FL_NO_LABEL)
+ o->labeltype(FL_NORMAL_LABEL);
// compute offsets to make selected tab look bigger
int yofs = sel ? 0 : BORDER;
@@ -398,7 +411,7 @@ void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
// Draw the label using the current color...
o->labelcolor(sel ? labelcolor() : o->labelcolor());
- o->draw_label(x1, y() + yofs, W, H - yofs, FL_ALIGN_CENTER);
+ o->draw_label(x1, y() + yofs, W, H - yofs, tab_align());
if (Fl::focus() == this && o->visible())
draw_focus(box(), x1, y(), W, H);
@@ -425,8 +438,9 @@ void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
}
fl_draw_shortcut = prev_draw_shortcut;
- // Restore the original label color
+ // Restore the original label color and label type
o->labelcolor(oc);
+ o->labeltype(ot);
}
/**
@@ -458,6 +472,7 @@ Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) :
tab_pos = 0;
tab_width = 0;
tab_count = 0;
+ tab_align_ = FL_ALIGN_CENTER;
}
Fl_Tabs::~Fl_Tabs() {