diff --git a/src/lib/aqdiagram/draw/0BUILD b/src/lib/aqdiagram/draw/0BUILD
index d989dae..92ce1af 100644
--- a/src/lib/aqdiagram/draw/0BUILD
+++ b/src/lib/aqdiagram/draw/0BUILD
@@ -70,19 +70,27 @@
context_cairo.h
- o_drawable.h
+ w_drawable.h
context_cairo_p.h
- o_drawable_p.h
+ w_drawable_p.h
+ w_hlayout.h
+ w_vlayout.h
+ w_mlayout.h
+ w_label.h
$(local/typefiles)
context_cairo.c
- o_drawable.c
+ w_drawable.c
+ w_hlayout.c
+ w_vlayout.c
+ w_mlayout.c
+ w_label.c
diff --git a/src/lib/aqdiagram/draw/o_drawable.h b/src/lib/aqdiagram/draw/o_drawable.h
deleted file mode 100644
index 8da0353..0000000
--- a/src/lib/aqdiagram/draw/o_drawable.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
- * This file is part of the project AqDiagram.
- * AqDiagram (c) by 2024 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_DRAW_O_DRAWABLE_H
-#define AQDG_DRAW_O_DRAWABLE_H
-
-#include
-
-#include
-#include
-
-
-typedef int (*AQDG_OBJECT_DRAWABLE_DRAW_FN)(AQDG_OBJECT *object);
-
-
-
-AQDG_API AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext);
-
-AQDG_API AQDG_DRAW_CONTEXT *AQDG_DrawableObject_GetDrawContext(const AQDG_OBJECT *object);
-
-AQDG_API int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i);
-
-AQDG_API int AQDG_DrawableObject_GetForegroundPenId(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetForegroundPenId(AQDG_OBJECT *object, int i);
-
-AQDG_API int AQDG_DrawableObject_GetBackgroundPenId(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetBackgroundPenId(AQDG_OBJECT *object, int i);
-
-AQDG_API const char *AQDG_DrawableObject_GetText(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetText(AQDG_OBJECT *object, const char *s);
-
-AQDG_API int AQDG_DrawableObject_GetContentWidth(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetContentWidth(AQDG_OBJECT *object, int i);
-
-AQDG_API int AQDG_DrawableObject_GetContentHeight(const AQDG_OBJECT *object);
-AQDG_API void AQDG_DrawableObject_SetContentHeight(AQDG_OBJECT *object, int i);
-
-
-AQDG_API AQDG_OBJECT_DRAWABLE_DRAW_FN AQDG_DrawableObject_SetDrawFn(AQDG_OBJECT *object, AQDG_OBJECT_DRAWABLE_DRAW_FN fn);
-
-AQDG_API int AQDG_DrawableObject_Draw(AQDG_OBJECT *object);
-
-
-#endif
-
diff --git a/src/lib/aqdiagram/draw/o_drawable.c b/src/lib/aqdiagram/draw/w_drawable.c
similarity index 55%
rename from src/lib/aqdiagram/draw/o_drawable.c
rename to src/lib/aqdiagram/draw/w_drawable.c
index 2f49a73..0aca626 100644
--- a/src/lib/aqdiagram/draw/o_drawable.c
+++ b/src/lib/aqdiagram/draw/w_drawable.c
@@ -10,7 +10,7 @@
# include
#endif
-#include "o_drawable_p.h"
+#include "w_drawable_p.h"
#include
@@ -24,9 +24,6 @@
static GWENHYWFAR_CB void _freeData(void *bp, void *p);
static int _drawFallback(AQDG_OBJECT *object);
-static int _getDefaultWidth(AQDG_OBJECT *object);
-static int _getDefaultHeight(AQDG_OBJECT *object);
-static void _updateContentSize(AQDG_OBJECT *object);
@@ -39,31 +36,39 @@ GWEN_INHERIT(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE);
-AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
+AQDG_OBJECT *AQDG_DrawableWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
{
AQDG_OBJECT *object;
- AQDG_OBJECT_DRAWABLE *xo;
object=AQDG_Object_new();
+ if (parent)
+ AQDG_Object_Tree2_AddChild(parent, object);
+
+ AQDG_DrawableWidget_Extend(object, drawContext);
+ AQDG_Object_SetOptions(object, options);
+
+ return object;
+}
+
+
+
+void AQDG_DrawableWidget_Extend(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT_DRAWABLE *xo;
+ AQDG_OBJECT *parent;
+
GWEN_NEW_OBJECT(AQDG_OBJECT_DRAWABLE, xo);
GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object, xo, _freeData);
- AQDG_Object_SetOptions(object, options);
xo->drawContext=drawContext;
xo->drawFn=_drawFallback;
- AQDG_Object_SetGetDefaultWidthFn(object, _getDefaultWidth);
- AQDG_Object_SetGetDefaultHeightFn(object, _getDefaultHeight);
-
+ parent=AQDG_Object_Tree2_GetParent(object);
if (parent && GWEN_INHERIT_ISOFTYPE(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, parent)) {
- xo->fontId=AQDG_DrawableObject_GetFontId(parent);
- xo->foregroundPenId=AQDG_DrawableObject_GetForegroundPenId(parent);
- xo->backgroundPenId=AQDG_DrawableObject_GetBackgroundPenId(parent);
+ xo->fontId=AQDG_DrawableWidget_GetFontId(parent);
+ xo->foregroundPenId=AQDG_DrawableWidget_GetForegroundPenId(parent);
+ xo->backgroundPenId=AQDG_DrawableWidget_GetBackgroundPenId(parent);
}
-
- if (parent)
- AQDG_Object_Tree2_AddChild(parent, object);
- return object;
}
@@ -79,7 +84,7 @@ GWENHYWFAR_CB void _freeData(void *bp, void *p)
-AQDG_DRAW_CONTEXT *AQDG_DrawableObject_GetDrawContext(const AQDG_OBJECT *object)
+AQDG_DRAW_CONTEXT *AQDG_DrawableWidget_GetDrawContext(const AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -92,7 +97,7 @@ AQDG_DRAW_CONTEXT *AQDG_DrawableObject_GetDrawContext(const AQDG_OBJECT *object)
-int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object)
+int AQDG_DrawableWidget_GetFontId(const AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -105,7 +110,7 @@ int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object)
-void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i)
+void AQDG_DrawableWidget_SetFontId(AQDG_OBJECT *object, int i)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -114,10 +119,8 @@ void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i)
if (xo) {
if (xo->fontId!=i) {
xo->fontId=i;
- _updateContentSize(object);
- AQDG_Object_ModifyBranchFlagsUp(object,
- AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW,
- AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW);
+ AQDG_Object_AddFlags(object, AQDG_OBJECT_FLAGS_DRAW);
+ AQDG_Object_ModifyBranchFlagsUp(object, AQDG_OBJECT_FLAGS_RECALC, AQDG_OBJECT_FLAGS_RECALC);
}
}
}
@@ -125,7 +128,7 @@ void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i)
-int AQDG_DrawableObject_GetForegroundPenId(const AQDG_OBJECT *object)
+int AQDG_DrawableWidget_GetForegroundPenId(const AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -138,20 +141,24 @@ int AQDG_DrawableObject_GetForegroundPenId(const AQDG_OBJECT *object)
-void AQDG_DrawableObject_SetForegroundPenId(AQDG_OBJECT *object, int i)
+void AQDG_DrawableWidget_SetForegroundPenId(AQDG_OBJECT *object, int i)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo)
- xo->foregroundPenId=i;
+ if (xo) {
+ if (xo->foregroundPenId!=i) {
+ xo->foregroundPenId=i;
+ AQDG_Object_AddFlags(object, AQDG_OBJECT_FLAGS_DRAW);
+ }
+ }
}
}
-int AQDG_DrawableObject_GetBackgroundPenId(const AQDG_OBJECT *object)
+int AQDG_DrawableWidget_GetBackgroundPenId(const AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -164,20 +171,24 @@ int AQDG_DrawableObject_GetBackgroundPenId(const AQDG_OBJECT *object)
-void AQDG_DrawableObject_SetBackgroundPenId(AQDG_OBJECT *object, int i)
+void AQDG_DrawableWidget_SetBackgroundPenId(AQDG_OBJECT *object, int i)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo)
- xo->backgroundPenId=i;
+ if (xo) {
+ if (xo->backgroundPenId!=i) {
+ xo->backgroundPenId=i;
+ AQDG_Object_AddFlags(object, AQDG_OBJECT_FLAGS_DRAW);
+ }
+ }
}
}
-const char *AQDG_DrawableObject_GetText(const AQDG_OBJECT *object)
+const char *AQDG_DrawableWidget_GetText(const AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -190,7 +201,7 @@ const char *AQDG_DrawableObject_GetText(const AQDG_OBJECT *object)
-void AQDG_DrawableObject_SetText(AQDG_OBJECT *object, const char *s)
+void AQDG_DrawableWidget_SetText(AQDG_OBJECT *object, const char *s)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -200,81 +211,22 @@ void AQDG_DrawableObject_SetText(AQDG_OBJECT *object, const char *s)
free(xo->text);
xo->text=s?strdup(s):NULL;
- _updateContentSize(object);
- AQDG_Object_ModifyBranchFlagsUp(object,
- AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW,
- AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW);
+ AQDG_Object_AddFlags(object, AQDG_OBJECT_FLAGS_DRAW);
+ AQDG_Object_ModifyBranchFlagsUp(object, AQDG_OBJECT_FLAGS_RECALC, AQDG_OBJECT_FLAGS_RECALC);
}
}
}
-int AQDG_DrawableObject_GetContentWidth(const AQDG_OBJECT *object)
-{
- if (object) {
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- return xo?xo->contentWidth:0;
- }
- return 0;
-}
-
-
-
-void AQDG_DrawableObject_SetContentWidth(AQDG_OBJECT *object, int i)
+AQDG_WIDGET_DRAWABLE_DRAW_FN AQDG_DrawableWidget_SetDrawFn(AQDG_OBJECT *object, AQDG_WIDGET_DRAWABLE_DRAW_FN fn)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
if (xo) {
- xo->contentWidth=i;
- AQDG_Object_ModifyBranchFlagsUp(object, AQDG_OBJECT_FLAGS_LAYOUT, AQDG_OBJECT_FLAGS_LAYOUT);
- }
- }
-}
-
-
-
-int AQDG_DrawableObject_GetContentHeight(const AQDG_OBJECT *object)
-{
- if (object) {
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- return xo?xo->contentHeight:0;
- }
- return 0;
-}
-
-
-
-void AQDG_DrawableObject_SetContentHeight(AQDG_OBJECT *object, int i)
-{
- if (object) {
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo) {
- xo->contentHeight=i;
- AQDG_Object_ModifyBranchFlagsUp(object, AQDG_OBJECT_FLAGS_LAYOUT, AQDG_OBJECT_FLAGS_LAYOUT);
- }
- }
-}
-
-
-
-
-AQDG_OBJECT_DRAWABLE_DRAW_FN AQDG_DrawableObject_SetDrawFn(AQDG_OBJECT *object, AQDG_OBJECT_DRAWABLE_DRAW_FN fn)
-{
- if (object) {
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo) {
- AQDG_OBJECT_DRAWABLE_DRAW_FN oldFn;
+ AQDG_WIDGET_DRAWABLE_DRAW_FN oldFn;
oldFn=xo->drawFn;
xo->drawFn=fn;
@@ -287,7 +239,7 @@ AQDG_OBJECT_DRAWABLE_DRAW_FN AQDG_DrawableObject_SetDrawFn(AQDG_OBJECT *object,
-int AQDG_DrawableObject_Draw(AQDG_OBJECT *object)
+int AQDG_DrawableWidget_Draw(AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
@@ -302,25 +254,75 @@ int AQDG_DrawableObject_Draw(AQDG_OBJECT *object)
+int AQDG_DrawableWidget_DrawBackground(AQDG_OBJECT *object)
+{
+ if (object) {
+ AQDG_OBJECT_DRAWABLE *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
+ if (xo) {
+ AQDG_Draw_Context_DrawFilledRect(xo->drawContext,
+ xo->backgroundPenId,
+ AQDG_Object_GetAbsoluteX(object),
+ AQDG_Object_GetAbsoluteY(object),
+ AQDG_Object_GetWidth(object),
+ AQDG_Object_GetHeight(object));
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+
+void AQDG_DrawableWidget_DrawText(AQDG_OBJECT *object, int x, int y, const char *text)
+{
+ if (object) {
+ AQDG_OBJECT_DRAWABLE *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
+ if (xo) {
+ x+=AQDG_Object_GetAbsoluteX(object);
+ y+=AQDG_Object_GetAbsoluteY(object);
+ AQDG_Draw_Context_DrawText(xo->drawContext, xo->foregroundPenId, xo->fontId, AQDG_Direction_Horizontal, x, y, text?text:"");
+ }
+ }
+}
+
+
+
+int AQDG_DrawableWidget_DrawChildren(AQDG_OBJECT *object)
+{
+ if (object) {
+ AQDG_OBJECT_DRAWABLE *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
+ if (xo) {
+ AQDG_OBJECT *child;
+
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ if (child) {
+ while (child) {
+ AQDG_DrawableWidget_Draw(child);
+ child=AQDG_Object_Tree2_GetNext(child);
+ }
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
int _drawFallback(AQDG_OBJECT *object)
{
AQDG_OBJECT_DRAWABLE *xo;
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
if (xo) {
- AQDG_OBJECT *child;
-
- AQDG_Draw_Context_DrawFilledRect(xo->drawContext,
- xo->backgroundPenId,
- AQDG_Object_GetAbsoluteX(object),
- AQDG_Object_GetAbsoluteY(object),
- AQDG_Object_GetWidth(object),
- AQDG_Object_GetHeight(object));
- child=AQDG_Object_Tree2_GetFirstChild(object);
- while(child) {
- AQDG_DrawableObject_Draw(child);
- child=AQDG_Object_Tree2_GetNext(child);
- }
+ AQDG_DrawableWidget_DrawBackground(object);
+ AQDG_DrawableWidget_DrawChildren(object);
AQDG_Object_SubFlags(object, AQDG_OBJECT_FLAGS_DRAW);
return 1;
}
@@ -329,57 +331,24 @@ int _drawFallback(AQDG_OBJECT *object)
-int _getDefaultWidth(AQDG_OBJECT *object)
-{
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo) {
- return xo->contentWidth;
- }
- return 1;
-}
-
-
-
-int _getDefaultHeight(AQDG_OBJECT *object)
-{
- AQDG_OBJECT_DRAWABLE *xo;
-
- xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
- if (xo) {
- return xo->contentHeight;
- }
- return 1;
-}
-
-
-
-void _updateContentSize(AQDG_OBJECT *object)
+void AQDG_DrawableWidget_UpdateTextContentDims(AQDG_OBJECT *object)
{
if (object) {
AQDG_OBJECT_DRAWABLE *xo;
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
if (xo) {
- xo->contentWidth=0;
- xo->contentHeight=0;
if (xo->text) {
- int i;
+ int w;
+ int h;
- i=AQDG_Draw_Context_GetTextWidth(xo->drawContext, xo->fontId, xo->text);
- if (i<0) {
- DBG_INFO(NULL, "here (%d)", i);
- }
- else
- xo->contentWidth=i;
+ w=AQDG_DrawableWidget_GetTextWidth(object);
+ w+=AQDG_Object_GetBorderLeft(object)+AQDG_Object_GetBorderRight(object);
+ h=AQDG_DrawableWidget_GetTextHeight(object);
+ h+=AQDG_Object_GetBorderTop(object)+AQDG_Object_GetBorderBottom(object);
- i=AQDG_Draw_Context_GetTextHeight(xo->drawContext, xo->fontId, xo->text);
- if (i<0) {
- DBG_INFO(NULL, "here (%d)", i);
- }
- else
- xo->contentHeight=i;
+ AQDG_Object_SetContentWidth(object, w);
+ AQDG_Object_SetContentHeight(object, h);
}
}
}
@@ -387,6 +356,54 @@ void _updateContentSize(AQDG_OBJECT *object)
+int AQDG_DrawableWidget_GetTextWidth(AQDG_OBJECT *object)
+{
+ if (object) {
+ AQDG_OBJECT_DRAWABLE *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
+ if (xo) {
+ if (xo->text) {
+ int w;
+
+ w=AQDG_Draw_Context_GetTextWidth(xo->drawContext, xo->fontId, xo->text);
+ if (w<0) {
+ DBG_INFO(NULL, "here (%d)", w);
+ return 0;
+ }
+ return w;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+int AQDG_DrawableWidget_GetTextHeight(AQDG_OBJECT *object)
+{
+ if (object) {
+ AQDG_OBJECT_DRAWABLE *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
+ if (xo) {
+ if (xo->text) {
+ int h;
+
+ h=AQDG_Draw_Context_GetTextHeight(xo->drawContext, xo->fontId, xo->text);
+ if (h<0) {
+ DBG_INFO(NULL, "here (%d)", h);
+ return 0;
+ }
+ return h;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
diff --git a/src/lib/aqdiagram/draw/w_drawable.h b/src/lib/aqdiagram/draw/w_drawable.h
new file mode 100644
index 0000000..e6f5db5
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_drawable.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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_DRAW_W_DRAWABLE_H
+#define AQDG_DRAW_W_DRAWABLE_H
+
+#include
+
+#include
+#include
+
+
+typedef int (*AQDG_WIDGET_DRAWABLE_DRAW_FN)(AQDG_OBJECT *object);
+
+#define AQDG_DRAWABLE_OPTIONS_JUSTIFY_RIGHT 0x00000001
+#define AQDG_DRAWABLE_OPTIONS_JUSTIFY_HCENTER 0x00000002
+#define AQDG_DRAWABLE_OPTIONS_JUSTIFY_BOTTOM 0x00000004
+#define AQDG_DRAWABLE_OPTIONS_JUSTIFY_VCENTER 0x00000008
+
+
+/**
+ * Sets virtual functions:
+ * - AQDG_OBJECT_DRAWABLE_DRAW_FN (just fill background and lets children draw their content)
+ */
+AQDG_API AQDG_OBJECT *AQDG_DrawableWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext);
+
+/**
+ * Only sets draw function, does not overwrite getDefaultWidth/Height or layout functions.
+ */
+AQDG_API void AQDG_DrawableWidget_Extend(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *drawContext);
+
+AQDG_API AQDG_DRAW_CONTEXT *AQDG_DrawableWidget_GetDrawContext(const AQDG_OBJECT *object);
+
+AQDG_API int AQDG_DrawableWidget_GetFontId(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetFontId(AQDG_OBJECT *object, int i);
+
+AQDG_API int AQDG_DrawableWidget_GetForegroundPenId(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetForegroundPenId(AQDG_OBJECT *object, int i);
+
+AQDG_API int AQDG_DrawableWidget_GetBackgroundPenId(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetBackgroundPenId(AQDG_OBJECT *object, int i);
+
+AQDG_API const char *AQDG_DrawableWidget_GetText(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetText(AQDG_OBJECT *object, const char *s);
+
+AQDG_API int AQDG_DrawableWidget_GetContentWidth(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetContentWidth(AQDG_OBJECT *object, int i);
+
+AQDG_API int AQDG_DrawableWidget_GetContentHeight(const AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_SetContentHeight(AQDG_OBJECT *object, int i);
+
+
+AQDG_API AQDG_WIDGET_DRAWABLE_DRAW_FN AQDG_DrawableWidget_SetDrawFn(AQDG_OBJECT *object, AQDG_WIDGET_DRAWABLE_DRAW_FN fn);
+
+AQDG_API int AQDG_DrawableWidget_Draw(AQDG_OBJECT *object);
+
+
+AQDG_API int AQDG_DrawableWidget_DrawBackground(AQDG_OBJECT *object);
+AQDG_API int AQDG_DrawableWidget_DrawChildren(AQDG_OBJECT *object);
+AQDG_API void AQDG_DrawableWidget_DrawText(AQDG_OBJECT *object, int x, int y, const char *text);
+
+
+AQDG_API void AQDG_DrawableWidget_UpdateTextContentDims(AQDG_OBJECT *object);
+
+AQDG_API int AQDG_DrawableWidget_GetTextWidth(AQDG_OBJECT *object);
+AQDG_API int AQDG_DrawableWidget_GetTextHeight(AQDG_OBJECT *object);
+
+
+#endif
+
diff --git a/src/lib/aqdiagram/draw/o_drawable_p.h b/src/lib/aqdiagram/draw/w_drawable_p.h
similarity index 76%
rename from src/lib/aqdiagram/draw/o_drawable_p.h
rename to src/lib/aqdiagram/draw/w_drawable_p.h
index e79c126..1009872 100644
--- a/src/lib/aqdiagram/draw/o_drawable_p.h
+++ b/src/lib/aqdiagram/draw/w_drawable_p.h
@@ -6,10 +6,10 @@
* should have received along with this file.
****************************************************************************/
-#ifndef AQDG_DRAW_O_DRAWABLE_P_H
-#define AQDG_DRAW_O_DRAWABLE_P_H
+#ifndef AQDG_DRAW_W_DRAWABLE_P_H
+#define AQDG_DRAW_W_DRAWABLE_P_H
-#include
+#include
typedef struct AQDG_OBJECT_DRAWABLE AQDG_OBJECT_DRAWABLE;
@@ -20,10 +20,8 @@ struct AQDG_OBJECT_DRAWABLE {
int backgroundPenId;
char *text;
- int contentWidth;
- int contentHeight;
- AQDG_OBJECT_DRAWABLE_DRAW_FN drawFn;
+ AQDG_WIDGET_DRAWABLE_DRAW_FN drawFn;
};
diff --git a/src/lib/aqdiagram/draw/w_hlayout.c b/src/lib/aqdiagram/draw/w_hlayout.c
new file mode 100644
index 0000000..a09e15c
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_hlayout.c
@@ -0,0 +1,33 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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 "./w_vlayout.h"
+
+#include "./w_drawable.h"
+#include "aqdiagram/placement/o_hlayout.h"
+
+#include
+
+
+
+AQDG_OBJECT *AQDG_HLayoutWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT *object;
+
+ object=AQDG_HLayoutObject_new(parent, options);
+ AQDG_DrawableWidget_Extend(object, drawContext);
+
+ return object;
+}
+
+
+
diff --git a/src/lib/aqdiagram/draw/w_hlayout.h b/src/lib/aqdiagram/draw/w_hlayout.h
new file mode 100644
index 0000000..8f7c1a4
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_hlayout.h
@@ -0,0 +1,23 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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_DRAW_W_HLAYOUT_H
+#define AQDG_DRAW_W_HLAYOUT_H
+
+#include
+
+#include
+#include
+
+
+AQDG_API AQDG_OBJECT *AQDG_HLayoutWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext);
+
+
+
+#endif
+
diff --git a/src/lib/aqdiagram/draw/w_label.c b/src/lib/aqdiagram/draw/w_label.c
new file mode 100644
index 0000000..f1f3724
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_label.c
@@ -0,0 +1,148 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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 "./w_label.h"
+
+#include "./w_drawable.h"
+
+#include
+
+
+
+/* ------------------------------------------------------------------------------------------------
+ * forward declarations
+ * ------------------------------------------------------------------------------------------------
+ */
+
+static int _draw(AQDG_OBJECT *object);
+static int _calcXPos(AQDG_OBJECT *object, uint32_t opts, int tw);
+static int _calcYPos(AQDG_OBJECT *object, uint32_t opts, int th);
+
+
+
+/* ------------------------------------------------------------------------------------------------
+ * implementations
+ * ------------------------------------------------------------------------------------------------
+ */
+
+
+
+AQDG_OBJECT *AQDG_LabelWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT *object;
+
+ object=AQDG_DrawableWidget_new(parent, options, drawContext);
+ AQDG_Object_SetOptions(object, options);
+ AQDG_DrawableWidget_SetDrawFn(object, _draw);
+ if (parent)
+ AQDG_Object_Tree2_AddChild(parent, object);
+ return object;
+}
+
+
+
+int _draw(AQDG_OBJECT *object)
+{
+ if (object) {
+ uint32_t opts;
+ int x;
+ int y;
+ int tw;
+ int th;
+
+ AQDG_DrawableWidget_DrawBackground(object);
+ opts=AQDG_Object_GetOptions(object);
+ tw=AQDG_DrawableWidget_GetTextWidth(object);
+ th=AQDG_DrawableWidget_GetTextHeight(object);
+
+ x=_calcXPos(object, opts, tw);
+ y=_calcYPos(object, opts, th);
+ AQDG_DrawableWidget_DrawText(object, x, y, AQDG_DrawableWidget_GetText(object));
+ return 1;
+ }
+
+ return 0;
+}
+
+
+
+int _calcXPos(AQDG_OBJECT *object, uint32_t opts, int tw)
+{
+ int x;
+ int w;
+
+ w=AQDG_Object_GetWidth(object)-AQDG_Object_GetBorderLeft(object)-AQDG_Object_GetBorderRight(object);
+ if (w<0) {
+ DBG_ERROR(NULL, "Width smaller than borders (%d)", w);
+ return AQDG_Object_GetBorderLeft(object);
+ }
+
+ if (opts & AQDG_DRAWABLE_OPTIONS_JUSTIFY_RIGHT) {
+ /* right */
+ x=(w-tw)+AQDG_Object_GetBorderLeft(object);
+ }
+ else if (opts & AQDG_DRAWABLE_OPTIONS_JUSTIFY_HCENTER) {
+ /* hcenter */
+ x=((w-tw)/2)+AQDG_Object_GetBorderLeft(object);
+ }
+ else {
+ /* left */
+ x=AQDG_Object_GetBorderLeft(object);
+ }
+
+ if (x
+
+#include
+#include
+
+
+AQDG_API AQDG_OBJECT *AQDG_LabelWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext);
+
+
+
+#endif
+
diff --git a/src/lib/aqdiagram/draw/w_mlayout.c b/src/lib/aqdiagram/draw/w_mlayout.c
new file mode 100644
index 0000000..a828d3e
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_mlayout.c
@@ -0,0 +1,46 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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 "./w_mlayout.h"
+
+#include "./w_drawable.h"
+#include "aqdiagram/placement/o_mlayout.h"
+
+#include
+
+
+
+AQDG_OBJECT *AQDG_MatrixLayoutWidgetByRows_new(AQDG_OBJECT *parent, uint32_t options, int columns, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT *object;
+
+ object=AQDG_MatrixLayoutObjectByRows_new(parent, options, columns);
+ AQDG_DrawableWidget_Extend(object, drawContext);
+
+ return object;
+}
+
+
+
+AQDG_OBJECT *AQDG_MatrixLayoutWidgetByColumns_new(AQDG_OBJECT *parent, uint32_t options, int rows, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT *object;
+
+ object=AQDG_MatrixLayoutObjectByColumns_new(parent, options, rows);
+ AQDG_DrawableWidget_Extend(object, drawContext);
+
+ return object;
+}
+
+
+
+
diff --git a/src/lib/aqdiagram/draw/w_mlayout.h b/src/lib/aqdiagram/draw/w_mlayout.h
new file mode 100644
index 0000000..3fb489a
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_mlayout.h
@@ -0,0 +1,27 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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_DRAW_W_MLAYOUT_H
+#define AQDG_DRAW_W_MLAYOUT_H
+
+#include
+
+#include
+#include
+
+
+AQDG_API AQDG_OBJECT *AQDG_MatrixLayoutWidgetByRows_new(AQDG_OBJECT *parent, uint32_t options, int columns,
+ AQDG_DRAW_CONTEXT *drawContext);
+
+AQDG_API AQDG_OBJECT *AQDG_MatrixLayoutWidgetByColumns_new(AQDG_OBJECT *parent, uint32_t options, int rows,
+ AQDG_DRAW_CONTEXT *drawContext);
+
+
+
+#endif
+
diff --git a/src/lib/aqdiagram/draw/w_vlayout.c b/src/lib/aqdiagram/draw/w_vlayout.c
new file mode 100644
index 0000000..a4cd9db
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_vlayout.c
@@ -0,0 +1,33 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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 "./w_vlayout.h"
+
+#include "./w_drawable.h"
+#include "aqdiagram/placement/o_vlayout.h"
+
+#include
+
+
+
+AQDG_OBJECT *AQDG_VLayoutWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
+{
+ AQDG_OBJECT *object;
+
+ object=AQDG_VLayoutObject_new(parent, options);
+ AQDG_DrawableWidget_Extend(object, drawContext);
+
+ return object;
+}
+
+
+
diff --git a/src/lib/aqdiagram/draw/w_vlayout.h b/src/lib/aqdiagram/draw/w_vlayout.h
new file mode 100644
index 0000000..eee5711
--- /dev/null
+++ b/src/lib/aqdiagram/draw/w_vlayout.h
@@ -0,0 +1,23 @@
+/****************************************************************************
+ * This file is part of the project AqDiagram.
+ * AqDiagram (c) by 2024 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_DRAW_W_VLAYOUT_H
+#define AQDG_DRAW_W_VLAYOUT_H
+
+#include
+
+#include
+#include
+
+
+AQDG_API AQDG_OBJECT *AQDG_VLayoutWidget_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext);
+
+
+
+#endif
+
diff --git a/src/lib/aqdiagram/placement/o_hlayout-t.c b/src/lib/aqdiagram/placement/o_hlayout-t.c
index 2c4cf56..7f4603c 100644
--- a/src/lib/aqdiagram/placement/o_hlayout-t.c
+++ b/src/lib/aqdiagram/placement/o_hlayout-t.c
@@ -31,8 +31,6 @@
static int GWENHYWFAR_CB test1(GWEN_TEST_MODULE *mod);
static AQDG_OBJECT *_createBox10x10(uint32_t opts);
-static int _boxGetDefaultWidth10(AQDG_OBJECT *object);
-static int _boxGetDefaultHeight10(AQDG_OBJECT *object);
@@ -166,29 +164,13 @@ AQDG_OBJECT *_createBox10x10(uint32_t opts)
box=AQDG_Object_new();
AQDG_Object_SetOptions(box, opts);
- AQDG_Object_SetGetDefaultWidthFn(box, _boxGetDefaultWidth10);
- AQDG_Object_SetGetDefaultHeightFn(box, _boxGetDefaultHeight10);
+ AQDG_Object_SetContentWidth(box, 10);
+ AQDG_Object_SetContentHeight(box, 10);
return box;
}
-int _boxGetDefaultWidth10(AQDG_OBJECT *object)
-{
- return 10;
-}
-
-
-
-int _boxGetDefaultHeight10(AQDG_OBJECT *object)
-{
- return 10;
-}
-
-
-
-
-
#else
int AQDG_HLayoutObject_AddTests(GWEN_TEST_MODULE *mod)
diff --git a/src/lib/aqdiagram/placement/o_hlayout.c b/src/lib/aqdiagram/placement/o_hlayout.c
index 842a057..34c166f 100644
--- a/src/lib/aqdiagram/placement/o_hlayout.c
+++ b/src/lib/aqdiagram/placement/o_hlayout.c
@@ -20,6 +20,9 @@
*/
static int _layout(AQDG_OBJECT *object);
+static int _calcContentDims(AQDG_OBJECT *object);
+static int _calcContentWidth(AQDG_OBJECT *object);
+static int _calcContentHeight(AQDG_OBJECT *object);
@@ -36,6 +39,7 @@ AQDG_OBJECT *AQDG_HLayoutObject_new(AQDG_OBJECT *parent, uint32_t options)
AQDG_Object_SetOptions(object, options);
AQDG_Object_SetLayoutFn(object, _layout);
+ AQDG_Object_SetCalcContentDimsFn(object, _calcContentDims);
if (parent)
AQDG_Object_Tree2_AddChild(parent, object);
@@ -82,3 +86,55 @@ int _layout(AQDG_OBJECT *object)
+int _calcContentDims(AQDG_OBJECT *object)
+{
+ AQDG_Object_SetContentWidth(object, _calcContentWidth(object));
+ AQDG_Object_SetContentHeight(object, _calcContentHeight(object));
+ return 0;
+}
+
+
+int _calcContentWidth(AQDG_OBJECT *object)
+{
+ AQDG_OBJECT *child;
+ int v;
+ int spacing;
+
+ v=AQDG_Object_GetBorderLeft(object);
+ spacing=AQDG_Object_GetHSpacing(object);
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child) {
+ v+=AQDG_Object_GetDefaultWidth(child);
+ child=AQDG_Object_Tree2_GetNext(child);
+ if (child)
+ v+=spacing;
+ }
+ v+=AQDG_Object_GetBorderRight(object);
+
+ return v;
+}
+
+
+
+int _calcContentHeight(AQDG_OBJECT *object)
+{
+ AQDG_OBJECT *child;
+ int v;
+
+ v=AQDG_Object_GetBorderTop(object);
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child) {
+ int i;
+
+ i=AQDG_Object_GetDefaultHeight(child);
+ v=(i>v)?i:v;
+ child=AQDG_Object_Tree2_GetNext(child);
+ }
+ v+=AQDG_Object_GetBorderBottom(object);
+
+ return v;
+}
+
+
+
+
diff --git a/src/lib/aqdiagram/placement/o_mlayout.c b/src/lib/aqdiagram/placement/o_mlayout.c
index afc585f..7d9d974 100644
--- a/src/lib/aqdiagram/placement/o_mlayout.c
+++ b/src/lib/aqdiagram/placement/o_mlayout.c
@@ -39,6 +39,15 @@ static void _setChildrenFromElementsY(AQDG_OBJECT *object, const AQDG_PLACEMENT_
static void _setObjectFromElementX(AQDG_OBJECT *object, const AQDG_PLACEMENT_LAYOUT_ELEMENT *eptr);
static void _setObjectFromElementY(AQDG_OBJECT *object, const AQDG_PLACEMENT_LAYOUT_ELEMENT *eptr);
+static int _calcDimsByRows(AQDG_OBJECT *object);
+static int _calcDimsByColumns(AQDG_OBJECT *object);
+
+static int _calcWidthByRows(const AQDG_OBJECT *object, int columns);
+static int _calcHeightByRows(const AQDG_OBJECT *object, int columns);
+
+static int _calcWidthByColumns(const AQDG_OBJECT *object, int rows);
+static int _calcHeightByColumns(const AQDG_OBJECT *object, int rows);
+
/* ------------------------------------------------------------------------------------------------
@@ -56,6 +65,7 @@ AQDG_OBJECT *AQDG_MatrixLayoutObjectByRows_new(AQDG_OBJECT *parent, uint32_t opt
object=_matrixLayoutObject_new(parent, options, columns);
AQDG_Object_SetLayoutFn(object, _layoutByRows);
+ AQDG_Object_SetCalcContentDimsFn(object, _calcDimsByRows);
return object;
}
@@ -67,6 +77,7 @@ AQDG_OBJECT *AQDG_MatrixLayoutObjectByColumns_new(AQDG_OBJECT *parent, uint32_t
object=_matrixLayoutObject_new(parent, options, rows);
AQDG_Object_SetLayoutFn(object, _layoutByColumns);
+ AQDG_Object_SetCalcContentDimsFn(object, _calcDimsByColumns);
return object;
}
@@ -345,3 +356,177 @@ void _setObjectFromElementY(AQDG_OBJECT *object, const AQDG_PLACEMENT_LAYOUT_ELE
+
+int _calcDimsByRows(AQDG_OBJECT *object)
+{
+ AQDG_OBJECT_MLAYOUT *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_MLAYOUT, object);
+ if (xo) {
+ AQDG_Object_SetContentWidth(object, _calcWidthByRows(object, xo->numRowsOrColumns));
+ AQDG_Object_SetContentHeight(object, _calcHeightByRows(object, xo->numRowsOrColumns));
+ return 1;
+ }
+ return 0;
+}
+
+
+
+int _calcDimsByColumns(AQDG_OBJECT *object)
+{
+ AQDG_OBJECT_MLAYOUT *xo;
+
+ xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_MLAYOUT, object);
+ if (xo) {
+ AQDG_Object_SetContentWidth(object, _calcWidthByColumns(object, xo->numRowsOrColumns));
+ AQDG_Object_SetContentHeight(object, _calcHeightByColumns(object, xo->numRowsOrColumns));
+ return 1;
+ }
+ return 0;
+}
+
+
+
+int _calcWidthByRows(const AQDG_OBJECT *object, int columns)
+{
+ AQDG_OBJECT *child;
+ int i=0;
+ int cw=0;
+ int w;
+
+ w=AQDG_Object_GetBorderLeft(object);
+ i=0;
+ cw=0;
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child && icw)?k:cw;
+ while(n && jch)?k:ch;
+ child=AQDG_Object_Tree2_GetNext(child);
+ i++;
+ if (i>=columns) {
+ h+=ch;
+ i=0;
+ ch=0;
+ if (child)
+ h+=AQDG_Object_GetVSpacing(object);
+ }
+ }
+ h+=AQDG_Object_GetBorderBottom(object);
+ return h;
+}
+
+
+
+int _calcWidthByColumns(const AQDG_OBJECT *object, int rows)
+{
+ AQDG_OBJECT *child;
+ int i=0;
+ int cw=0;
+ int w;
+
+ w=AQDG_Object_GetBorderLeft(object);
+ i=0;
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child) {
+ int k;
+
+ k=AQDG_Object_GetDefaultWidth(child);
+ cw=(k>cw)?k:cw;
+ child=AQDG_Object_Tree2_GetNext(child);
+ i++;
+ if (i>=rows) {
+ w+=cw;
+ i=0;
+ cw=0;
+ if (child)
+ w+=AQDG_Object_GetHSpacing(object);
+ }
+ }
+ w+=AQDG_Object_GetBorderRight(object);
+ return w;
+}
+
+
+
+int _calcHeightByColumns(const AQDG_OBJECT *object, int rows)
+{
+ AQDG_OBJECT *child;
+ int i=0;
+ int ch=0;
+ int h;
+
+ h=AQDG_Object_GetBorderTop(object);
+ i=0;
+ ch=0;
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child && ich)?k:ch;
+ while(n && jv)?i:v;
+ child=AQDG_Object_Tree2_GetNext(child);
+ }
+ v+=AQDG_Object_GetBorderRight(object);
+
+ return v;
+}
+
+
+
+int _calcContentHeight(AQDG_OBJECT *object)
+{
+ AQDG_OBJECT *child;
+ int v;
+ int spacing;
+
+ v=AQDG_Object_GetBorderTop(object);
+ spacing=AQDG_Object_GetVSpacing(object);
+ child=AQDG_Object_Tree2_GetFirstChild(object);
+ while(child) {
+ v+=AQDG_Object_GetDefaultHeight(child);
+ child=AQDG_Object_Tree2_GetNext(child);
+ if (child)
+ v+=spacing;
+ }
+ v+=AQDG_Object_GetBorderBottom(object);
+
+ return v;
+}
+
+
+
diff --git a/src/lib/aqdiagram/placement/object.xml b/src/lib/aqdiagram/placement/object.xml
index c3be19d..3d70c0b 100644
--- a/src/lib/aqdiagram/placement/object.xml
+++ b/src/lib/aqdiagram/placement/object.xml
@@ -69,6 +69,52 @@
} \n
+
+
+
+
+ $(api) int $(struct_prefix)_GetDefaultWidth($(struct_type) *object);
+
+
+
+
+
+ int $(struct_prefix)_GetDefaultWidth($(struct_type) *object) \n
+ { \n
+ if (object) { \n
+ if (object->flags & AQDG_OBJECT_FLAGS_RECALC) { \n
+ $(struct_prefix)_CalcContentDims(object); \n
+ object->flags &=~AQDG_OBJECT_FLAGS_RECALC; \n
+ } \n
+ return object->contentWidth; \n
+ } \n
+ return 1; \n
+ } \n
+
+
+
+
+
+
+ $(api) int $(struct_prefix)_GetDefaultHeight($(struct_type) *object);
+
+
+
+
+
+ int $(struct_prefix)_GetDefaultHeight($(struct_type) *object)\n
+ { \n
+ if (object) { \n
+ if (object->flags & AQDG_OBJECT_FLAGS_RECALC) { \n
+ $(struct_prefix)_CalcContentDims(object); \n
+ object->flags &=~AQDG_OBJECT_FLAGS_RECALC; \n
+ } \n
+ return object->contentHeight; \n
+ } \n
+ return 1; \n
+ } \n
+
+
@@ -81,6 +127,7 @@
+
@@ -188,6 +235,20 @@
+
+ 0
+ 0
+ public
+
+
+
+
+ 0
+ 0
+ public
+
+
+
0
0
@@ -208,19 +269,11 @@
-
+
public
- 1
- int
-
-
-
-
-
- public
- 1
+ 0
int