From 70b9f2b70d9f0c0f48d2ae649023ea3ae5271367 Mon Sep 17 00:00:00 2001 From: Sebastian Geerken Date: Sat, 2 Apr 2016 22:48:21 +0200 Subject: Content with type WIDGET_OOF_REF now refers to new class WidgetReference. --- dw/textblock.cc | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'dw/textblock.cc') diff --git a/dw/textblock.cc b/dw/textblock.cc index 514d3e93..fb7c141c 100644 --- a/dw/textblock.cc +++ b/dw/textblock.cc @@ -1748,7 +1748,8 @@ void Textblock::drawLevel (core::View *view, core::Rectangle *area, for (int wordIndex = 0; wordIndex < words->size (); wordIndex++) { Word *word = words->getRef (wordIndex); if (word->content.type == core::Content::WIDGET_OOF_REF && - getOOFMIndex (word->content.widget) == oofmIndex && + getOOFMIndex (word->content.widgetReference->widget) + == oofmIndex && doesWidgetOOFInterruptDrawing (word->content.widget)) word->content.widget->drawInterruption (view, area, context); } @@ -1805,7 +1806,9 @@ void Textblock::cleanupWord (int wordNo) if (word->content.type == core::Content::WIDGET_IN_FLOW) delete word->content.widget; - /** \todo Widget references? What about texts? */ + if (word->content.type == core::Content::WIDGET_OOF_REF) + delete word->content.widgetReference; + /** \todo What about texts? */ removeWordImgRenderer (wordNo); removeSpaceImgRenderer (wordNo); @@ -2421,7 +2424,7 @@ void Textblock::addWidget (core::Widget *widget, core::style::Style *style) oofm->calcWidgetRefSize (widget, &size); Word *word = addWord (size.width, size.ascent, size.descent, 0, style); word->content.type = core::Content::WIDGET_OOF_REF; - word->content.widget = widget; + word->content.widgetReference = new core::WidgetReference (widget); // After a out-of-flow reference, breaking is allowed. (This avoids some // problems with breaking near float definitions.) @@ -2835,11 +2838,13 @@ core::Widget *Textblock::getWidgetAtPointLevel (int x, int y, int level, widgetAtPoint == NULL && wordIndex >= 0; wordIndex--) { Word *word = words->getRef (wordIndex); if (word->content.type == core::Content::WIDGET_OOF_REF && - getOOFMIndex (word->content.widget) == oofmIndex && - doesWidgetOOFInterruptDrawing (word->content.widget)) + getOOFMIndex (word->content.widgetReference->widget) + == oofmIndex && + doesWidgetOOFInterruptDrawing (word->content.widgetReference + ->widget)) widgetAtPoint = - word->content.widget->getWidgetAtPointInterrupted (x, y, - context); + word->content.widgetReference->widget + ->getWidgetAtPointInterrupted (x, y, context); } } break; @@ -3022,7 +3027,7 @@ void Textblock::borderChanged (int oofmIndex, int y, Widget *widgetOOF) !found && wordIndex < words->size(); wordIndex++) { Word *word = words->getRef (wordIndex); if (word->content.type == core::Content::WIDGET_OOF_REF && - word->content.widget == widgetOOF) + word->content.widgetReference->widget == widgetOOF) found = true; } @@ -3088,7 +3093,7 @@ void Textblock::borderChanged (int oofmIndex, int y, Widget *widgetOOF) !found && wordIndex <= line->lastWord; wordIndex++) { Word *word = words->getRef (wordIndex); if (word->content.type == core::Content::WIDGET_OOF_REF && - word->content.widget == widgetOOF) { + word->content.widgetReference->widget == widgetOOF) { found = true; // Correct only by smaller values (case (1) above): realWrapLineIndex = -- cgit v1.2.3