diff options
author | Sebastian Geerken <devnull@localhost> | 2014-10-25 12:13:51 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2014-10-25 12:13:51 +0200 |
commit | dcf6e00e9b790e0868d8863f140567eef5e540c1 (patch) | |
tree | 01b4fcdb5b0ddcdd98e90264869974aaa74da7ff /dw/table.cc | |
parent | 607814bdead6d72fb6825a5502e625a216114a1c (diff) |
Applied interruption (as used for drawing) also to Widget::getWidgetAtPoint. (Still bugs\!)
Diffstat (limited to 'dw/table.cc')
-rw-r--r-- | dw/table.cc | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/dw/table.cc b/dw/table.cc index c65f2d75..c14ebf97 100644 --- a/dw/table.cc +++ b/dw/table.cc @@ -415,6 +415,64 @@ void Table::drawLevel (core::View *view, core::Rectangle *area, DBG_OBJ_LEAVE (); } +core::Widget *Table::getWidgetAtPointLevel (int x, int y, + core::StackingIteratorStack + *iteratorStack, + Widget **interruptedWidget, + int majorLevel) +{ + DBG_OBJ_ENTER ("events", 0, "Table/getWidgetAtPointLevel", "%d, %d, %s", + x, y, OOFStackingIterator::majorLevelText (majorLevel)); + + Widget *widgetAtPoint = NULL; + + switch (majorLevel) { + case OOFStackingIterator::IN_FLOW: + { + OOFStackingIterator *osi = + (OOFStackingIterator*)iteratorStack->getTop (); + + while (widgetAtPoint == NULL && *interruptedWidget == NULL && + osi->index >= 0) { + if (childDefined (osi->index)) { + Widget *child = children->get(osi->index)->cell.widget; + if (!core::StackingContextMgr::handledByStackingContextMgr + (child)) + widgetAtPoint = + child->getWidgetAtPointTotal (x, y, iteratorStack, + interruptedWidget); + } + + if (*interruptedWidget == NULL) + osi->index--; + } + } + break; + + default: + widgetAtPoint = + OOFAwareWidget::getWidgetAtPointLevel (x, y, iteratorStack, + interruptedWidget, majorLevel); + break; + } + + DBG_OBJ_MSGF ("events", 1, "=> %p (i: %p)", + widgetAtPoint, *interruptedWidget); + DBG_OBJ_LEAVE (); + return widgetAtPoint; +} + +int Table::getLastLevelIndex (int majorLevel, int minorLevel) +{ + switch (majorLevel) { + case OOFStackingIterator::IN_FLOW: + return children->size () - 1; + + default: + return OOFAwareWidget::getLastLevelIndex (majorLevel, minorLevel); + } +} + void Table::removeChild (Widget *child) { /** \bug Not implemented. */ |