aboutsummaryrefslogtreecommitdiff
path: root/dw/layout.cc
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2013-07-30 13:50:22 +0200
committerSebastian Geerken <devnull@localhost>2013-07-30 13:50:22 +0200
commit97b54265687beaddd0b588b18994c68fe770a7d5 (patch)
tree514d5726a984f738a932afedc77ebad707bd7c75 /dw/layout.cc
parentbc18e4cf0873bd191ea561e9825a156e1d28d131 (diff)
Two bug fixes: (i) queueResize within sizeRequest should work now; (ii) resizes floats lead to correct rewrapping. (Unfortunately very unstable now again.)
Diffstat (limited to 'dw/layout.cc')
-rw-r--r--dw/layout.cc27
1 files changed, 26 insertions, 1 deletions
diff --git a/dw/layout.cc b/dw/layout.cc
index 521f4f76..5285dfea 100644
--- a/dw/layout.cc
+++ b/dw/layout.cc
@@ -186,6 +186,8 @@ Layout::Layout (Platform *platform)
topLevel = NULL;
widgetAtPoint = NULL;
+ queueResizeList = new typed::Vector<Widget> (4, false);
+
DBG_OBJ_CREATE (this, "DwRenderLayout");
bgColor = NULL;
@@ -233,6 +235,7 @@ Layout::~Layout ()
topLevel = NULL;
delete w;
}
+ delete queueResizeList;
delete platform;
delete view;
delete anchorsTable;
@@ -248,6 +251,7 @@ void Layout::addWidget (Widget *widget)
topLevel = widget;
widget->layout = this;
+ queueResizeList->clear ();
widget->notifySetAsTopLevel();
findtextState.setWidget (widget);
@@ -263,6 +267,7 @@ void Layout::removeWidget ()
* \bug Some more attributes must be reset here.
*/
topLevel = NULL;
+ queueResizeList->clear ();
widgetAtPoint = NULL;
canvasWidth = canvasAscent = canvasDescent = 0;
scrollX = scrollY = 0;
@@ -654,10 +659,28 @@ void Layout::setBgColor (style::Color *color)
void Layout::resizeIdle ()
{
//static int calls = 0;
- //MSG(" Layout::resizeIdle calls = %d\n", ++calls);
+ //printf ("Layout::resizeIdle calls = %d\n", ++calls);
assert (resizeIdleId != -1);
+ for (typed::Iterator <Widget> it = queueResizeList->iterator();
+ it.hasNext (); ) {
+ Widget *widget = it.getNext ();
+
+ //printf (" the %stop-level %s %p was queued (extremes changed: %s)\n",
+ // widget->parent ? "non-" : "", widget->getClassName(), widget,
+ // widget->extremesQueued () ? "yes" : "no");
+
+ widget->setFlags (Widget::NEEDS_RESIZE);
+ widget->unsetFlags (Widget::RESIZE_QUEUED);
+
+ if (widget->extremesQueued ()) {
+ widget->setFlags (Widget::EXTREMES_CHANGED);
+ widget->unsetFlags (Widget::EXTREMES_QUEUED);
+ }
+ }
+ queueResizeList->clear ();
+
// Reset already here, since in this function, queueResize() may be
// called again.
resizeIdleId = -1;
@@ -706,6 +729,8 @@ void Layout::resizeIdle ()
}
updateAnchor ();
+
+ //printf ("Layout::resizeIdle end\n");
}
void Layout::setSizeHints ()