52 lines
1.7 KiB
C
52 lines
1.7 KiB
C
#include "tui_internal.h"
|
|
|
|
void TextBlock_freeMembers(void* _self){
|
|
// TextBlock* self=(TextBlock*)_self;
|
|
// free(self->text.ptr);
|
|
}
|
|
|
|
UI_Maybe TextBlock_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea area){
|
|
TextBlock* self=(TextBlock*)_self;
|
|
UI_try(UIElement_validate((UIElement_Ptr)self, area),_0,;);
|
|
UI_try(Renderer_fill(renderer, TCI(TERMCHAR(' '), kp_bgBlack|kp_fgGray), area),_2,;);
|
|
UI_try(Renderer_drawBorder(renderer, self->base.border, area),_1,;);
|
|
for(u16 i=0; i<area.w-2 && i<self->text.length; i++){
|
|
u16 x=area.x+1+i;
|
|
u16 y=area.y+area.h/2;
|
|
UI_try(Renderer_set(renderer, TCI(self->text.ptr[i], kp_fgCyan), x, y), _2,;);
|
|
}
|
|
return MaybeNull;
|
|
}
|
|
|
|
UI_Maybe TextBlock_deserialize(Dtsod* dtsod){
|
|
TextBlock tb;
|
|
|
|
UI_try(UIElement_deserializeBase(dtsod, &tb.base), _8751, ;);
|
|
char* _text;
|
|
Dtsod_tryGet_cptr(dtsod, "text", _text, true);
|
|
tb.text=string_fromCptr(_text);
|
|
TextBlock* ptr=malloc(sizeof(*ptr));
|
|
|
|
*ptr=tb;
|
|
return SUCCESS(UniHeapPtr(TextBlock, ptr));
|
|
}
|
|
|
|
char* TextBlock_toString(void* _tb, kp_fmt fmt){
|
|
TextBlock* tb=_tb;
|
|
StringBuilder* sb=StringBuilder_create();
|
|
adds("TextBlock {")
|
|
UIElement_appendToStringBuilder(sb, &tb->base);
|
|
addstrf(tb,text)
|
|
adds(" }")
|
|
return StringBuilder_build(sb).ptr;
|
|
}
|
|
|
|
uit_define(TextBlock, TextBlock_freeMembers, TextBlock_toString, TextBlock_draw, TextBlock_deserialize, NULL);
|
|
|
|
TextBlock* TextBlock_create(char* name, string text){
|
|
TextBlock* textBlock=malloc(sizeof(TextBlock));
|
|
textBlock->base=_UIElement_initBaseDefault(name, &UITDescriptor_TextBlock);
|
|
textBlock->text=text;
|
|
return textBlock;
|
|
}
|