diff options
Diffstat (limited to 'dw')
-rw-r--r-- | dw/bullet.cc | 7 | ||||
-rw-r--r-- | dw/bullet.hh | 5 | ||||
-rw-r--r-- | dw/image.cc | 7 | ||||
-rw-r--r-- | dw/image.hh | 5 | ||||
-rw-r--r-- | dw/oofawarewidget.cc | 91 | ||||
-rw-r--r-- | dw/oofawarewidget.hh | 16 | ||||
-rw-r--r-- | dw/ooffloatsmgr.cc | 40 | ||||
-rw-r--r-- | dw/ooffloatsmgr.hh | 14 | ||||
-rw-r--r-- | dw/oofpositionedmgr.cc | 18 | ||||
-rw-r--r-- | dw/oofpositionedmgr.hh | 5 | ||||
-rw-r--r-- | dw/outofflowmgr.hh | 6 | ||||
-rw-r--r-- | dw/ruler.cc | 6 | ||||
-rw-r--r-- | dw/ruler.hh | 5 | ||||
-rw-r--r-- | dw/stackingcontextmgr.cc | 48 | ||||
-rw-r--r-- | dw/stackingcontextmgr.hh | 18 | ||||
-rw-r--r-- | dw/table.cc | 23 | ||||
-rw-r--r-- | dw/table.hh | 6 | ||||
-rw-r--r-- | dw/textblock.cc | 61 | ||||
-rw-r--r-- | dw/textblock.hh | 16 | ||||
-rw-r--r-- | dw/ui.cc | 6 | ||||
-rw-r--r-- | dw/ui.hh | 4 | ||||
-rw-r--r-- | dw/widget.cc | 29 | ||||
-rw-r--r-- | dw/widget.hh | 10 |
23 files changed, 216 insertions, 230 deletions
diff --git a/dw/bullet.cc b/dw/bullet.cc index 579de2c7..0b4b5983 100644 --- a/dw/bullet.cc +++ b/dw/bullet.cc @@ -57,8 +57,9 @@ void Bullet::containerSizeChangedForChildren () DBG_OBJ_LEAVE (); } -core::Widget *Bullet::draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack) +void Bullet::draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { int x, y, l; bool filled = true; @@ -81,8 +82,6 @@ core::Widget *Bullet::draw (core::View *view, core::Rectangle *area, view->drawArc (getStyle()->color, core::style::Color::SHADING_NORMAL, filled, x + l/2, y + l/2, l, l, 0, 360); } - - return NULL; } core::Iterator *Bullet::iterator (core::Content::Type mask, bool atEnd) diff --git a/dw/bullet.hh b/dw/bullet.hh index aa83ba3a..7703a64b 100644 --- a/dw/bullet.hh +++ b/dw/bullet.hh @@ -17,8 +17,9 @@ protected: void sizeRequestImpl (core::Requisition *requisition); void getExtremesImpl (core::Extremes *extremes); void containerSizeChangedForChildren (); - Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); core::Iterator *iterator (core::Content::Type mask, bool atEnd); public: diff --git a/dw/image.cc b/dw/image.cc index 881eb687..11d2e97f 100644 --- a/dw/image.cc +++ b/dw/image.cc @@ -404,8 +404,9 @@ bool Image::buttonReleaseImpl (core::EventButton *event) return false; } -core::Widget *Image::draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack) +void Image::draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { int dx, dy; core::Rectangle content, intersection; @@ -469,8 +470,6 @@ core::Widget *Image::draw (core::View *view, core::Rectangle *area, } /** TODO: draw selection */ - - return NULL; } core::Iterator *Image::iterator (core::Content::Type mask, bool atEnd) diff --git a/dw/image.hh b/dw/image.hh index 6032a83b..85776db5 100644 --- a/dw/image.hh +++ b/dw/image.hh @@ -135,8 +135,9 @@ protected: void sizeAllocateImpl (core::Allocation *allocation); void containerSizeChangedForChildren (); - Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); bool buttonPressImpl (core::EventButton *event); bool buttonReleaseImpl (core::EventButton *event); diff --git a/dw/oofawarewidget.cc b/dw/oofawarewidget.cc index ed8fe693..3f9c37c8 100644 --- a/dw/oofawarewidget.cc +++ b/dw/oofawarewidget.cc @@ -349,45 +349,47 @@ bool OOFAwareWidget::doesWidgetOOFInterruptDrawing (Widget *widget) return cl < gl; } -Widget *OOFAwareWidget::draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack) +void OOFAwareWidget::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { DBG_OBJ_ENTER ("draw", 0, "draw", "%d, %d, %d * %d", area->x, area->y, area->width, area->height); - Widget *retWidget = NULL; - - while (retWidget == NULL && + while (*interruptedWidget == NULL && ((OOFStackingIterator*)iteratorStack->getTop())->majorLevel < OOFStackingIterator::END) { - retWidget = drawLevel (view, area, iteratorStack, - ((OOFStackingIterator*)iteratorStack->getTop()) - ->majorLevel); + drawLevel (view, area, iteratorStack, interruptedWidget, + ((OOFStackingIterator*)iteratorStack->getTop())->majorLevel); - if (retWidget) { - if (retWidget->getParent () == this) { + if (*interruptedWidget) { + if ((*interruptedWidget)->getParent () == this) { DBG_OBJ_MSGF ("draw", 1, "interrupted at %p, drawing seperately", - retWidget); + *interruptedWidget); DBG_IF_RTFL { StringBuffer sb; iteratorStack->intoStringBuffer (&sb); DBG_OBJ_MSGF ("draw", 2, "iteratorStack: %s", sb.getChars ()); } - core::Rectangle retWidgetArea; - if (retWidget->intersects (area, &retWidgetArea)) { - // Similar to Widget::drawToplevel. Nested - // interruptions are not allowed. + core::Rectangle interruptedWidgetArea; + if ((*interruptedWidget)->intersects (area, + &interruptedWidgetArea)) { + // Similar to Widget::drawToplevel. Nested interruptions are not + // allowed. StackingIteratorStack iteratorStack2; - Widget *retWidget2 = - retWidget->drawTotal (view, &retWidgetArea, &iteratorStack2); - assert (retWidget2 == NULL); + Widget *interruptedWidget2 = NULL; + (*interruptedWidget)->drawTotal (view, &interruptedWidgetArea, + &iteratorStack2, + &interruptedWidget2); + assert (interruptedWidget2 == NULL); } ((OOFStackingIterator*)iteratorStack->getTop()) - ->registerWidgetDrawnAfterInterruption (retWidget); + ->registerWidgetDrawnAfterInterruption (*interruptedWidget); - retWidget = NULL; // Continue with the current state of "iterator". + // Continue with the current state of "iterator". + *interruptedWidget = NULL; DBG_OBJ_MSG ("draw", 1, "done with interruption"); } } else { @@ -399,22 +401,19 @@ Widget *OOFAwareWidget::draw (View *view, Rectangle *area, } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } -Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, - int majorLevel) +void OOFAwareWidget::drawLevel (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel) { DBG_OBJ_ENTER ("draw", 0, "OOFAwareWidget/drawLevel", "(%d, %d, %d * %d), %s", area->x, area->y, area->width, area->height, OOFStackingIterator::majorLevelText (majorLevel)); - Widget *retWidget = NULL; - switch (majorLevel) { case OOFStackingIterator::START: break; @@ -427,9 +426,9 @@ Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, if (stackingContextMgr) { OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); - retWidget = - stackingContextMgr->drawBottom (view, area, iteratorStack, - &osi->minorLevel, &osi->index); + stackingContextMgr->drawBottom (view, area, iteratorStack, + interruptedWidget, &osi->minorLevel, + &osi->index); } break; @@ -442,16 +441,16 @@ Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, break; case OOFStackingIterator::OOF_CONT: - retWidget = drawOOF (view, area, iteratorStack); + drawOOF (view, area, iteratorStack, interruptedWidget); break; case OOFStackingIterator::SC_TOP: if (stackingContextMgr) { OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); - retWidget = - stackingContextMgr->drawTop (view, area, iteratorStack, - &osi->minorLevel, &osi->index); + stackingContextMgr->drawTop (view, area, iteratorStack, + interruptedWidget, &osi->minorLevel, + &osi->index); } break; @@ -459,32 +458,27 @@ Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, break; } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } -Widget *OOFAwareWidget::drawOOF (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack) +void OOFAwareWidget::drawOOF (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); assert (osi->majorLevel == OOFStackingIterator::OOF_CONT); - Widget *retWidget = NULL; - - while (retWidget == NULL && osi->minorLevel < NUM_OOFM) { + while (*interruptedWidget == NULL && osi->minorLevel < NUM_OOFM) { if(outOfFlowMgr[osi->minorLevel]) - retWidget = - outOfFlowMgr[osi->minorLevel]->draw (view, area, iteratorStack, - &(osi->index)); - if (retWidget == NULL) { + outOfFlowMgr[osi->minorLevel]->draw (view, area, iteratorStack, + interruptedWidget, &(osi->index)); + if (*interruptedWidget == NULL) { osi->minorLevel++; osi->index = 0; } } - - return retWidget; -} +} Widget *OOFAwareWidget::getWidgetOOFAtPoint (int x, int y) { @@ -499,7 +493,6 @@ Widget *OOFAwareWidget::getWidgetOOFAtPoint (int x, int y) return NULL; } - int OOFAwareWidget::getAvailWidthOfChild (Widget *child, bool forceValue) { if (isWidgetOOF(child)) { diff --git a/dw/oofawarewidget.hh b/dw/oofawarewidget.hh index 20a482f3..f9d88c2b 100644 --- a/dw/oofawarewidget.hh +++ b/dw/oofawarewidget.hh @@ -171,11 +171,12 @@ protected: void sizeAllocateEnd (); void containerSizeChangedForChildrenOOF (); - virtual Widget *drawLevel (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int majorLevel); - Widget *drawOOF (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + virtual void drawLevel (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel); + void drawOOF (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); Widget *getWidgetOOFAtPoint (int x, int y); static bool isOOFContainer (Widget *widget, int oofmIndex); @@ -220,8 +221,9 @@ public: bool doesWidgetOOFInterruptDrawing (Widget *widget); - Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); lout::object::Object *stackingIterator (bool atEnd); virtual void borderChanged (int y, core::Widget *vloat); diff --git a/dw/ooffloatsmgr.cc b/dw/ooffloatsmgr.cc index 3bddbb34..bc426846 100644 --- a/dw/ooffloatsmgr.cc +++ b/dw/ooffloatsmgr.cc @@ -1277,31 +1277,30 @@ int OOFFloatsMgr::calcFloatX (Float *vloat, Side side, int gbX, int gbWidth, return x; } -Widget *OOFFloatsMgr::draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, int *index) +void OOFFloatsMgr::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *index) { DBG_OBJ_ENTER ("draw", 0, "draw", "(%d, %d, %d * %d), [%d]", area->x, area->y, area->width, area->height, *index); - Widget *retWidget = NULL; - if (*index < leftFloatsCB->size ()) - retWidget = - drawFloats (leftFloatsCB, view, area, iteratorStack, index, 0); + drawFloats (leftFloatsCB, view, area, iteratorStack, interruptedWidget, + index, 0); - if (retWidget == NULL) - retWidget = drawFloats (rightFloatsCB, view, area, iteratorStack, index, - leftFloatsCB->size ()); + if (*interruptedWidget == NULL) + drawFloats (rightFloatsCB, view, area, iteratorStack, interruptedWidget, + index, leftFloatsCB->size ()); - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } -Widget *OOFFloatsMgr::drawFloats (SortedFloatsVector *list, View *view, - Rectangle *area, - StackingIteratorStack *iteratorStack, - int *index, int startIndex) +void OOFFloatsMgr::drawFloats (SortedFloatsVector *list, View *view, + Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *index, + int startIndex) { // This could be improved, since the list is sorted: search the // first float fitting into the area, and iterate until one is @@ -1309,9 +1308,8 @@ Widget *OOFFloatsMgr::drawFloats (SortedFloatsVector *list, View *view, OOFAwareWidget::OOFStackingIterator *osi = (OOFAwareWidget::OOFStackingIterator*)iteratorStack->getTop (); - Widget *retWidget = NULL; - while (retWidget == NULL && *index - startIndex < list->size()) { + while (*interruptedWidget == NULL && *index - startIndex < list->size()) { Float *vloat = list->get(*index - startIndex); Widget *childWidget = vloat->getWidget (); @@ -1319,14 +1317,12 @@ Widget *OOFFloatsMgr::drawFloats (SortedFloatsVector *list, View *view, if (!osi->hasWidgetBeenDrawnAfterInterruption (childWidget) && !StackingContextMgr::handledByStackingContextMgr (childWidget) && childWidget->intersects (area, &childArea)) - retWidget = - childWidget->drawTotal (view, &childArea, iteratorStack); + childWidget->drawTotal (view, &childArea, iteratorStack, + interruptedWidget); - if (retWidget == NULL) + if (*interruptedWidget == NULL) (*index)++; } - - return retWidget; } void OOFFloatsMgr::addWidgetInFlow (OOFAwareWidget *textblock, diff --git a/dw/ooffloatsmgr.hh b/dw/ooffloatsmgr.hh index f7f994d7..70c576b4 100644 --- a/dw/ooffloatsmgr.hh +++ b/dw/ooffloatsmgr.hh @@ -284,10 +284,11 @@ private: bool doFloatsExceedCB (Side side); bool haveExtremesChanged (Side side); - core::Widget *drawFloats (SortedFloatsVector *list, core::View *view, - core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int *index, int startIndex); + void drawFloats (SortedFloatsVector *list, core::View *view, + core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + core::Widget **interruptedWidget, int *index, + int startIndex); core::Widget *getFloatWidgetAtPoint (SortedFloatsVector *list, int x, int y); bool collidesV (Float *vloat, Float *other, SFVType type, int *yReal); @@ -342,8 +343,9 @@ public: core::Allocation *allocation); void sizeAllocateEnd (OOFAwareWidget *caller); void containerSizeChangedForChildren (); - core::Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, int *index); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + core::Widget **interruptedWidget, int *index); void markSizeChange (int ref); void markExtremesChange (int ref); diff --git a/dw/oofpositionedmgr.cc b/dw/oofpositionedmgr.cc index 8c322333..24a6622a 100644 --- a/dw/oofpositionedmgr.cc +++ b/dw/oofpositionedmgr.cc @@ -168,34 +168,32 @@ bool OOFPositionedMgr::haveExtremesChanged () } -Widget *OOFPositionedMgr::draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, - int *index) +void OOFPositionedMgr::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *index) { DBG_OBJ_ENTER ("draw", 0, "draw", "(%d, %d, %d * %d), [%d]", area->x, area->y, area->width, area->height, *index); OOFAwareWidget::OOFStackingIterator *osi = (OOFAwareWidget::OOFStackingIterator*)iteratorStack->getTop (); - Widget *retWidget = NULL; - while (retWidget == NULL && *index < children->size()) { + while (*interruptedWidget == NULL && *index < children->size()) { Child *child = children->get(*index); Rectangle childArea; if (!osi->hasWidgetBeenDrawnAfterInterruption (child->widget) && !StackingContextMgr::handledByStackingContextMgr (child->widget) && child->widget->intersects (area, &childArea)) - retWidget = - child->widget->drawTotal (view, &childArea, iteratorStack); + child->widget->drawTotal (view, &childArea, iteratorStack, + interruptedWidget); - if (retWidget == NULL) + if (*interruptedWidget == NULL) (*index)++; } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } void OOFPositionedMgr::addWidgetInFlow (OOFAwareWidget *widget, diff --git a/dw/oofpositionedmgr.hh b/dw/oofpositionedmgr.hh index 819c4558..bf701941 100644 --- a/dw/oofpositionedmgr.hh +++ b/dw/oofpositionedmgr.hh @@ -65,8 +65,9 @@ public: core::Allocation *allocation); void sizeAllocateEnd (OOFAwareWidget *caller); void containerSizeChangedForChildren (); - core::Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, int *index); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + core::Widget **interruptedWidget, int *index); void markSizeChange (int ref); void markExtremesChange (int ref); diff --git a/dw/outofflowmgr.hh b/dw/outofflowmgr.hh index 15a94081..b7db0fe3 100644 --- a/dw/outofflowmgr.hh +++ b/dw/outofflowmgr.hh @@ -25,9 +25,9 @@ public: core::Allocation *allocation) = 0; virtual void sizeAllocateEnd (OOFAwareWidget *caller) = 0; virtual void containerSizeChangedForChildren () = 0; - virtual core::Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int *index) = 0; + virtual void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + core::Widget **interruptedWidget, int *index) = 0; virtual void markSizeChange (int ref) = 0; virtual void markExtremesChange (int ref) = 0; diff --git a/dw/ruler.cc b/dw/ruler.cc index b8a7deb5..979cb03c 100644 --- a/dw/ruler.cc +++ b/dw/ruler.cc @@ -62,11 +62,11 @@ bool Ruler::usesAvailWidth () return true; } -core::Widget *Ruler::draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack) +void Ruler::draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { drawWidgetBox (view, area, false); - return NULL; } core::Iterator *Ruler::iterator (core::Content::Type mask, bool atEnd) diff --git a/dw/ruler.hh b/dw/ruler.hh index f0f98465..c94c2e55 100644 --- a/dw/ruler.hh +++ b/dw/ruler.hh @@ -20,8 +20,9 @@ protected: void getExtremesImpl (core::Extremes *extremes); void containerSizeChangedForChildren (); bool usesAvailWidth (); - Widget *draw (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + void draw (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); public: Ruler (); diff --git a/dw/stackingcontextmgr.cc b/dw/stackingcontextmgr.cc index 70b4dd75..08fb0e82 100644 --- a/dw/stackingcontextmgr.cc +++ b/dw/stackingcontextmgr.cc @@ -60,36 +60,36 @@ void StackingContextMgr::addChildSCWidget (Widget *widget) DBG_OBJ_ARRSET_PTR ("childSCWidgets", childSCWidgets->size() - 1, widget); } -Widget *StackingContextMgr::drawBottom (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, - int *zIndexOffset, int *index) +void StackingContextMgr::drawBottom (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, + int *zIndexOffset, int *index) { DBG_OBJ_ENTER ("draw", 0, "drawBottom", "(%d, %d, %d * %d), [%d], [%d]", area->x, area->y, area->width, area->height, *zIndexOffset, *index); - Widget *retWidget = - draw (view, area, iteratorStack, index, INT_MIN, -1, zIndexOffset); + draw (view, area, iteratorStack, interruptedWidget, index, INT_MIN, -1, + zIndexOffset); DBG_OBJ_LEAVE (); - return retWidget; } -Widget *StackingContextMgr::drawTop (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, - int *zIndexOffset, int *index) +void StackingContextMgr::drawTop (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, + int *zIndexOffset, int *index) { DBG_OBJ_ENTER ("draw", 0, "drawTop", "(%d, %d, %d * %d), [%d], [%d]", area->x, area->y, area->width, area->height, *zIndexOffset, *index); - Widget *retWidget = - draw (view, area, iteratorStack, index, 0, INT_MAX, zIndexOffset); + draw (view, area, iteratorStack, interruptedWidget, index, 0, INT_MAX, + zIndexOffset); DBG_OBJ_LEAVE (); - return retWidget; } -Widget *StackingContextMgr::draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, - int *zIndexOffset, int startZIndex, - int endZIndex, int *index) +void StackingContextMgr::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *zIndexOffset, + int startZIndex, int endZIndex, int *index) { DBG_OBJ_ENTER ("draw", 0, "draw", "(%d, %d, %d * %d), [%d], %d, %d, [%d]", area->x, area->y, area->width, area->height, @@ -98,28 +98,29 @@ Widget *StackingContextMgr::draw (View *view, Rectangle *area, DBG_OBJ_MSGF ("draw", 1, "initially: index = %d (of %d)", *index, childSCWidgets->size ()); - Widget *retWidget = NULL; int startZIndexEff = max (minZIndex, startZIndex), endZIndexEff = min (maxZIndex, endZIndex); - while (retWidget == NULL && *zIndexOffset + startZIndexEff <= endZIndexEff) { + while (*interruptedWidget == NULL && + *zIndexOffset + startZIndexEff <= endZIndexEff) { DBG_OBJ_MSGF ("draw", 1, "drawing zIndex = %d + %d", *zIndexOffset, startZIndexEff); DBG_OBJ_MSG_START (); - while (retWidget == NULL && *index < childSCWidgets->size ()) { + while (*interruptedWidget == NULL && *index < childSCWidgets->size ()) { Widget *child = childSCWidgets->get (*index); DBG_OBJ_MSGF ("draw", 2, "widget %p has zIndex = %d", child, child->getStyle()->zIndex); Rectangle childArea; if (child->getStyle()->zIndex == *zIndexOffset + startZIndexEff && child->intersects (area, &childArea)) - retWidget = child->drawTotal (view, &childArea, iteratorStack); + child->drawTotal (view, &childArea, iteratorStack, + interruptedWidget); - if (retWidget == NULL) + if (*interruptedWidget == NULL) (*index)++; } - if (retWidget == NULL) + if (*interruptedWidget == NULL) (*zIndexOffset)++; DBG_OBJ_MSG_END (); @@ -127,9 +128,8 @@ Widget *StackingContextMgr::draw (View *view, Rectangle *area, DBG_OBJ_MSGF ("draw", 1, "finally: index = %d (of %d)", *index, childSCWidgets->size ()); - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } Widget *StackingContextMgr::getTopWidgetAtPoint (int x, int y) diff --git a/dw/stackingcontextmgr.hh b/dw/stackingcontextmgr.hh index 10a929cf..28cdd2f9 100644 --- a/dw/stackingcontextmgr.hh +++ b/dw/stackingcontextmgr.hh @@ -23,9 +23,9 @@ private: lout::container::typed::Vector<Widget> *childSCWidgets; int minZIndex, maxZIndex; - Widget *draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, int *zIndexOffset, - int startZIndex, int endZIndex, int *index); + void draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, Widget **interruptedWidget, + int *zIndexOffset, int startZIndex, int endZIndex, int *index); Widget *getWidgetAtPoint (int x, int y, int startZIndex, int endZIndex); public: @@ -47,12 +47,12 @@ public: void addChildSCWidget (Widget *widget); - Widget *drawBottom (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, int *zIndexOffset, - int *index); - Widget *drawTop (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack, int *zIndexOffset, - int *index); + void drawBottom (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *zIndexOffset, int *index); + void drawTop (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int *zIndexOffset, int *index); Widget *getTopWidgetAtPoint (int x, int y); Widget *getBottomWidgetAtPoint (int x, int y); diff --git a/dw/table.cc b/dw/table.cc index 656084a4..c65f2d75 100644 --- a/dw/table.cc +++ b/dw/table.cc @@ -356,16 +356,14 @@ bool Table::isBlockLevel () return true; } -core::Widget *Table::drawLevel (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int majorLevel) +void Table::drawLevel (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel) { DBG_OBJ_ENTER ("draw", 0, "Table/drawLevel", "(%d, %d, %d * %d), %s", area->x, area->y, area->width, area->height, OOFStackingIterator::majorLevelText (majorLevel)); - Widget *retWidget = NULL; - #if 0 // This old code belongs perhaps to the background. Check when reactivated. int offx = getStyle()->boxOffsetX () + getStyle()->hBorderSpacing; @@ -390,32 +388,31 @@ core::Widget *Table::drawLevel (core::View *view, core::Rectangle *area, OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); - while (retWidget == NULL && osi->index < children->size ()) { + while (*interruptedWidget == NULL && osi->index < children->size ()) { if (childDefined (osi->index)) { Widget *child = children->get(osi->index)->cell.widget; core::Rectangle childArea; if (!core::StackingContextMgr::handledByStackingContextMgr (child) && child->intersects (area, &childArea)) - retWidget = - child->drawTotal (view, &childArea, iteratorStack); + child->drawTotal (view, &childArea, iteratorStack, + interruptedWidget); } - if (retWidget == NULL) + if (*interruptedWidget == NULL) osi->index++; } } break; default: - retWidget = - OOFAwareWidget::drawLevel (view, area, iteratorStack, majorLevel); + OOFAwareWidget::drawLevel (view, area, iteratorStack, interruptedWidget, + majorLevel); break; } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } void Table::removeChild (Widget *child) diff --git a/dw/table.hh b/dw/table.hh index c6f23259..db546f2a 100644 --- a/dw/table.hh +++ b/dw/table.hh @@ -471,9 +471,9 @@ protected: bool isBlockLevel (); - Widget *drawLevel (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int majorLevel); + void drawLevel (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel); //bool buttonPressImpl (core::EventButton *event); //bool buttonReleaseImpl (core::EventButton *event); diff --git a/dw/textblock.cc b/dw/textblock.cc index 615406ea..9812572f 100644 --- a/dw/textblock.cc +++ b/dw/textblock.cc @@ -1447,17 +1447,15 @@ void Textblock::drawSpace(int wordIndex, core::View *view, * - area is used always (ev. set it to event->area) * - event is only used when is_expose */ -core::Widget *Textblock::drawLine (Line *line, core::View *view, - core::Rectangle *area, - core::StackingIteratorStack *iteratorStack) +void Textblock::drawLine (Line *line, core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { DBG_OBJ_ENTER ("draw", 0, "drawLine", "..., %d, %d, %d * %d", area->x, area->y, area->width, area->height); OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); - Widget *retWidget = NULL; - int xWidget = line->textOffset; int yWidgetBase = lineYOffsetWidget (line) + line->borderAscent; @@ -1470,7 +1468,7 @@ core::Widget *Textblock::drawLine (Line *line, core::View *view, if (osi->index < line->firstWord) osi->index = line->firstWord; - while (retWidget == NULL && osi->index <= line->lastWord + while (*interruptedWidget == NULL && osi->index <= line->lastWord && xWidget < area->x + area->width) { Word *word = words->getRef (osi->index); int wordSize = word->size.width; @@ -1486,8 +1484,8 @@ core::Widget *Textblock::drawLine (Line *line, core::View *view, if (!core::StackingContextMgr::handledByStackingContextMgr (child) && child->intersects (area, &childArea)) - retWidget = - child->drawTotal (view, &childArea, iteratorStack); + child->drawTotal (view, &childArea, iteratorStack, + interruptedWidget); } else { int wordIndex2 = osi->index; while (wordIndex2 < line->lastWord && @@ -1523,13 +1521,12 @@ core::Widget *Textblock::drawLine (Line *line, core::View *view, } xWidget += wordSize + word->effSpace; - if (retWidget == NULL) + if (*interruptedWidget == NULL) osi->index++; } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } /** @@ -1697,49 +1694,46 @@ Textblock::Word *Textblock::findWord (int x, int y, bool *inSpace) return NULL; } -core::Widget *Textblock::drawLevel (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int majorLevel) +void Textblock::drawLevel (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel) { DBG_OBJ_ENTER ("draw", 0, "Textblock/drawLevel", "(%d, %d, %d * %d), %s", area->x, area->y, area->width, area->height, OOFStackingIterator::majorLevelText (majorLevel)); - Widget *retWidget = NULL; - switch (majorLevel) { case OOFStackingIterator::IN_FLOW: // Osi->index (word index) is regarded in drawLine. for (int lineIndex = findLineIndexWhenAllocated (area->y); - retWidget == NULL && lineIndex < lines->size (); lineIndex++) { + *interruptedWidget == NULL && lineIndex < lines->size (); + lineIndex++) { Line *line = lines->getRef (lineIndex); if (lineYOffsetWidget (line) >= area->y + area->height) break; DBG_OBJ_MSGF ("draw", 0, "line %d (of %d)", lineIndex, lines->size ()); - retWidget = drawLine (line, view, area, iteratorStack); + drawLine (line, view, area, iteratorStack, interruptedWidget); } break; case OOFStackingIterator::OOF_REF: - retWidget = drawOOFReferences (view, area, iteratorStack); + drawOOFReferences (view, area, iteratorStack, interruptedWidget); break; default: - retWidget = - OOFAwareWidget::drawLevel (view, area, iteratorStack, majorLevel); + OOFAwareWidget::drawLevel (view, area, iteratorStack, interruptedWidget, + majorLevel); break; } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } -core::Widget *Textblock::drawOOFReferences (core::View *view, - core::Rectangle *area, - core::StackingIteratorStack - *iteratorStack) +void Textblock::drawOOFReferences (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { DBG_OBJ_ENTER ("draw", 0, "Textblock/drawOOFReferences", "%d, %d, %d * %d", area->x, area->y, area->width, area->height); @@ -1749,30 +1743,27 @@ core::Widget *Textblock::drawOOFReferences (core::View *view, OOFStackingIterator *osi = (OOFStackingIterator*)iteratorStack->getTop (); assert (osi->majorLevel == OOFStackingIterator::OOF_REF); - Widget *retWidget = NULL; - - while (retWidget == NULL && osi->minorLevel < NUM_OOFM) { - while (retWidget == NULL && osi->index < words->size ()) { + while (*interruptedWidget == NULL && osi->minorLevel < NUM_OOFM) { + while (*interruptedWidget == NULL && osi->index < words->size ()) { Word *word = words->getRef (osi->index); if (word->content.type == core::Content::WIDGET_OOF_REF && getOOFMIndex (word->content.widget) == osi->minorLevel && doesWidgetOOFInterruptDrawing (word->content.widget)) - retWidget = word->content.widget; + *interruptedWidget = word->content.widget; // The index is increased in any case: the iterator must // point to the next element. osi->index++; } - if (retWidget == NULL) { + if (*interruptedWidget == NULL) { osi->minorLevel++; osi->index = 0; } } - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_OBJ_LEAVE (); - return retWidget; } /** diff --git a/dw/textblock.hh b/dw/textblock.hh index 4a5681e6..c96b2bc6 100644 --- a/dw/textblock.hh +++ b/dw/textblock.hh @@ -642,10 +642,12 @@ protected: core::Rectangle *area, int xWidget, int yWidgetBase); void drawSpace (int wordIndex, core::View *view, core::Rectangle *area, int xWidget, int yWidgetBase); - Widget *drawLine (Line *line, core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); - Widget *drawOOFReferences (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack); + void drawLine (Line *line, core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); + void drawOOFReferences (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); int findLineIndex (int y); int findLineIndexWhenNotAllocated (int y); @@ -801,9 +803,9 @@ protected: void alignLine (int lineIndex); void calcTextOffset (int lineIndex, int totalWidth); - Widget *drawLevel (core::View *view, core::Rectangle *area, - core::StackingIteratorStack *iteratorStack, - int majorLevel); + void drawLevel (core::View *view, core::Rectangle *area, + core::StackingIteratorStack *iteratorStack, + Widget **interruptedWidget, int majorLevel); void sizeRequestImpl (core::Requisition *requisition); void getExtremesImpl (core::Extremes *extremes); @@ -128,12 +128,12 @@ void Embed::setEnabled (bool enabled) resource->setEnabled (enabled); } -Widget *Embed::draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack) +void Embed::draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { drawWidgetBox (view, area, false); resource->draw (view, area); - return NULL; } Iterator *Embed::iterator (Content::Type mask, bool atEnd) @@ -253,8 +253,8 @@ public: void setDisplayed (bool displayed); void setEnabled (bool enabled); - Widget *draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack); + void draw (View *view, Rectangle *area, StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); Iterator *iterator (Content::Type mask, bool atEnd); void setStyle (style::Style *style); diff --git a/dw/widget.cc b/dw/widget.cc index 607b157d..3c58d0a1 100644 --- a/dw/widget.cc +++ b/dw/widget.cc @@ -179,8 +179,9 @@ bool Widget::intersects (Rectangle *area, Rectangle *intersection) return r; } -Widget *Widget::drawTotal (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack) +void Widget::drawTotal (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) { DBG_OBJ_ENTER ("draw", 0, "drawTotal", "%d, %d, %d * %d", area->x, area->y, area->width, area->height); @@ -208,8 +209,8 @@ Widget *Widget::drawTotal (View *view, Rectangle *area, sb.getChars ()); } - Widget *retWidget = draw (view, area, iteratorStack); - DBG_OBJ_MSGF ("draw", 1, "=> %p", retWidget); + draw (view, area, iteratorStack, interruptedWidget); + DBG_OBJ_MSGF ("draw", 1, "=> %p", *interruptedWidget); DBG_IF_RTFL { misc::StringBuffer sb; @@ -218,15 +219,15 @@ Widget *Widget::drawTotal (View *view, Rectangle *area, sb.getChars ()); } - // A return value other than NULL indicates a widget with a complex - // drawing process, for which stackIterator() must return something - // non-NULL, so that the interrupted drawing process can be - // continued. (TODO: Not quite correct when forward() was called - // instead of push().) + // A value for *interruptedWidget other than NULL indicates a + // widget with a complex drawing process, for which stackIterator() + // must return something non-NULL, so that the interrupted drawing + // process can be continued. (TODO: Not quite correct when + // forward() was called instead of push().) - // assert (retWidget == NULL || si != NULL); + // assert (*interruptedWidget == NULL || si != NULL); - if (retWidget == NULL) { + if (*interruptedWidget == NULL) { if (si) iteratorStack->pop (); } else @@ -239,7 +240,6 @@ Widget *Widget::drawTotal (View *view, Rectangle *area, } DBG_OBJ_LEAVE (); - return retWidget; } void Widget::drawToplevel (View *view, Rectangle *area) @@ -247,10 +247,11 @@ void Widget::drawToplevel (View *view, Rectangle *area) assert (parent == NULL); StackingIteratorStack iteratorStack; - Widget *retWidget = drawTotal (view, area, &iteratorStack); + Widget *interruptedWidget = NULL; + drawTotal (view, area, &iteratorStack, &interruptedWidget); // Everything should be finished at this point. - assert (retWidget == NULL); + assert (interruptedWidget == NULL); } void Widget::setParent (Widget *parent) diff --git a/dw/widget.hh b/dw/widget.hh index 8cd05e13..c284e172 100644 --- a/dw/widget.hh +++ b/dw/widget.hh @@ -469,10 +469,12 @@ public: bool intersects (Rectangle *area, Rectangle *intersection); /** Area is given in widget coordinates. */ - virtual Widget *draw (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack) = 0; - Widget *drawTotal (View *view, Rectangle *area, - StackingIteratorStack *iteratorStack); + virtual void draw (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget) = 0; + void drawTotal (View *view, Rectangle *area, + StackingIteratorStack *iteratorStack, + Widget **interruptedWidget); void drawToplevel (View *view, Rectangle *area); bool buttonPress (EventButton *event); |