more work on drawable object.
This commit is contained in:
@@ -20,7 +20,9 @@
|
||||
|
||||
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_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);
|
||||
|
||||
AQDG_Object_SetOptions(object, options);
|
||||
xo->drawContext=drawContext;
|
||||
xo->drawFn=_drawFallback;
|
||||
|
||||
AQDG_Object_SetGetDefaultWidthFn(object, _getDefaultWidth);
|
||||
AQDG_Object_SetGetDefaultHeightFn(object, _getDefaultHeight);
|
||||
|
||||
if (parent && GWEN_INHERIT_ISOFTYPE(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, parent)) {
|
||||
xo->fontId=AQDG_DrawableObject_GetFontId(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)
|
||||
{
|
||||
if (object) {
|
||||
@@ -88,8 +107,14 @@ void AQDG_DrawableObject_SetFontId(AQDG_OBJECT *object, int i)
|
||||
AQDG_OBJECT_DRAWABLE *xo;
|
||||
|
||||
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
||||
if (xo)
|
||||
xo->fontId=i;
|
||||
if (xo) {
|
||||
if (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) {
|
||||
free(xo->text);
|
||||
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)
|
||||
{
|
||||
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) {
|
||||
AQDG_OBJECT_DRAWABLE *xo;
|
||||
|
||||
xo=GWEN_INHERIT_GETDATA(AQDG_OBJECT, AQDG_OBJECT_DRAWABLE, object);
|
||||
if (xo && xo->drawFn)
|
||||
return xo->drawFn(object, g);
|
||||
return xo->drawFn(object);
|
||||
}
|
||||
AQDG_Object_SubFlags(object, AQDG_OBJECT_FLAGS_DRAW);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
||||
int _drawFallback(AQDG_OBJECT *object)
|
||||
{
|
||||
AQDG_OBJECT_DRAWABLE *xo;
|
||||
|
||||
@@ -217,7 +303,7 @@ int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
||||
if (xo) {
|
||||
AQDG_OBJECT *child;
|
||||
|
||||
AQDG_Draw_Context_DrawFilledRect(g,
|
||||
AQDG_Draw_Context_DrawFilledRect(xo->drawContext,
|
||||
xo->backgroundPenId,
|
||||
AQDG_Object_GetAbsoluteX(object),
|
||||
AQDG_Object_GetAbsoluteY(object),
|
||||
@@ -225,9 +311,10 @@ int _drawFallback(AQDG_OBJECT *object, AQDG_DRAW_CONTEXT *g)
|
||||
AQDG_Object_GetHeight(object));
|
||||
child=AQDG_Object_Tree2_GetFirstChild(object);
|
||||
while(child) {
|
||||
AQDG_DrawableObject_Draw(child, g);
|
||||
AQDG_DrawableObject_Draw(child);
|
||||
child=AQDG_Object_Tree2_GetNext(child);
|
||||
}
|
||||
AQDG_Object_SubFlags(object, AQDG_OBJECT_FLAGS_DRAW);
|
||||
return 1;
|
||||
}
|
||||
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>
|
||||
|
||||
|
||||
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 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 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, AQDG_DRAW_CONTEXT *g);
|
||||
AQDG_API int AQDG_DrawableObject_Draw(AQDG_OBJECT *object);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,11 +14,14 @@
|
||||
|
||||
typedef struct AQDG_OBJECT_DRAWABLE AQDG_OBJECT_DRAWABLE;
|
||||
struct AQDG_OBJECT_DRAWABLE {
|
||||
AQDG_DRAW_CONTEXT *drawContext;
|
||||
int fontId;
|
||||
int foregroundPenId;
|
||||
int backgroundPenId;
|
||||
|
||||
char *text;
|
||||
int contentWidth;
|
||||
int contentHeight;
|
||||
|
||||
AQDG_OBJECT_DRAWABLE_DRAW_FN drawFn;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user