From ff72f5f0ce52745e3c3b4cb56bd41643ce8c896f Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sun, 19 Nov 2023 00:40:42 +0100 Subject: [PATCH] added VLayer object. --- src/lib/aqdiagram/placement/0BUILD | 2 + src/lib/aqdiagram/placement/o_vlayout.c | 84 +++++++++++++++++++++++++ src/lib/aqdiagram/placement/o_vlayout.h | 24 +++++++ 3 files changed, 110 insertions(+) create mode 100644 src/lib/aqdiagram/placement/o_vlayout.c create mode 100644 src/lib/aqdiagram/placement/o_vlayout.h diff --git a/src/lib/aqdiagram/placement/0BUILD b/src/lib/aqdiagram/placement/0BUILD index 52c7176..005571a 100644 --- a/src/lib/aqdiagram/placement/0BUILD +++ b/src/lib/aqdiagram/placement/0BUILD @@ -65,6 +65,7 @@ o_layout.h o_hlayout.h o_hlayout-t.h + o_vlayout.h @@ -79,6 +80,7 @@ o_layout.c o_hlayout.c o_hlayout-t.c + o_vlayout.c diff --git a/src/lib/aqdiagram/placement/o_vlayout.c b/src/lib/aqdiagram/placement/o_vlayout.c new file mode 100644 index 0000000..adf6d38 --- /dev/null +++ b/src/lib/aqdiagram/placement/o_vlayout.c @@ -0,0 +1,84 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "o_vlayout.h" +#include "o_layout.h" + + +/* ------------------------------------------------------------------------------------------------ + * forward declarations + * ------------------------------------------------------------------------------------------------ + */ + +static int _layout(AQDG_OBJECT *object); + + + +/* ------------------------------------------------------------------------------------------------ + * implementations + * ------------------------------------------------------------------------------------------------ + */ + +AQDG_OBJECT *AQDG_VLayoutObject_new(AQDG_OBJECT *parent, uint32_t options) +{ + AQDG_OBJECT *object; + + object=AQDG_Object_new(); + AQDG_Object_SetOptions(object, options); + + AQDG_Object_SetLayoutFn(object, _layout); + + if (parent) + AQDG_Object_Tree2_AddChild(parent, object); + return object; +} + + + +int _layout(AQDG_OBJECT *object) +{ + int num; + + num=AQDG_LayoutObject_CountDirectChildren(object); + if (num) { + AQDG_PLACEMENT_LAYOUT_ELEMENT *elements; + + AQDG_LayoutObject_SetChildrenHeights(object); + elements=AQDG_LayoutObject_Children2ElementsY(object, num); + if (elements) { + AQDG_Placement_LayoutAndStretch(elements, num, + AQDG_Object_GetHeight(object), + AQDG_Object_GetBorderTop(object), + AQDG_Object_GetBorderBottom(object), + AQDG_Object_GetVSpacing(object)); + AQDG_LayoutObject_ChildrenFromElementsY(object, elements, num); + free(elements); + } + + AQDG_LayoutObject_SetChildrenWidths(object); + elements=AQDG_LayoutObject_Children2ElementsX(object, num); + if (elements) { + AQDG_Placement_LayoutSecondaryAxis(elements, num, + AQDG_Object_GetWidth(object), + AQDG_Object_GetBorderLeft(object), + AQDG_Object_GetBorderRight(object)); + AQDG_LayoutObject_ChildrenFromElementsX(object, elements, num); + free(elements); + } + + } + + return 0; +} + + + diff --git a/src/lib/aqdiagram/placement/o_vlayout.h b/src/lib/aqdiagram/placement/o_vlayout.h new file mode 100644 index 0000000..a392332 --- /dev/null +++ b/src/lib/aqdiagram/placement/o_vlayout.h @@ -0,0 +1,24 @@ +/**************************************************************************** + * This file is part of the project AqDiagram. + * AqDiagram (c) by 2023 Martin Preuss, all rights reserved. + * + * The license for this file can be found in the file COPYING which you + * should have received along with this file. + ****************************************************************************/ + +#ifndef AQDG_PLACEMENT_O_VLAYOUT_H +#define AQDG_PLACEMENT_O_VLAYOUT_H + +#include + +#include + + + +AQDG_API AQDG_OBJECT *AQDG_VLayoutObject_new(AQDG_OBJECT *parent, uint32_t options); + + + + +#endif +