| @@ -34,6 +34,8 @@ typedef enum { | |||
| ST_COLUMN = 4, | |||
| // row | |||
| ST_ROW = 5, | |||
| // check button | |||
| ST_CHECK = 6, | |||
| } SubType; | |||
| typedef struct { | |||
| @@ -46,6 +48,12 @@ typedef struct { | |||
| const char *label; | |||
| } UIButtonData; | |||
| typedef struct { | |||
| UIData head; | |||
| const char *label; | |||
| int *option; | |||
| } UICheckData; | |||
| typedef struct { | |||
| UIData head; | |||
| int iconid; | |||
| @@ -125,6 +133,14 @@ void drawUI(NVGcontext *vg, int item, int x, int y) { | |||
| cornerFlags(item),(BNDwidgetState)uiGetState(item), | |||
| data->iconid,data->label); | |||
| } break; | |||
| case ST_CHECK: { | |||
| const UICheckData *data = (UICheckData*)head; | |||
| BNDwidgetState state = (BNDwidgetState)uiGetState(item); | |||
| if (*data->option) | |||
| state = BND_ACTIVE; | |||
| bndOptionButton(vg,rect.x,rect.y,rect.w,rect.h, state, | |||
| data->label); | |||
| } break; | |||
| case ST_RADIO:{ | |||
| const UIRadioData *data = (UIRadioData*)head; | |||
| BNDwidgetState state = (BNDwidgetState)uiGetState(item); | |||
| @@ -191,6 +207,30 @@ int button(int parent, UIhandle handle, int iconid, const char *label, | |||
| return item; | |||
| } | |||
| void checkhandler(int item, UIevent event) { | |||
| const UICheckData *data = (const UICheckData *)uiGetData(item); | |||
| *data->option = !(*data->option); | |||
| } | |||
| int check(int parent, UIhandle handle, const char *label, int *option) { | |||
| // create new ui item | |||
| int item = uiItem(); | |||
| // set persistent handle for item that is used | |||
| // to track activity over time | |||
| uiSetHandle(item, handle); | |||
| // set size of wiget; horizontal size is dynamic, vertical is fixed | |||
| uiSetSize(item, 0, BND_WIDGET_HEIGHT); | |||
| // attach event handler e.g. demohandler above | |||
| uiSetHandler(item, checkhandler, UI_BUTTON0_DOWN); | |||
| // store some custom data with the button that we use for styling | |||
| UICheckData *data = (UICheckData *)uiAllocData(item, sizeof(UICheckData)); | |||
| data->head.subtype = ST_CHECK; | |||
| data->label = label; | |||
| data->option = option; | |||
| uiAppend(parent, item); | |||
| return item; | |||
| } | |||
| // simple logic for a slider | |||
| // starting offset of the currently active slider | |||
| @@ -569,6 +609,12 @@ void draw(NVGcontext *vg, float w, float h) { | |||
| button(col, 11, BND_ICONID(6,3), "Item 5", NULL); | |||
| static int option1,option2,option3; | |||
| check(col, 12, "Item 6", &option1); | |||
| check(col, 13, "Item 7", &option2); | |||
| check(col, 14, "Item 8", &option3); | |||
| uiProcess(); | |||