aboutsummaryrefslogtreecommitdiff
path: root/src/Toolbar.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Toolbar.cc')
-rw-r--r--src/Toolbar.cc33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/Toolbar.cc b/src/Toolbar.cc
index b607f21..1bd3fb5 100644
--- a/src/Toolbar.cc
+++ b/src/Toolbar.cc
@@ -868,6 +868,8 @@ void Toolbar::rearrangeItems() {
868 ItemList::iterator item_it_end = m_item_list.end(); 868 ItemList::iterator item_it_end = m_item_list.end();
869 int bevel_width = theme()->bevelWidth(); 869 int bevel_width = theme()->bevelWidth();
870 int fixed_width = bevel_width; // combined size of all fixed items 870 int fixed_width = bevel_width; // combined size of all fixed items
871 int relative_width = 0; // combined *desired* size of all relative items
872 int stretch_items = 0;
871 int relative_items = 0; 873 int relative_items = 0;
872 int last_bw = 0; // we show the largest border of adjoining items 874 int last_bw = 0; // we show the largest border of adjoining items
873 bool first = true; 875 bool first = true;
@@ -895,7 +897,7 @@ void Toolbar::rearrangeItems() {
895 897
896 last_bw = borderW; 898 last_bw = borderW;
897 899
898 tmpw = (*item_it)->width(); 900 tmpw = (*item_it)->preferredWidth();
899 tmph = (*item_it)->height(); 901 tmph = (*item_it)->height();
900 FbTk::translateSize(orient, tmpw, tmph); 902 FbTk::translateSize(orient, tmpw, tmph);
901 903
@@ -906,18 +908,22 @@ void Toolbar::rearrangeItems() {
906 if (bevel_width) 908 if (bevel_width)
907 fixed_width -= 2*(borderW + bevel_width); 909 fixed_width -= 2*(borderW + bevel_width);
908 } else { 910 } else {
909 relative_items++; 911 ++relative_items;
912 relative_width += tmpw;
913 if (!tmpw)
914 ++stretch_items;
910 } 915 }
911 } 916 }
912 917
913 // calculate what's going to be left over to the relative sized items 918 // calculate what's going to be left over to the relative sized items
914 int relative_width = 0; 919 float stretch_factor = 1.0f;
915 int rounding_error = 0; 920 if (relative_items) {
916 if (relative_items == 0) 921 if (relative_width <= width - fixed_width && stretch_items) {
917 relative_width = 0; 922 relative_width = int(width - fixed_width - relative_width)/stretch_items;
918 else { // size left after fixed items / number of relative items 923 } else {
919 relative_width = (width - fixed_width) / relative_items; 924 stretch_factor = float(width - fixed_width)/relative_width;
920 rounding_error = width - fixed_width - relative_items * relative_width; 925 relative_width = 0;
926 }
921 } 927 }
922 928
923 // now move and resize the items 929 // now move and resize the items
@@ -952,12 +958,9 @@ void Toolbar::rearrangeItems() {
952 tmpy = offset; 958 tmpy = offset;
953 959
954 if ((*item_it)->type() == ToolbarItem::RELATIVE) { 960 if ((*item_it)->type() == ToolbarItem::RELATIVE) {
955 int extra = 0; 961 unsigned int itemw = (*item_it)->preferredWidth(), itemh = (*item_it)->height();
956 if (rounding_error != 0) { // distribute rounding error over all relatives 962 FbTk::translateSize(orient, itemw, itemh);
957 extra = 1; 963 tmpw = itemw ? std::floor(stretch_factor * itemw) : relative_width;
958 --rounding_error;
959 }
960 tmpw = extra + relative_width;
961 tmph = height - size_offset; 964 tmph = height - size_offset;
962 } else if ((*item_it)->type() == ToolbarItem::SQUARE) { 965 } else if ((*item_it)->type() == ToolbarItem::SQUARE) {
963 tmpw = tmph = height - size_offset; 966 tmpw = tmph = height - size_offset;