aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2015-02-02 14:37:53 +0100
committerSebastian Geerken <devnull@localhost>2015-02-02 14:37:53 +0100
commitcdc7bebac4c0fa7fe198c4b72c62948ffeb12815 (patch)
treedc68963df5308584ef9a920ff253fa07eb03f32f
parent76ef5d3794d67fed2e6ff65d48781674d335309b (diff)
Fixed too large widget reference space for relatively positioned elements.
-rw-r--r--dw/oofawarewidget.cc17
-rw-r--r--dw/oofawarewidget.hh5
-rw-r--r--dw/oofposrelmgr.cc13
3 files changed, 34 insertions, 1 deletions
diff --git a/dw/oofawarewidget.cc b/dw/oofawarewidget.cc
index 885bd790..9521e916 100644
--- a/dw/oofawarewidget.cc
+++ b/dw/oofawarewidget.cc
@@ -247,6 +247,8 @@ void OOFAwareWidget::correctRequisitionByOOF (Requisition *requisition,
requisition->width, requisition->ascent,
requisition->descent);
+ requisitionWithoutOOF = *requisition;
+
for (int i = 0; i < NUM_OOFM; i++) {
if (outOfFlowMgr[i]) {
DBG_OBJ_MSGF ("resize", 1, "OOFM for %s", OOFM_NAME[i]);
@@ -281,6 +283,15 @@ void OOFAwareWidget::correctRequisitionByOOF (Requisition *requisition,
&requisition->ascent, &requisition->descent);
}
+ if (!adjustExtraSpaceWhenCorrectingRequisitionByOOF ()) {
+ requisitionWithoutOOF.width = max (requisitionWithoutOOF.width,
+ oofWidth);
+ if (oofHeight >
+ requisitionWithoutOOF.ascent + requisitionWithoutOOF.descent)
+ splitHeightFun (oofHeight, &requisitionWithoutOOF.ascent,
+ &requisitionWithoutOOF.descent);
+ }
+
DBG_OBJ_MSGF ("resize", 1, "after correction: %d * (%d + %d)",
requisition->width, requisition->ascent,
requisition->descent);
@@ -289,6 +300,12 @@ void OOFAwareWidget::correctRequisitionByOOF (Requisition *requisition,
DBG_OBJ_MSGF ("resize", 1, "no OOFM for %s", OOFM_NAME[i]);
}
+ DBG_OBJ_SET_NUM ("requisitionWithoutOOF.width", requisitionWithoutOOF.width);
+ DBG_OBJ_SET_NUM ("requisitionWithoutOOF.ascent",
+ requisitionWithoutOOF.ascent);
+ DBG_OBJ_SET_NUM ("requisitionWithoutOOF.descent",
+ requisitionWithoutOOF.descent);
+
DBG_OBJ_LEAVE ();
}
diff --git a/dw/oofawarewidget.hh b/dw/oofawarewidget.hh
index 8b7c1fde..3946c72b 100644
--- a/dw/oofawarewidget.hh
+++ b/dw/oofawarewidget.hh
@@ -152,6 +152,7 @@ protected:
OOFAwareWidget *oofContainer[NUM_OOFM];
OutOfFlowMgr *outOfFlowMgr[NUM_OOFM];
+ core::Requisition requisitionWithoutOOF;
inline OutOfFlowMgr *searchOutOfFlowMgr (int oofmIndex)
{ return oofContainer[oofmIndex] ?
@@ -187,7 +188,6 @@ protected:
void removeChild (Widget *child);
-
public:
enum {
SL_START, SL_BACKGROUND, SL_SC_BOTTOM, SL_IN_FLOW, SL_OOF_REF,
@@ -238,6 +238,9 @@ public:
static inline bool testWidgetOutOfFlow (Widget *widget)
{ return testStyleOutOfFlow (widget->getStyle ()); }
+ inline core::Requisition *getRequisitionWithoutOOF ()
+ { return &requisitionWithoutOOF; }
+
bool doesWidgetOOFInterruptDrawing (Widget *widget);
void draw (core::View *view, core::Rectangle *area,
diff --git a/dw/oofposrelmgr.cc b/dw/oofposrelmgr.cc
index f1bae6d8..8980e079 100644
--- a/dw/oofposrelmgr.cc
+++ b/dw/oofposrelmgr.cc
@@ -56,7 +56,20 @@ void OOFPosRelMgr::markExtremesChange (int ref)
void OOFPosRelMgr::calcWidgetRefSize (Widget *widget, Requisition *size)
{
DBG_OBJ_ENTER ("resize.oofm", 0, "calcWidgetRefSize", "%p", widget);
+
widget->sizeRequest (size);
+
+ // In some cases, the widget has been enlarged for widgets out of
+ // flow. Partly, this is done by adding "extra space"; however, at
+ // this point, the extra space is not relevant here. See
+ // "oofawarewidget.cc" for a calculation of RequisitionWithoutOOF.
+ // (Notice also that Widget::sizeRequest has to be called in all
+ // cases.)
+
+ if (widget->instanceOf (OOFAwareWidget::CLASS_ID))
+ *size = *((OOFAwareWidget*)widget)->getRequisitionWithoutOOF ();
+
+
DBG_OBJ_LEAVE_VAL ("%d * (%d + %d)",
size->width, size->ascent, size->descent);
}