summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dw/oofawarewidget.cc10
-rw-r--r--dw/stackingcontextmgr.cc41
-rw-r--r--dw/stackingcontextmgr.hh8
3 files changed, 34 insertions, 25 deletions
diff --git a/dw/oofawarewidget.cc b/dw/oofawarewidget.cc
index e3a1f55e..eec012f6 100644
--- a/dw/oofawarewidget.cc
+++ b/dw/oofawarewidget.cc
@@ -313,8 +313,9 @@ Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, Stack *iterator,
case OOFStackIterator::SC_BOTTOM:
if (stackingContextMgr) {
OOFStackIterator *osi = (OOFStackIterator*)iterator->getTop ();
- retWidget = stackingContextMgr->drawBottom (view, area, iterator,
- &osi->index);
+ retWidget =
+ stackingContextMgr->drawBottom (view, area, iterator,
+ &osi->minorLevel, &osi->index);
}
break;
@@ -333,8 +334,9 @@ Widget *OOFAwareWidget::drawLevel (View *view, Rectangle *area, Stack *iterator,
case OOFStackIterator::SC_TOP:
if (stackingContextMgr) {
OOFStackIterator *osi = (OOFStackIterator*)iterator->getTop ();
- retWidget = stackingContextMgr->drawTop (view, area, iterator,
- &osi->index);
+ retWidget =
+ stackingContextMgr->drawTop (view, area, iterator,
+ &osi->minorLevel, &osi->index);
}
break;
diff --git a/dw/stackingcontextmgr.cc b/dw/stackingcontextmgr.cc
index c7b5f783..c104f5ee 100644
--- a/dw/stackingcontextmgr.cc
+++ b/dw/stackingcontextmgr.cc
@@ -63,42 +63,49 @@ void StackingContextMgr::addChildSCWidget (Widget *widget)
Widget *StackingContextMgr::drawBottom (View *view, Rectangle *area,
lout::container::untyped::Stack
*iterator,
- int *index)
+ int *zIndexOffset, int *index)
{
- DBG_OBJ_ENTER ("draw", 0, "drawBottom", "%d, %d, %d * %d",
- area->x, area->y, area->width, area->height);
- Widget *retWidget = draw (view, area, iterator, index, INT_MIN, -1);
+ 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, iterator, index, INT_MIN, -1, zIndexOffset);
DBG_OBJ_LEAVE ();
return retWidget;
}
Widget *StackingContextMgr::drawTop (View *view, Rectangle *area,
lout::container::untyped::Stack *iterator,
- int *index)
+ int *zIndexOffset, int *index)
{
- DBG_OBJ_ENTER ("draw", 0, "drawTop", "%d, %d, %d * %d",
- area->x, area->y, area->width, area->height);
- Widget *retWidget = draw (view, area, iterator, index, 0, INT_MAX);
+ 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, iterator, index, 0, INT_MAX, zIndexOffset);
DBG_OBJ_LEAVE ();
return retWidget;
}
Widget *StackingContextMgr::draw (View *view, Rectangle *area,
lout::container::untyped::Stack *iterator,
- int *index, int startZIndex, int endZIndex)
+ int *zIndexOffset, int startZIndex,
+ int endZIndex, int *index)
{
- DBG_OBJ_ENTER ("draw", 0, "draw", "[%d, %d, %d * %d], %d, %d",
- area->x, area->y, area->width, area->height, startZIndex,
- endZIndex);
+ DBG_OBJ_ENTER ("draw", 0, "draw", "(%d, %d, %d * %d), [%d], %d, %d, [%d]",
+ area->x, area->y, area->width, area->height,
+ *zIndexOffset, startZIndex, endZIndex, *index);
DBG_OBJ_MSGF ("draw", 1, "initially: index = %d (of %d)",
*index, childSCWidgets->size ());
Widget *retWidget = NULL;
- for (int zIndex = max (minZIndex, startZIndex);
- retWidget == NULL && zIndex <= min (maxZIndex, endZIndex);
- zIndex++) {
- DBG_OBJ_MSGF ("draw", 1, "drawing zIndex = %d", zIndex);
+ int startZIndexEff = max (minZIndex, startZIndex),
+ endZIndexEff = min (maxZIndex, endZIndex);
+ for (; retWidget == NULL && *zIndexOffset + startZIndexEff <= endZIndexEff;
+ (*zIndexOffset)++) {
+ DBG_OBJ_MSGF ("draw", 1, "drawing zIndex = %d + %d",
+ *zIndexOffset, startZIndexEff);
DBG_OBJ_MSG_START ();
// TODO This is wrong.
@@ -108,7 +115,7 @@ Widget *StackingContextMgr::draw (View *view, Rectangle *area,
DBG_OBJ_MSGF ("draw", 2, "widget %p has zIndex = %d",
child, child->getStyle()->zIndex);
Rectangle childArea;
- if (child->getStyle()->zIndex == zIndex &&
+ if (child->getStyle()->zIndex == *zIndexOffset + startZIndexEff &&
child->intersects (area, &childArea))
retWidget = child->drawTotal (view, &childArea, iterator);
}
diff --git a/dw/stackingcontextmgr.hh b/dw/stackingcontextmgr.hh
index e7254d7f..7f86c22c 100644
--- a/dw/stackingcontextmgr.hh
+++ b/dw/stackingcontextmgr.hh
@@ -25,9 +25,9 @@ private:
Widget *draw (View *view, Rectangle *area,
lout::container::untyped::Stack *iterator,
- int *index, int startZIndex, int endZIndex);
-
+ int *zIndexOffset, int startZIndex, int endZIndex, int *index);
Widget *getWidgetAtPoint (int x, int y, int startZIndex, int endZIndex);
+
public:
StackingContextMgr (Widget *widget);
~StackingContextMgr ();
@@ -49,10 +49,10 @@ public:
Widget *drawBottom (View *view, Rectangle *area,
lout::container::untyped::Stack *iterator,
- int *index);
+ int *zIndexOffset, int *index);
Widget *drawTop (View *view, Rectangle *area,
lout::container::untyped::Stack *iterator,
- int *index);
+ int *zIndexOffset, int *index);
Widget *getTopWidgetAtPoint (int x, int y);
Widget *getBottomWidgetAtPoint (int x, int y);