diff options
-rw-r--r-- | dw/oofawarewidget.cc | 17 | ||||
-rw-r--r-- | dw/oofawarewidget.hh | 5 | ||||
-rw-r--r-- | dw/oofposrelmgr.cc | 13 |
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); } |