summaryrefslogtreecommitdiff
path: root/dw/stackingcontextmgr.cc
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2014-10-19 12:17:12 +0200
committerSebastian Geerken <devnull@localhost>2014-10-19 12:17:12 +0200
commit20ff9785c1736bf1659d359d07f5ec37ca28fb51 (patch)
treebc414b292ae0c470bb20e8a7a9dd8769c542b3d9 /dw/stackingcontextmgr.cc
parent356751ca1ee7df3819dfcfcece24cfbdb37fba7c (diff)
Corrected StackingContextMgr::draw: stores z-index in iterator.
Diffstat (limited to 'dw/stackingcontextmgr.cc')
-rw-r--r--dw/stackingcontextmgr.cc41
1 files changed, 24 insertions, 17 deletions
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);
}