aboutsummaryrefslogtreecommitdiff
path: root/dw/oofpositionedmgr.cc
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2014-09-22 16:10:19 +0200
committerSebastian Geerken <devnull@localhost>2014-09-22 16:10:19 +0200
commit156f3622e4197dddeba990637dcbe1100c5d51ac (patch)
tree515d895e93c85959df85cde0b1feb9b986a5a855 /dw/oofpositionedmgr.cc
parent473610dbc053c39ff9d94476b23ea6a51ff07e1f (diff)
Implemented OOFPositionedMgr::tellPosition (and what is needed else).
Diffstat (limited to 'dw/oofpositionedmgr.cc')
-rw-r--r--dw/oofpositionedmgr.cc37
1 files changed, 31 insertions, 6 deletions
diff --git a/dw/oofpositionedmgr.cc b/dw/oofpositionedmgr.cc
index 8edbed5b..949965b2 100644
--- a/dw/oofpositionedmgr.cc
+++ b/dw/oofpositionedmgr.cc
@@ -36,13 +36,16 @@ OOFPositionedMgr::OOFPositionedMgr (OOFAwareWidget *container)
DBG_OBJ_CREATE ("dw::OOFPositionedMgr");
this->container = (OOFAwareWidget*)container;
- children = new Vector<Child> (1, true);
+ children = new Vector<Child> (1, false);
+ childrenByWidget = new HashTable<TypedPointer<Widget>, Child> (true, true);
+
DBG_OBJ_SET_NUM ("children.size", children->size());
}
OOFPositionedMgr::~OOFPositionedMgr ()
{
delete children;
+ delete childrenByWidget;
DBG_OBJ_DELETE ();
}
@@ -193,7 +196,10 @@ int OOFPositionedMgr::addWidgetOOF (Widget *widget, OOFAwareWidget *generator,
DBG_OBJ_ENTER ("construct.oofm", 0, "addWidgetOOF", "%p, %p, %d",
widget, generator, externalIndex);
- children->put (new Child (widget, generator));
+ Child *child = new Child (widget, generator);
+ children->put (child);
+ childrenByWidget->put (new TypedPointer<Widget> (widget), child);
+
int subRef = children->size() - 1;
DBG_OBJ_SET_NUM ("children.size", children->size());
DBG_OBJ_ARRSET_PTR ("children", children->size() - 1, widget);
@@ -235,6 +241,20 @@ Widget *OOFPositionedMgr::getWidgetAtPoint (int x, int y, int level)
void OOFPositionedMgr::tellPosition (Widget *widget, int x, int y)
{
+ DBG_OBJ_ENTER ("resize.oofm", 0, "tellPosition", "%p, %d, %d",
+ widget, x, y);
+
+ TypedPointer<Widget> key (widget);
+ Child *child = childrenByWidget->get (&key);
+ assert (child);
+
+ child->x = x;
+ child->y = y;
+
+ DBG_OBJ_SET_NUM_O (child->widget, "<Positioned>.x", x);
+ DBG_OBJ_SET_NUM_O (child->widget, "<Positioned>.y", y);
+
+ DBG_OBJ_LEAVE ();
}
void OOFPositionedMgr::getSize (Requisition *containerReq, int *oofWidth,
@@ -327,6 +347,11 @@ bool OOFPositionedMgr::affectsRightBorder (Widget *widget)
return false;
}
+bool OOFPositionedMgr::mayAffectBordersAtAll ()
+{
+ return false;
+}
+
bool OOFPositionedMgr::dealingWithSizeOfChild (Widget *child)
{
return true;
@@ -445,14 +470,14 @@ void OOFPositionedMgr::calcPosAndSizeChildOfChild (Child *child, int refWidth,
bool widthDefined;
if (style::isAbsLength (child->widget->getStyle()->width)) {
DBG_OBJ_MSGF ("resize.oofm", 1, "absolute width: %dpx",
- style::absLengthVal (child->getStyle()->width));
+ style::absLengthVal (child->widget->getStyle()->width));
*width = style::absLengthVal (child->widget->getStyle()->width)
+ child->widget->boxDiffWidth ();
widthDefined = true;
} else if (style::isPerLength (child->widget->getStyle()->width)) {
DBG_OBJ_MSGF ("resize.oofm", 1, "percentage width: %g%%",
100 * style::perLengthVal_useThisOnlyForDebugging
- (child->getStyle()->width));
+ (child->widget->getStyle()->width));
*width = style::multiplyWithPerLength (refWidth,
child->widget->getStyle()->width)
+ child->widget->boxDiffWidth ();
@@ -486,7 +511,7 @@ void OOFPositionedMgr::calcPosAndSizeChildOfChild (Child *child, int refWidth,
*descent = childRequisition.descent;
if (style::isAbsLength (child->widget->getStyle()->height)) {
DBG_OBJ_MSGF ("resize.oofm", 1, "absolute height: %dpx",
- style::absLengthVal (child->getStyle()->height));
+ style::absLengthVal (child->widget->getStyle()->height));
int height = style::absLengthVal (child->widget->getStyle()->height)
+ child->widget->boxDiffHeight ();
splitHeightPreserveAscent (height, ascent, descent);
@@ -494,7 +519,7 @@ void OOFPositionedMgr::calcPosAndSizeChildOfChild (Child *child, int refWidth,
} else if (style::isPerLength (child->widget->getStyle()->height)) {
DBG_OBJ_MSGF ("resize.oofm", 1, "percentage height: %g%%",
100 * style::perLengthVal_useThisOnlyForDebugging
- (child->getStyle()->height));
+ (child->widget->getStyle()->height));
int height =
style::multiplyWithPerLength (refHeight,
child->widget->getStyle()->height)