more work on drawable object.
This commit is contained in:
@@ -20,7 +20,9 @@
|
|||||||
|
|
||||||
static GWENHYWFAR_CB void _freeData(void *bp, void *p);
|
static GWENHYWFAR_CB void _freeData(void *bp, void *p);
|
||||||
|
|
||||||
static int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g);
|
static int _drawFallback(AQDG_OBJECT *object);
|
||||||
|
static int _getDefaultWidth(AQDG_OBJECT *object);
|
||||||
|
static int _getDefaultHeight(AQDG_OBJECT *object);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +35,7 @@ GWEN_INHERIT(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE);
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options)
|
AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options, AQDG_DRAW_CONTEXT *drawContext)
|
||||||
{
|
{
|
||||||
AQDG_OBJECT *object;
|
AQDG_OBJECT *object;
|
||||||
AQDG_OBJECT_DRAWABLE *xo;
|
AQDG_OBJECT_DRAWABLE *xo;
|
||||||
@@ -43,8 +45,12 @@ AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options)
|
|||||||
GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object, xo, _freeData);
|
GWEN_INHERIT_SETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object, xo, _freeData);
|
||||||
|
|
||||||
AQDG_Object_SetOptions(object, options);
|
AQDG_Object_SetOptions(object, options);
|
||||||
|
xo->drawContext=drawContext;
|
||||||
xo->drawFn=_drawFallback;
|
xo->drawFn=_drawFallback;
|
||||||
|
|
||||||
|
AQDG_Object_SetGetDefaultWidthFn(object, _getDefaultWidth);
|
||||||
|
AQDG_Object_SetGetDefaultHeightFn(object, _getDefaultHeight);
|
||||||
|
|
||||||
if (parent && GWEN_INHERIT_ISOFTYPE(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, parent)) {
|
if (parent && GWEN_INHERIT_ISOFTYPE(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, parent)) {
|
||||||
xo->fontId=AQDG_DrawableObject_GetFontId(parent);
|
xo->fontId=AQDG_DrawableObject_GetFontId(parent);
|
||||||
xo->foregroundPenId=AQDG_DrawableObject_GetForegroundPenId(parent);
|
xo->foregroundPenId=AQDG_DrawableObject_GetForegroundPenId(parent);
|
||||||
@@ -69,6 +75,19 @@ GWENHYWFAR_CB void _freeData(void *bp, void *p)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AQDG_DRAW_CONTEXT *AQDG_DrawableObject_GetDrawContext(const AQDG_OBJECT *object)
|
||||||
|
{
|
||||||
|
if (object) {
|
||||||
|
AQDG_OBJECT_DRAWABLE *xo;
|
||||||
|
|
||||||
|
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
||||||
|
return xo?xo->drawContext:NULL;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object)
|
int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object)
|
||||||
{
|
{
|
||||||
if (object) {
|
if (object) {
|
||||||
@@ -88,8 +107,14 @@ void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i)
|
|||||||
AQDG_OBJECT_DRAWABLE *xo;
|
AQDG_OBJECT_DRAWABLE *xo;
|
||||||
|
|
||||||
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
||||||
if (xo)
|
if (xo) {
|
||||||
|
if (xo->fontId!=i) {
|
||||||
xo->fontId=i;
|
xo->fontId=i;
|
||||||
|
AQDG_Object_ModifyBranchFlagsUp(object,
|
||||||
|
AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW,
|
||||||
|
AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,12 +194,72 @@ void AQDG_DrawableObject_SetText(AQDG_OBJECT *object, const char *s)
|
|||||||
if (xo) {
|
if (xo) {
|
||||||
free(xo->text);
|
free(xo->text);
|
||||||
xo->text=s?strdup(s):NULL;
|
xo->text=s?strdup(s):NULL;
|
||||||
|
AQDG_Object_ModifyBranchFlagsUp(object,
|
||||||
|
AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW,
|
||||||
|
AQDG_OBJECT_FLAGS_LAYOUT | AQDG_OBJECT_FLAGS_DRAW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
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)
|
AQDG_OBJECT_DRAWABLE_DRAW_FN AQDG_DrawableObject_SetDrawFn(AQDG_OBJECT *object, AQDG_OBJECT_DRAWABLE_DRAW_FN fn)
|
||||||
{
|
{
|
||||||
if (object) {
|
if (object) {
|
||||||
@@ -195,21 +280,22 @@ AQDG_OBJECT_DRAWABLE_DRAW_FN AQDG_DrawableObject_SetDrawFn(AQDG_OBJECT *object,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int AQDG_DrawableObject_Draw(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
int AQDG_DrawableObject_Draw(AQDG_OBJECT *object)
|
||||||
{
|
{
|
||||||
if (object) {
|
if (object) {
|
||||||
AQDG_OBJECT_DRAWABLE *xo;
|
AQDG_OBJECT_DRAWABLE *xo;
|
||||||
|
|
||||||
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
||||||
if (xo && xo->drawFn)
|
if (xo && xo->drawFn)
|
||||||
return xo->drawFn(object, g);
|
return xo->drawFn(object);
|
||||||
}
|
}
|
||||||
|
AQDG_Object_SubFlags(object, AQDG_OBJECT_FLAGS_DRAW);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
int _drawFallback(AQDG_OBJECT *object)
|
||||||
{
|
{
|
||||||
AQDG_OBJECT_DRAWABLE *xo;
|
AQDG_OBJECT_DRAWABLE *xo;
|
||||||
|
|
||||||
@@ -217,7 +303,7 @@ int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
|||||||
if (xo) {
|
if (xo) {
|
||||||
AQDG_OBJECT *child;
|
AQDG_OBJECT *child;
|
||||||
|
|
||||||
AQDG_Draw_Context_DrawFilledRect(g,
|
AQDG_Draw_Context_DrawFilledRect(xo->drawContext,
|
||||||
xo->backgroundPenId,
|
xo->backgroundPenId,
|
||||||
AQDG_Object_GetAbsoluteX(object),
|
AQDG_Object_GetAbsoluteX(object),
|
||||||
AQDG_Object_GetAbsoluteY(object),
|
AQDG_Object_GetAbsoluteY(object),
|
||||||
@@ -225,9 +311,10 @@ int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
|||||||
AQDG_Object_GetHeight(object));
|
AQDG_Object_GetHeight(object));
|
||||||
child=AQDG_Object_Tree2_GetFirstChild(object);
|
child=AQDG_Object_Tree2_GetFirstChild(object);
|
||||||
while(child) {
|
while(child) {
|
||||||
AQDG_DrawableObject_Draw(child, g);
|
AQDG_DrawableObject_Draw(child);
|
||||||
child=AQDG_Object_Tree2_GetNext(child);
|
child=AQDG_Object_Tree2_GetNext(child);
|
||||||
}
|
}
|
||||||
|
AQDG_Object_SubFlags(object, AQDG_OBJECT_FLAGS_DRAW);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -235,6 +322,32 @@ int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,13 @@
|
|||||||
#include <aqdiagram/draw/context.h>
|
#include <aqdiagram/draw/context.h>
|
||||||
|
|
||||||
|
|
||||||
typedef int (*AQDG_OBJECT_DRAWABLE_DRAW_FN)(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g);
|
typedef int (*AQDG_OBJECT_DRAWABLE_DRAW_FN)(AQDG_OBJECT *object);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AQDG_API AQDG_OBJECT *AQDG_DrawableObject_new(AQDG_OBJECT *parent, uint32_t options);
|
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 int AQDG_DrawableObject_GetFontId(const AQDG_OBJECT *object);
|
||||||
AQDG_API void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i);
|
AQDG_API void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i);
|
||||||
@@ -33,10 +35,16 @@ AQDG_API void AQDG_DrawableObject_SetBackgroundPenId(AQDG_OBJECT *object, int i)
|
|||||||
AQDG_API const char *AQDG_DrawableObject_GetText(const AQDG_OBJECT *object);
|
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 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 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, AQDG_DRAW_CONTEXT *g);
|
AQDG_API int AQDG_DrawableObject_Draw(AQDG_OBJECT *object);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -14,11 +14,14 @@
|
|||||||
|
|
||||||
typedef struct AQDG_OBJECT_DRAWABLE AQDG_OBJECT_DRAWABLE;
|
typedef struct AQDG_OBJECT_DRAWABLE AQDG_OBJECT_DRAWABLE;
|
||||||
struct AQDG_OBJECT_DRAWABLE {
|
struct AQDG_OBJECT_DRAWABLE {
|
||||||
|
AQDG_DRAW_CONTEXT *drawContext;
|
||||||
int fontId;
|
int fontId;
|
||||||
int foregroundPenId;
|
int foregroundPenId;
|
||||||
int backgroundPenId;
|
int backgroundPenId;
|
||||||
|
|
||||||
char *text;
|
char *text;
|
||||||
|
int contentWidth;
|
||||||
|
int contentHeight;
|
||||||
|
|
||||||
AQDG_OBJECT_DRAWABLE_DRAW_FN drawFn;
|
AQDG_OBJECT_DRAWABLE_DRAW_FN drawFn;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user