diff options
Diffstat (limited to 'src/gwin')
-rw-r--r-- | src/gwin/button.c | 20 | ||||
-rw-r--r-- | src/gwin/slider.c | 67 |
2 files changed, 60 insertions, 27 deletions
diff --git a/src/gwin/button.c b/src/gwin/button.c index bec738b4..74fe3080 100644 --- a/src/gwin/button.c +++ b/src/gwin/button.c @@ -68,7 +68,7 @@ static void gwinButtonCallback(void *param, GEvent *pe) { #define pbe ((GEventGWinButton *)pe) switch (pe->type) { - #if defined(GINPUT_NEED_MOUSE) && GINPUT_NEED_MOUSE + #if GFX_USE_GINPUT && GINPUT_NEED_MOUSE case GEVENT_MOUSE: case GEVENT_TOUCH: // Ignore anything other than the primary mouse button going up or down @@ -108,7 +108,7 @@ static void gwinButtonCallback(void *param, GEvent *pe) { #endif #endif - #if defined(GINPUT_NEED_TOGGLE) && GINPUT_NEED_TOGGLE + #if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE case GEVENT_TOGGLE: // State has changed - update the button gbw->state = pxe->on ? GBTN_DOWN : GBTN_UP; @@ -375,18 +375,22 @@ void gwinButtonDraw_Square(GHandle gh, bool_t isdown, const char *txt, const GBu } #endif -#if defined(GINPUT_NEED_MOUSE) && GINPUT_NEED_MOUSE - bool_t gwinAttachButtonMouseSource(GHandle gh, GSourceHandle gsh) { - if (gh->type != GW_BUTTON) +#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE + bool_t gwinAttachButtonMouse(GHandle gh, uint16_t instance) { + GSourceHandle gsh; + + if (gh->type != GW_BUTTON || !(gsh = ginputGetMouse(instance))) return FALSE; return geventAttachSource(&((GButtonObject *)gh)->listener, gsh, GLISTEN_MOUSEMETA); } #endif -#if defined(GINPUT_NEED_TOGGLE) && GINPUT_NEED_TOGGLE - bool_t gwinAttachButtonToggleSource(GHandle gh, GSourceHandle gsh) { - if (gh->type != GW_BUTTON) +#if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE + bool_t gwinAttachButtonToggle(GHandle gh, uint16_t instance) { + GSourceHandle gsh; + + if (gh->type != GW_BUTTON || !(gsh = ginputGetToggle(instance))) return FALSE; return geventAttachSource(&((GButtonObject *)gh)->listener, gsh, GLISTEN_TOGGLE_OFF|GLISTEN_TOGGLE_ON); diff --git a/src/gwin/slider.c b/src/gwin/slider.c index 034ba6b2..f535b35c 100644 --- a/src/gwin/slider.c +++ b/src/gwin/slider.c @@ -39,7 +39,9 @@ #define GWIN_SLIDER_DEAD_BAND 5 #endif -static void trackSliderDraw(GHandle gh, coord_t x, coord_t y); +#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE + static void trackSliderDraw(GHandle gh, coord_t x, coord_t y); +#endif static const GSliderDrawStyle GSliderDefaultStyle = { HTML2COLOR(0x404040), // color_edge; @@ -55,10 +57,11 @@ static void gwinSliderCallback(void *param, GEvent *pe) { #define gsw ((GSliderObject *)param) #define gsh ((GSourceHandle)param) #define pme ((GEventMouse *)pe) + #define pde ((GEventDial *)pe) #define pse ((GEventGWinSlider *)pe) switch (pe->type) { - #if defined(GINPUT_NEED_MOUSE) && GINPUT_NEED_MOUSE + #if GFX_USE_GINPUT && GINPUT_NEED_MOUSE case GEVENT_MOUSE: case GEVENT_TOUCH: // If not tracking we only only interested in a mouse down over the slider @@ -91,10 +94,10 @@ static void gwinSliderCallback(void *param, GEvent *pe) { // Set the new position if (gh->width < gh->height) gwinSetSliderPosition(gh, - (gh->height-1-pme->y+gh->y-GWIN_SLIDER_DEAD_BAND)*(gsw->max-gsw->min)/(gh->height-2*GWIN_SLIDER_DEAD_BAND) + gsw->min); + (uint16_t)((uint32_t)(gh->height-1-pme->y+gh->y-GWIN_SLIDER_DEAD_BAND)*(gsw->max-gsw->min)/(gh->height-2*GWIN_SLIDER_DEAD_BAND) + gsw->min)); else gwinSetSliderPosition(gh, - (pme->x-gh->x-GWIN_SLIDER_DEAD_BAND)*(gsw->max-gsw->min)/(gh->width-2*GWIN_SLIDER_DEAD_BAND) + gsw->min); + (uint16_t)((uint32_t)(pme->x-gh->x-GWIN_SLIDER_DEAD_BAND)*(gsw->max-gsw->min)/(gh->width-2*GWIN_SLIDER_DEAD_BAND) + gsw->min)); // Update the display gwinSliderDraw(gh); @@ -109,6 +112,17 @@ static void gwinSliderCallback(void *param, GEvent *pe) { return; #endif + #if GFX_USE_GINPUT && GINPUT_NEED_DIAL + case GEVENT_DIAL: + // Set the new position + gwinSetSliderPosition(gh, (uint16_t)((uint32_t)pde->value*(gsw->max-gsw->min)/ginputGetDialRange(pde->instance) + gsw->min)); + + // Update the display + gwinSliderDraw(gh); + + // Generate the event + break; + #endif default: return; @@ -194,20 +208,22 @@ void gwinSetSliderStyle(GHandle gh, const GSliderDrawStyle *pStyle) { #undef gsw } -static void trackSliderDraw(GHandle gh, coord_t x, coord_t y) { - #define gsw ((GSliderObject *)gh) +#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE + static void trackSliderDraw(GHandle gh, coord_t x, coord_t y) { + #define gsw ((GSliderObject *)gh) - #if GDISP_NEED_CLIP - gdispSetClip(gh->x, gh->y, gh->width, gh->height); - #endif - - if (gh->height <= gh->width) - gsw->fn(gh, FALSE, x, &gsw->style, gsw->param); - else - gsw->fn(gh, TRUE, y, &gsw->style, gsw->param); + #if GDISP_NEED_CLIP + gdispSetClip(gh->x, gh->y, gh->width, gh->height); + #endif - #undef gbw -} + if (gh->height <= gh->width) + gsw->fn(gh, FALSE, x, &gsw->style, gsw->param); + else + gsw->fn(gh, TRUE, y, &gsw->style, gsw->param); + + #undef gbw + } +#endif void gwinSliderDraw(GHandle gh) { #define gsw ((GSliderObject *)gh) @@ -267,15 +283,28 @@ void gwinSliderDraw_Std(GHandle gh, bool_t isVertical, coord_t thumbpos, const G } } -#if defined(GINPUT_NEED_MOUSE) && GINPUT_NEED_MOUSE - bool_t gwinAttachSliderMouseSource(GHandle gh, GSourceHandle gsh) { - if (gh->type != GW_SLIDER) +#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE + bool_t gwinAttachSliderMouse(GHandle gh, uint16_t instance) { + GSourceHandle gsh; + + if (gh->type != GW_SLIDER || !(gsh = ginputGetMouse(instance))) return FALSE; return geventAttachSource(&((GSliderObject *)gh)->listener, gsh, GLISTEN_MOUSEMETA|GLISTEN_MOUSEDOWNMOVES); } #endif +#if GFX_USE_GINPUT && GINPUT_NEED_DIAL + bool_t gwinAttachSliderDial(GHandle gh, uint16_t instance) { + GSourceHandle gsh; + + if (gh->type != GW_SLIDER || !(gsh = ginputGetDial(instance))) + return FALSE; + + return geventAttachSource(&((GSliderObject *)gh)->listener, gsh, 0); + } +#endif + #endif /* GFX_USE_GWIN && GWIN_NEED_BUTTON */ /** @} */ |