summaryrefslogtreecommitdiff
path: root/src/FbTk
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk')
-rw-r--r--src/FbTk/Container.cc14
-rw-r--r--src/FbTk/Container.hh2
2 files changed, 12 insertions, 4 deletions
diff --git a/src/FbTk/Container.cc b/src/FbTk/Container.cc
index 381f13f..3374266 100644
--- a/src/FbTk/Container.cc
+++ b/src/FbTk/Container.cc
@@ -319,7 +319,7 @@ void Container::repositionItems() {
319 // if we have a max total size, then we must also resize ourself 319 // if we have a max total size, then we must also resize ourself
320 // within that bound 320 // within that bound
321 Alignment align = alignment(); 321 Alignment align = alignment();
322 if (m_max_total_size && (align == RIGHT || align == LEFT)) { 322 if (m_max_total_size && align != RELATIVE) {
323 total_width = (max_width_per_client + borderW) * num_items - borderW; 323 total_width = (max_width_per_client + borderW) * num_items - borderW;
324 if (total_width > m_max_total_size) { 324 if (total_width > m_max_total_size) {
325 total_width = m_max_total_size; 325 total_width = m_max_total_size;
@@ -332,14 +332,21 @@ void Container::repositionItems() {
332 // calling Container::resize here risks infinite loops 332 // calling Container::resize here risks infinite loops
333 unsigned int neww = total_width, newh = height; 333 unsigned int neww = total_width, newh = height;
334 translateSize(m_orientation, neww, newh); 334 translateSize(m_orientation, neww, newh);
335 if ((align == RIGHT && m_orientation != ROT270) || 335 if (!(align == LEFT && (m_orientation == ROT0 ||
336 (align == LEFT && m_orientation == ROT270)) { 336 m_orientation == ROT90)) &&
337 !(align == RIGHT && (m_orientation == ROT180 ||
338 m_orientation == ROT270))) {
337 int deltax = 0; 339 int deltax = 0;
338 int deltay = 0; 340 int deltay = 0;
339 if (m_orientation == ROT0 || m_orientation == ROT180) 341 if (m_orientation == ROT0 || m_orientation == ROT180)
340 deltax = - (total_width - cur_width); 342 deltax = - (total_width - cur_width);
341 else 343 else
342 deltay = - (total_width - cur_width); 344 deltay = - (total_width - cur_width);
345 // TODO: rounding errors could accumulate in this process
346 if (align == CENTER) {
347 deltax = deltax/2;
348 deltay = deltay/2;
349 }
343 350
344 FbWindow::moveResize(x() + deltax, y() + deltay, neww, newh); 351 FbWindow::moveResize(x() + deltax, y() + deltay, neww, newh);
345 } else { 352 } else {
@@ -405,6 +412,7 @@ void Container::repositionItems() {
405unsigned int Container::maxWidthPerClient() const { 412unsigned int Container::maxWidthPerClient() const {
406 switch (alignment()) { 413 switch (alignment()) {
407 case RIGHT: 414 case RIGHT:
415 case CENTER:
408 case LEFT: 416 case LEFT:
409 return m_max_size_per_client; 417 return m_max_size_per_client;
410 break; 418 break;
diff --git a/src/FbTk/Container.hh b/src/FbTk/Container.hh
index 2a97f7f..00f2c88 100644
--- a/src/FbTk/Container.hh
+++ b/src/FbTk/Container.hh
@@ -38,7 +38,7 @@ class Container: public FbWindow, public EventHandler, private NotCopyable {
38public: 38public:
39 // LEFT, RIGHT => fixed total width, fixed icon size 39 // LEFT, RIGHT => fixed total width, fixed icon size
40 // RELATIVE => fixed total width, relative/variable icon size 40 // RELATIVE => fixed total width, relative/variable icon size
41 enum Alignment { LEFT, RELATIVE, RIGHT }; 41 enum Alignment { LEFT, CENTER, RIGHT, RELATIVE };
42 typedef Button * Item; 42 typedef Button * Item;
43 typedef const Button * ConstItem; 43 typedef const Button * ConstItem;
44 typedef std::list<Item> ItemList; 44 typedef std::list<Item> ItemList;