From d39956a7b0a38ebeda147d52aa734e992c425d9f Mon Sep 17 00:00:00 2001 From: Sebastian Geerken Date: Thu, 23 Oct 2014 12:29:38 +0200 Subject: More work on drawing: interruptions work now halfway. --- dw/oofpositionedmgr.cc | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'dw/oofpositionedmgr.cc') diff --git a/dw/oofpositionedmgr.cc b/dw/oofpositionedmgr.cc index 07bc45aa..c0c31417 100644 --- a/dw/oofpositionedmgr.cc +++ b/dw/oofpositionedmgr.cc @@ -169,7 +169,7 @@ bool OOFPositionedMgr::haveExtremesChanged () Widget *OOFPositionedMgr::draw (View *view, Rectangle *area, - lout::container::untyped::Stack *iterator, + StackingIteratorStack *iteratorStack, int *index) { DBG_OBJ_ENTER ("draw", 0, "draw", "(%d, %d, %d * %d), [%d]", @@ -177,12 +177,20 @@ Widget *OOFPositionedMgr::draw (View *view, Rectangle *area, Widget *retWidget = NULL; - for (; retWidget == NULL && *index < children->size(); (*index)++) { - Widget *childWidget = children->get(*index)->widget; - Rectangle childArea; - if (!StackingContextMgr::handledByStackingContextMgr (childWidget) && - childWidget->intersects (area, &childArea)) - retWidget = childWidget->drawTotal (view, &childArea, iterator); + while (retWidget == NULL && *index < children->size()) { + Child *child = children->get(*index); + + if (!OOFAwareWidget:: doesWidgetOOFInterruptDrawing + (child->widget, child->generator, container)) { + Rectangle childArea; + if (!StackingContextMgr::handledByStackingContextMgr (child->widget) && + child->widget->intersects (area, &childArea)) + retWidget = + child->widget->drawTotal (view, &childArea, iteratorStack); + } + + if (retWidget == NULL) + (*index)++; } DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); -- cgit v1.2.3