#include "xte.h" #include "builtins.h" #include "blocktype.h" static int my_w = -1; static int my_h; static int x_sum; static int x_out; static char priv_dummy; static BLOCKDIMS size(void) { XCharStruct cs_in; XCharStruct cs_sum; XCharStruct cs_out; if (my_w < 0) { XTextExtents(font,"In",2,XTE_JUNK,&cs_in); XTextExtents(font,"Sum",3,XTE_JUNK,&cs_sum); XTextExtents(font,"Out",3,XTE_JUNK,&cs_out); x_sum = cs_in.width + (2 * font_space); x_out = x_sum + cs_sum.width + font_space; my_w = cs_in.width + cs_sum.width + cs_out.width + (4 * font_space); my_h = 3 * font_baselineskip; } return((BLOCKDIMS){.w=my_w,.h=my_h}); } static void setup(void (*cont)(void *, void *), void *arg) { (*cont)(&priv_dummy,arg); } static void destroy(void *pv __attribute__((__unused__))) { } static void render(void *pv __attribute__((__unused__)), Drawable d, GC gc_bg, GC gc_fg) { int y; XFillRectangle(disp,d,gc_bg,0,0,my_w,my_h); XDrawLine(disp,d,gc_fg,0,0,my_w-2,0); XDrawLine(disp,d,gc_fg,my_w-1,0,my_w-1,my_h-2); XDrawLine(disp,d,gc_fg,my_w-1,my_h-1,1,my_h-1); XDrawLine(disp,d,gc_fg,0,my_h-1,0,1); y = font_baseline + font_baselineskip; XDrawString(disp,d,gc_fg,x_sum,y,"Sum",3); XDrawString(disp,d,gc_fg,x_out,y,"Out",3); y = font_baseline + (font_baselineskip / 2); XDrawString(disp,d,gc_fg,font_space,y,"In",2); XDrawString(disp,d,gc_fg,font_space,y+font_baselineskip,"In",2); } static const char *ins[] = { "In1", "In2" }; static const char *outs[] = { "Out" }; BLOCKTYPE block_sum = { .name = "Sum", .n_in = 2, .ins = &ins[0], .n_out = 1, .outs = &outs[0], .n_param = 0, .params = 0, .compute_size = &size, .setup = &setup, .destroy = &destroy, .render = &render };