From 47acf3cadd8099b36e9e7a8ba6788cb9b70bc3ad Mon Sep 17 00:00:00 2001 From: Marrub Date: Tue, 18 Oct 2016 13:59:02 -0400 Subject: [PATCH] Control, Context, LinkList, et al: Restructuring LinkList: Rename Lth_LinkList* functions to Lth_List* LinkList: Split Lth_LinkListInsert LinkList: Add Lth_ListLinkTail Control: Make controls associated with a context and font Context: Fix mapped windows with unspecified position being placed wrong Context: Fix mapped windows being added backwards Draw: Fix rectangles being drawn wrong --- acs/lithos3.bin | Bin 123952 -> 206776 bytes lithos_c/inc/Lth_callback.h | 7 +++-- lithos_c/inc/Lth_context.h | 8 ++++-- lithos_c/inc/Lth_control.h | 24 ++++++++++------- lithos_c/inc/Lth_linklist.h | 51 ++++++++++++++++++++++++++++++------ lithos_c/src/button.c | 10 ++++--- lithos_c/src/context.c | 44 ++++++++++++++++++++----------- lithos_c/src/control.c | 28 ++++++++++++++------ lithos_c/src/draw.c | 2 +- lithos_c/src/window.c | 18 ++++++++----- 10 files changed, 134 insertions(+), 58 deletions(-) diff --git a/acs/lithos3.bin b/acs/lithos3.bin index 622604c25faeef3e1ce7d745ef1e53534830fffd..a29a35767737c623d277b5a3f76c6182176f65d4 100644 GIT binary patch literal 206776 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 literal 123952 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 diff --git a/lithos_c/inc/Lth_callback.h b/lithos_c/inc/Lth_callback.h index b821be9..3ebb20b 100644 --- a/lithos_c/inc/Lth_callback.h +++ b/lithos_c/inc/Lth_callback.h @@ -21,9 +21,9 @@ Lth_X(SIGDESTROY, destroy, void, struct Lth_Control *) Lth_X(SIGCLICK , click, void, struct Lth_Control *) -Lth_X(SIGDRAW , draw, void, struct Lth_Context *, struct Lth_Control *) -Lth_X(SIGPSTDRAW, postdraw, void, struct Lth_Context *, struct Lth_Control *) -Lth_X(SIGUPDATE , update, void, struct Lth_Context *, struct Lth_Control *) +Lth_X(SIGDRAW , draw, void, struct Lth_Control *) +Lth_X(SIGPSTDRAW, postdraw, void, struct Lth_Control *) +Lth_X(SIGUPDATE , update, void, struct Lth_Control *) #undef Lth_X @@ -58,7 +58,6 @@ Lth_X(SIGUPDATE , update, void, struct Lth_Context *, struct Lth_Control *) // Type Definitions | // -struct Lth_Context; struct Lth_Control; typedef void (*Lth_Callback_t)(void); diff --git a/lithos_c/inc/Lth_context.h b/lithos_c/inc/Lth_context.h index 42dd2bd..d375060 100644 --- a/lithos_c/inc/Lth_context.h +++ b/lithos_c/inc/Lth_context.h @@ -23,6 +23,7 @@ // // internal data // clip +// lastmap // map // // read-only @@ -30,16 +31,19 @@ // h: height of screen // // read-write -// hid: HUD ID range +// hid: HUD ID range +// mapspace: space between newly mapped windows that are auto-positioned // typedef struct Lth_Context { struct { Lth_Rect rects[16]; int num; } clip; - Lth_LinkList *map; + struct { int x, y; } lastmap; + struct { Lth_LinkList *head, *tail; } map; int w, h; Lth_HIDRange hid; + struct { int x, y; } mapspace; } Lth_Context; diff --git a/lithos_c/inc/Lth_control.h b/lithos_c/inc/Lth_control.h index b2be290..b77ead3 100644 --- a/lithos_c/inc/Lth_control.h +++ b/lithos_c/inc/Lth_control.h @@ -17,6 +17,7 @@ #include "Lth_linklist.h" #include "Lth_types.h" #include "Lth_context.h" +#include "Lth_font.h" //----------------------------------------------------------------------------| @@ -29,7 +30,7 @@ // Has members of Lth_Rect (read-write). // // internal data -// desclink +// link // descendants // cb // @@ -37,19 +38,22 @@ // parent: control's parent (NULL if none) // // read-write -// userdata: opaque pointer to associate with this control +// userdata: opaque pointer for the user to use +// font: default font for drawing +// ctx: pointer to associated context // // typedef struct Lth_Control { Lth_CallbackSet cb; - Lth_LinkList desclink; - Lth_LinkList *descendants; + Lth_LinkList link; + Lth_LinkList *descendants; struct Lth_Control *parent; - int lx, ly; - void *userdata; + void *userdata; + Lth_Font *font; + Lth_Context *ctx; Lth_Mixin(Lth_Rect); } Lth_Control; @@ -58,8 +62,8 @@ typedef struct Lth_Control // Lth_LayoutControl // // read-only -// lx: layout x -// ly: layout y +// lx: layout x +// ly: layout y // typedef struct Lth_LayoutControl { @@ -72,8 +76,10 @@ typedef struct Lth_LayoutControl // Extern Functions | // -void Lth_ControlRun(Lth_Context *ctx, void *ctrl_); +Lth_Font *Lth_ControlFont(void *ctrl_); +void Lth_ControlRun(void *ctrl_); void Lth_ControlConnect(void *ctrl_, Lth_Signal signal, Lth_Callback_t cb); void Lth_ControlDestroy(void *ctrl_); +void Lth_ControlAttach(void *ctrlsrc_, void *ctrldst_); #endif//lithos3__Lth_control_h diff --git a/lithos_c/inc/Lth_linklist.h b/lithos_c/inc/Lth_linklist.h index f3bc420..d4f3c18 100644 --- a/lithos_c/inc/Lth_linklist.h +++ b/lithos_c/inc/Lth_linklist.h @@ -24,6 +24,24 @@ for(Lth_LinkList *list = (lst); list;) \ __with(Lth_LinkList *next = list->next, **prev = list->prev; \ tmpv = list->owner;) +#define Lth_ListInsert(list, object, head) \ + (void) \ + ( \ + Lth_ListLink((list), (head)), \ + (list)->owner = object \ + ) +#define Lth_ListInsertTail(list, object, head, tail) \ + (void) \ + ( \ + Lth_ListLinkTail((list), (head), (tail)), \ + (list)->owner = object \ + ) +#define Lth_ListMove(list, head) \ + (void) \ + ( \ + Lth_ListRemove((list)), \ + Lth_ListLink((list), (head)) \ + ) //----------------------------------------------------------------------------| @@ -45,14 +63,12 @@ typedef struct Lth_LinkList // // -// Lth_LinkListInsert +// Lth_ListLink // -static inline void Lth_LinkListInsert(Lth_LinkList *list, void *object, - Lth_LinkList **head) +static inline void Lth_ListLink(Lth_LinkList *list, Lth_LinkList **head) { Lth_assert(list != NULL); Lth_assert(head != NULL); - Lth_assert(*head != NULL); Lth_LinkList *next = *head; @@ -61,14 +77,33 @@ static inline void Lth_LinkListInsert(Lth_LinkList *list, void *object, list->prev = head; *head = list; - - list->owner = object; } // -// Lth_LinkListRemove +// Lth_ListLinkTail // -static inline void Lth_LinkListRemove(Lth_LinkList *list) +static inline void Lth_ListLinkTail(Lth_LinkList *list, Lth_LinkList **head, + Lth_LinkList **tail) +{ + Lth_assert(list != NULL); + Lth_assert(head != NULL); + Lth_assert(tail != NULL); + + Lth_LinkList *prev = *tail; + + if(*(list->prev = head)) + list->prev = &prev->next; + else + *head = list; + + prev->next = list; + *tail = list; +} + +// +// Lth_ListRemove +// +static inline void Lth_ListRemove(Lth_LinkList *list) { Lth_assert(list != NULL); diff --git a/lithos_c/src/button.c b/lithos_c/src/button.c index a8fc59e..0712870 100644 --- a/lithos_c/src/button.c +++ b/lithos_c/src/button.c @@ -22,13 +22,15 @@ // // Lth_ButtonDraw // -static void Lth_ButtonDraw(Lth_Context *ctx, Lth_Button *ctrl) +static void Lth_ButtonDraw(Lth_Button *ctrl) { ACS_SetFont(s"CONFONT"); + ACS_BeginPrint(); Lth_PrintString(ctrl->label); - Lth_HudMessagePlain(ctx->hid.cur--, ctrl->x - 8 + Lth_A_Lef, - ctrl->y - 8 + Lth_A_Top); - Lth_DrawRect(ctx, ctrl->x, ctrl->y, ctrl->w, ctrl->h, 0.5k); + Lth_HudMessagePlain(ctrl->ctx->hid.cur--, + ctrl->x - 8 + Lth_A_Cen, + ctrl->y - 8 + Lth_A_Cen); + Lth_DrawRect(ctrl->ctx, ctrl->x, ctrl->y, ctrl->w, ctrl->h, 0.5k); } // diff --git a/lithos_c/src/context.c b/lithos_c/src/context.c index 13b996b..366c0b7 100644 --- a/lithos_c/src/context.c +++ b/lithos_c/src/context.c @@ -31,12 +31,28 @@ Lth_Context *Lth_ContextNew(int w, int h, Lth_HID hidBase, Lth_HID hidEnd) ctx->w = w; ctx->h = h; + ctx->lastmap.x = ctx->lastmap.y = -1; ctx->hid.cur = ctx->hid.base = hidBase; ctx->hid.end = hidEnd; + ctx->mapspace.x = 24; + ctx->mapspace.y = 16; return ctx; } +// +// Lth_ContextSetup +// +void Lth_ContextSetup(Lth_Context *ctx, void *ctrl_) +{ + Lth_Control *ctrl = ctrl_; + + Lth_ListForEach(Lth_Control *owner, ctrl->descendants) + Lth_ContextSetup(ctx, owner); + + ctrl->ctx = ctx; +} + // // Lth_ContextMap // @@ -45,16 +61,14 @@ void Lth_ContextMap(Lth_Context *ctx, Lth_Window *ctrl) Lth_assert(ctx != NULL); Lth_assert(ctrl != NULL); - if(ctrl->x == -1) ctrl->x = ctx->w / 2; - if(ctrl->y == -1) ctrl->y = ctx->h / 2; + if(ctrl->x == -1) ctrl->x = ctx->lastmap.x += 16; + else ctx->lastmap.x = ctrl->x; - if(ctx->map) - Lth_LinkListInsert(&ctrl->desclink, ctrl, &ctx->map); - else - { - ctx->map = &ctrl->desclink; - ctx->map->owner = ctrl; - } + if(ctrl->y == -1) ctrl->y = ctx->lastmap.y += 16; + else ctx->lastmap.y = ctrl->y; + + Lth_ContextSetup(ctx, ctrl); + Lth_ListInsertTail(&ctrl->link, ctrl, &ctx->map.head, &ctx->map.tail); } // @@ -65,11 +79,11 @@ void Lth_ContextDestroy(Lth_Context *ctx) if(ctx == NULL) return; - if(ctx->map) + if(ctx->map.head) { - Lth_ListFor(Lth_Control *owner, ctx->map) + Lth_ListFor(Lth_Control *owner, ctx->map.head) { - Lth_LinkListRemove(list); + Lth_ListRemove(list); if(owner) Lth_ControlDestroy(owner); list = next; } @@ -88,9 +102,9 @@ void Lth_ContextRun(Lth_Context *ctx) ACS_SetHudSize(ctx->w, ctx->h, true); ctx->hid.cur = ctx->hid.base; - if(ctx->map) - Lth_ListForEach(Lth_Control *owner, ctx->map) - Lth_ControlRun(ctx, owner); + if(ctx->map.head) + Lth_ListForEach(Lth_Control *owner, ctx->map.head) + Lth_ControlRun(owner); } // diff --git a/lithos_c/src/control.c b/lithos_c/src/control.c index f18f524..8ddaada 100644 --- a/lithos_c/src/control.c +++ b/lithos_c/src/control.c @@ -24,16 +24,16 @@ // // Lth_ControlRun // -void Lth_ControlRun(Lth_Context *ctx, void *ctrl_) +void Lth_ControlRun(void *ctrl_) { - Lth_assert(ctx != NULL); - Lth_assert(ctrl_ != NULL); - Lth_Control *ctrl = ctrl_; - Lth_ControlCall(ctrl, update, ctx, ctrl); - Lth_ControlCall(ctrl, draw, ctx, ctrl); - Lth_ControlCall(ctrl, postdraw, ctx, ctrl); + Lth_assert(ctrl != NULL); + Lth_assert(ctrl->ctx != NULL); + + Lth_ControlCall(ctrl, update, ctrl); + Lth_ControlCall(ctrl, draw, ctrl); + Lth_ControlCall(ctrl, postdraw, ctrl); } // @@ -75,7 +75,7 @@ void Lth_ControlDestroy(void *ctrl_) } Lth_CallReverse(ctrl->cb.destroy, ctrl); - Lth_LinkListRemove(&ctrl->desclink); + Lth_ListRemove(&ctrl->link); #define Lth_X(sig, name, ret, ...) \ free(ctrl->cb.name.data); @@ -84,5 +84,17 @@ void Lth_ControlDestroy(void *ctrl_) free(ctrl); } +// +// Lth_ControlAttach +// +void Lth_ControlAttach(void *ctrlsrc_, void *ctrldst_) +{ + Lth_assert(ctrlsrc_ != NULL); + Lth_assert(ctrldst_ != NULL); + + Lth_Control *ctrlsrc = ctrlsrc_, *ctrldst = ctrldst_; + Lth_ListInsert(&ctrlsrc->link, ctrlsrc, &ctrldst->descendants); + ctrlsrc->ctx = ctrldst->ctx; +} // EOF diff --git a/lithos_c/src/draw.c b/lithos_c/src/draw.c index bd73333..1ec315b 100644 --- a/lithos_c/src/draw.c +++ b/lithos_c/src/draw.c @@ -30,7 +30,7 @@ void Lth_DrawRectAndClip(Lth_Context *ctx, int x, int y, int w, int h, for(int ix = 0; ix < w; ix += 128) for(int iy = 0; iy < h; iy += 128) Lth_DrawSpriteAlpha(s"lithos_gfx/Base/Black128.png", ctx->hid.cur--, - x + ix, y + iy, alpha); + x + ix + Lth_A_Lef, y + iy + Lth_A_Top, alpha); } // diff --git a/lithos_c/src/window.c b/lithos_c/src/window.c index bf779ce..fb463f3 100644 --- a/lithos_c/src/window.c +++ b/lithos_c/src/window.c @@ -22,21 +22,25 @@ // // Lth_WindowDraw // -static void Lth_WindowDraw(Lth_Context *ctx, Lth_Window *ctrl) +static void Lth_WindowDraw(Lth_Window *ctrl) { - ACS_SetFont(s"CONFONT"); + Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y - 8, ctrl->w, 8, 0.35k); + ACS_SetFont(s"SMALLFNT"); + ACS_BeginPrint(); Lth_PrintString(ctrl->title); - Lth_HudMessagePlain(ctx->hid.cur--, ctrl->x - 8 + Lth_A_Lef, + Lth_HudMessagePlain(ctrl->ctx->hid.cur--, + ctrl->x + Lth_A_Lef, ctrl->y - 8 + Lth_A_Top); - Lth_DrawRectAndClip(ctx, ctrl->x, ctrl->y, ctrl->w, ctrl->h, 0.5k); + Lth_ContextClipPop(ctrl->ctx); + Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y, ctrl->w, ctrl->h, 0.5k); } // // Lth_WindowPostDraw // -static void Lth_WindowPostDraw(Lth_Context *ctx, Lth_Window *ctrl) +static void Lth_WindowPostDraw(Lth_Window *ctrl) { - Lth_ContextClipPop(ctx); + Lth_ContextClipPop(ctrl->ctx); } // @@ -67,7 +71,7 @@ Lth_Window *Lth_WindowNew(char const *title, int w, int h, int x, int y) ctrl->y = y; Lth_WindowSetTitle(ctrl, title); - Lth_ControlConnect(ctrl, Lth_SIGDRAW, Lth_Callback(Lth_WindowDraw)); + Lth_ControlConnect(ctrl, Lth_SIGDRAW, Lth_Callback(Lth_WindowDraw)); Lth_ControlConnect(ctrl, Lth_SIGPSTDRAW, Lth_Callback(Lth_WindowPostDraw)); Lth_ControlConnect(ctrl, Lth_SIGDESTROY, Lth_Callback(Lth_WindowDestroy));