diff options
author | inmarket <andrewh@inmarket.com.au> | 2013-06-10 17:18:01 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2013-06-10 17:18:01 +1000 |
commit | 2cb35d6815a0a12035f4792c266b688c77085620 (patch) | |
tree | 292ebc4760767d67b41f7f0e0022185afcf05067 /src/gwin/checkbox.c | |
parent | 777ec6af7c1b594f7b7a9cbaaf7ead90d8fb7e8f (diff) | |
download | uGFX-2cb35d6815a0a12035f4792c266b688c77085620.tar.gz uGFX-2cb35d6815a0a12035f4792c266b688c77085620.tar.bz2 uGFX-2cb35d6815a0a12035f4792c266b688c77085620.zip |
Clean up GWIN Event assignment. Optimise event efficiency.
Diffstat (limited to 'src/gwin/checkbox.c')
-rw-r--r-- | src/gwin/checkbox.c | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/src/gwin/checkbox.c b/src/gwin/checkbox.c index 893dab9c..53e99e42 100644 --- a/src/gwin/checkbox.c +++ b/src/gwin/checkbox.c @@ -26,7 +26,9 @@ // Prototypes for button VMT functions static void MouseDown(GWidgetObject *gw, coord_t x, coord_t y); -static void ToggleOn(GWidgetObject *gw, uint16_t instance); +static void ToggleOn(GWidgetObject *gw, uint16_t role); +static void ToggleAssign(GWidgetObject *gw, uint16_t role, uint16_t instance); +static uint16_t ToggleGet(GWidgetObject *gw, uint16_t role); // The button VMT table static const gwidgetVMT checkboxVMT = { @@ -37,15 +39,24 @@ static const gwidgetVMT checkboxVMT = { 0, // The after-clear routine }, gwinCheckboxDraw_CheckOnLeft, // The default drawing routine - MouseDown, // Process mouse down events - 0, // Process mouse up events (NOT USED) - 0, // Process mouse move events (NOT USED) - 0, // Process toggle off events (NOT USED) - ToggleOn, // Process toggle on events - 0, // Process dial move events (NOT USED) - 0, // Process all events (NOT USED) - 0, // AssignToggle (NOT USED) - 0, // AssignDial (NOT USED) + { + MouseDown, // Process mouse down events + 0, // Process mouse up events (NOT USED) + 0, // Process mouse move events (NOT USED) + }, + { + 1, // 1 toggle role + ToggleAssign, // Assign Toggles + ToggleGet, // Get Toggles + 0, // Process toggle off events (NOT USED) + ToggleOn, // Process toggle on events + }, + { + 0, // No dial roles + 0, // Assign Dials (NOT USED) + 0, // Get Dials (NOT USED) + 0, // Process dial move events (NOT USED) + } }; static const GCheckboxColors defaultColors = { @@ -63,7 +74,7 @@ static void SendCheckboxEvent(GWidgetObject *gw) { // Trigger a GWIN Checkbox Event psl = 0; - while ((psl = geventGetSourceListener((GSourceHandle)gw, psl))) { + while ((psl = geventGetSourceListener(GWIDGET_SOURCE, psl))) { if (!(pe = geventGetEventBuffer(psl))) continue; pce->type = GEVENT_GWIN_CHECKBOX; @@ -84,17 +95,28 @@ static void MouseDown(GWidgetObject *gw, coord_t x, coord_t y) { } // A toggle on has occurred -static void ToggleOn(GWidgetObject *gw, uint16_t instance) { - (void) instance; +static void ToggleOn(GWidgetObject *gw, uint16_t role) { + (void) role; gw->g.flags ^= GCHECKBOX_FLG_CHECKED; _gwidgetRedraw((GHandle)gw); SendCheckboxEvent(gw); } +static void ToggleAssign(GWidgetObject *gw, uint16_t role, uint16_t instance) { + (void) role; + ((GCheckboxObject *)gw)->toggle = instance; +} + +static uint16_t ToggleGet(GWidgetObject *gw, uint16_t role) { + (void) role; + return ((GCheckboxObject *)gw)->toggle; +} + GHandle gwinCreateCheckbox(GCheckboxObject *gb, coord_t x, coord_t y, coord_t width, coord_t height) { - if (!(gb = (GCheckboxObject *)_gwidgetInit((GWidgetObject *)gb, x, y, width, height, sizeof(GCheckboxObject), &checkboxVMT))) + if (!(gb = (GCheckboxObject *)_gwidgetCreate((GWidgetObject *)gb, x, y, width, height, sizeof(GCheckboxObject), &checkboxVMT))) return 0; + gb->toggle = (uint16_t) -1; gb->c = defaultColors; // assign the default colors return (GHandle)gb; } |