From 02cd1f992f9a610db86c7d708589a0db7bc1d208 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sun, 26 May 2024 02:30:59 +0200 Subject: [PATCH] more work on widgets and objects. --- src/lib/aqdiagram/draw/0BUILD | 14 +- src/lib/aqdiagram/draw/o_drawable.h | 51 --- .../draw/{o_drawable.c => w_drawable.c} | 323 +++++++++--------- src/lib/aqdiagram/draw/w_drawable.h | 75 ++++ .../draw/{o_drawable_p.h => w_drawable_p.h} | 10 +- src/lib/aqdiagram/draw/w_hlayout.c | 33 ++ src/lib/aqdiagram/draw/w_hlayout.h | 23 ++ src/lib/aqdiagram/draw/w_label.c | 148 ++++++++ src/lib/aqdiagram/draw/w_label.h | 23 ++ src/lib/aqdiagram/draw/w_mlayout.c | 46 +++ src/lib/aqdiagram/draw/w_mlayout.h | 27 ++ src/lib/aqdiagram/draw/w_vlayout.c | 33 ++ src/lib/aqdiagram/draw/w_vlayout.h | 23 ++ src/lib/aqdiagram/placement/o_hlayout-t.c | 22 +- src/lib/aqdiagram/placement/o_hlayout.c | 56 +++ src/lib/aqdiagram/placement/o_mlayout.c | 185 ++++++++++ src/lib/aqdiagram/placement/o_vlayout.c | 56 +++ src/lib/aqdiagram/placement/object.xml | 73 +++- 18 files changed, 978 insertions(+), 243 deletions(-) delete mode 100644 src/lib/aqdiagram/draw/o_drawable.h rename src/lib/aqdiagram/draw/{o_drawable.c => w_drawable.c} (55%) create mode 100644 src/lib/aqdiagram/draw/w_drawable.h rename src/lib/aqdiagram/draw/{o_drawable_p.h => w_drawable_p.h} (76%) create mode 100644 src/lib/aqdiagram/draw/w_hlayout.c create mode 100644 src/lib/aqdiagram/draw/w_hlayout.h create mode 100644 src/lib/aqdiagram/draw/w_label.c create mode 100644 src/lib/aqdiagram/draw/w_label.h create mode 100644 src/lib/aqdiagram/draw/w_mlayout.c create mode 100644 src/lib/aqdiagram/draw/w_mlayout.h create mode 100644 src/lib/aqdiagram/draw/w_vlayout.c create mode 100644 src/lib/aqdiagram/draw/w_vlayout.h 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