diff --git a/src/lib/aqdiagram/placement/layout.c b/src/lib/aqdiagram/placement/layout.c index 807e545..b265223 100644 --- a/src/lib/aqdiagram/placement/layout.c +++ b/src/lib/aqdiagram/placement/layout.c @@ -76,6 +76,16 @@ void AQDG_Placement_LayoutSecondaryAxis(AQDG_PLACEMENT_LAYOUT_ELEMENT *ptrElemen AQDG_PLACEMENT_LAYOUT_ELEMENT *ptr; rawLength=destLength-borderBegin-borderEnd; + + /* stretch on request */ + ptr=ptrElements; + for (i=0; iopts & AQDG_PLACEMENT_LAYOUT_ELEMENT_OPTS_STRETCH) + ptr->length=rawLength; + ptr++; + } + + /* place children */ ptr=ptrElements; for (i=0; ipos=(pos>borderBegin)?pos:borderBegin; + ptr->pos=(posminWidth)) - _hStretchBelow(object, selfWidth, minWidth, hSpacing, stretchables); return 0; } -void _vAlignChild(AQDG_OBJECT *child, uint32_t childOpts, int parentHeight, int borderTop, int borderBottom) -{ - int childHeight; - int y; - int rawParentHeight; - - rawParentHeight=parentHeight-borderTop-borderBottom; - if (childOpts & AQDG_OBJECT_OPTIONS_FIXEDHEIGHT) - childHeight=AQDG_Object_GetHeight(child); - else { - if (childOpts & AQDG_OBJECT_OPTIONS_STRETCHY) - childHeight=rawParentHeight; - else - childHeight=AQDG_Object_GetDefaultHeight(child); - AQDG_Object_SetHeight(child, childHeight); - } - - if (childOpts & AQDG_OBJECT_OPTIONS_VALIGNBOTTOM) - y=parentHeight-borderBottom-childHeight; - else if (childOpts & AQDG_OBJECT_OPTIONS_VALIGNCENTER) - y=(rawParentHeight-childHeight)/2; - else - y=borderTop; - AQDG_Object_SetRelativeY(child, y); -} - - - -void _hStretchBelow(AQDG_OBJECT *object, int selfWidth, int minWidth, int hSpacing, int stretchables) -{ - AQDG_OBJECT *child; - int diffWidth; - int toAdd; - int pos; - - diffWidth=selfWidth-minWidth; - toAdd=diffWidth/stretchables; - - pos=AQDG_Object_GetBorderLeft(object); - child=AQDG_Object_Tree2_GetFirstChild(object); - while(child) { - int w; - - AQDG_Object_SetRelativeX(child, pos); - w=AQDG_Object_GetWidth(child); - if (AQDG_Object_GetOptions(child) & AQDG_OBJECT_OPTIONS_STRETCHX) { - w+=toAdd; - AQDG_Object_SetWidth(child, w); - } - pos+=w; - child=AQDG_Object_Tree2_GetNext(child); - if (child) - pos+=hSpacing; - } /* while */ -} - - - - - diff --git a/src/lib/aqdiagram/placement/o_layout.c b/src/lib/aqdiagram/placement/o_layout.c index 958b51f..fb29db5 100644 --- a/src/lib/aqdiagram/placement/o_layout.c +++ b/src/lib/aqdiagram/placement/o_layout.c @@ -61,7 +61,7 @@ AQDG_PLACEMENT_LAYOUT_ELEMENT *AQDG_LayoutObject_Children2ElementsX(const AQDG_O eptr=elements; child=AQDG_Object_Tree2_GetFirstChild(object); while(child && num) { - _setElementFromObjectX(eptr, object); + _setElementFromObjectX(eptr, child); child=AQDG_Object_Tree2_GetNext(child); eptr++; num--; @@ -88,7 +88,7 @@ AQDG_PLACEMENT_LAYOUT_ELEMENT *AQDG_LayoutObject_Children2ElementsY(const AQDG_O eptr=elements; child=AQDG_Object_Tree2_GetFirstChild(object); while(child && num) { - _setElementFromObjectY(eptr, object); + _setElementFromObjectY(eptr, child); child=AQDG_Object_Tree2_GetNext(child); eptr++; num--; @@ -140,6 +140,34 @@ void AQDG_LayoutObject_ChildrenFromElementsY(AQDG_OBJECT *object, const AQDG_PLA +void AQDG_LayoutObject_SetChildrenWidths(AQDG_OBJECT *object) +{ + AQDG_OBJECT *child; + + child=AQDG_Object_Tree2_GetFirstChild(object); + while(child) { + if (!(AQDG_Object_GetOptions(child) & AQDG_OBJECT_OPTIONS_FIXEDWIDTH)) + AQDG_Object_SetWidth(child, AQDG_Object_GetDefaultWidth(child)); + child=AQDG_Object_Tree2_GetNext(child); + } +} + + + +void AQDG_LayoutObject_SetChildrenHeights(AQDG_OBJECT *object) +{ + AQDG_OBJECT *child; + + child=AQDG_Object_Tree2_GetFirstChild(object); + while(child) { + if (!(AQDG_Object_GetOptions(child) & AQDG_OBJECT_OPTIONS_FIXEDHEIGHT)) + AQDG_Object_SetHeight(child, AQDG_Object_GetDefaultHeight(child)); + child=AQDG_Object_Tree2_GetNext(child); + } +} + + + void _setElementFromObjectX(AQDG_PLACEMENT_LAYOUT_ELEMENT *eptr, const AQDG_OBJECT *object) { uint32_t opts; diff --git a/src/lib/aqdiagram/placement/o_layout.h b/src/lib/aqdiagram/placement/o_layout.h index fac4325..28918be 100644 --- a/src/lib/aqdiagram/placement/o_layout.h +++ b/src/lib/aqdiagram/placement/o_layout.h @@ -23,6 +23,9 @@ AQDG_API AQDG_PLACEMENT_LAYOUT_ELEMENT *AQDG_LayoutObject_Children2ElementsY(con AQDG_API void AQDG_LayoutObject_ChildrenFromElementsX(AQDG_OBJECT *object, const AQDG_PLACEMENT_LAYOUT_ELEMENT *elements, int num); AQDG_API void AQDG_LayoutObject_ChildrenFromElementsY(AQDG_OBJECT *object, const AQDG_PLACEMENT_LAYOUT_ELEMENT *elements, int num); +AQDG_API void AQDG_LayoutObject_SetChildrenWidths(AQDG_OBJECT *object); +AQDG_API void AQDG_LayoutObject_SetChildrenHeights(AQDG_OBJECT *object); +