aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2015-01-23 17:57:13 +1000
committerinmarket <andrewh@inmarket.com.au>2015-01-23 17:57:13 +1000
commitb316263833c95cf2b8cf14fe890321d5880aa81c (patch)
tree45ed1a3919a4bf05d4de4786aba476bd6a25aec8 /src
parentfa8167b94d13e94a6cb953e7f549a89f155f77c6 (diff)
downloaduGFX-b316263833c95cf2b8cf14fe890321d5880aa81c.tar.gz
uGFX-b316263833c95cf2b8cf14fe890321d5880aa81c.tar.bz2
uGFX-b316263833c95cf2b8cf14fe890321d5880aa81c.zip
Implement a "Toggle Button" using a checkbox with a custom draw.
Updated the widgets demo to show this.
Diffstat (limited to 'src')
-rw-r--r--src/gwin/gwin_checkbox.c41
-rw-r--r--src/gwin/gwin_checkbox.h1
2 files changed, 42 insertions, 0 deletions
diff --git a/src/gwin/gwin_checkbox.c b/src/gwin/gwin_checkbox.c
index 72d8dbdf..ff0507d9 100644
--- a/src/gwin/gwin_checkbox.c
+++ b/src/gwin/gwin_checkbox.c
@@ -16,6 +16,10 @@
#include "gwin_class.h"
+// Parameters for button custom draw
+#define TOP_FADE 50 // (TOP_FADE/255)% fade to white for top of button
+#define BOTTOM_FADE 25 // (BOTTOM_FADE/255)% fade to black for bottom of button
+
// Our checked state
#define GCHECKBOX_FLG_CHECKED (GWIN_FIRST_CONTROL_FLAG<<0)
@@ -204,4 +208,41 @@ void gwinCheckboxDraw_CheckOnRight(GWidgetObject *gw, void *param) {
#undef gcw
}
+#if GWIN_FLAT_STYLING
+ void gwinCheckboxDraw_Button(GWidgetObject *gw, void *param) {
+ const GColorSet * pcol;
+ (void) param;
+
+ if (gw->g.vmt != (gwinVMT *)&checkboxVMT) return;
+ pcol = getDrawColors(gw);
+
+ gdispGFillStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width-1, gw->g.height-1, gw->text, gw->g.font, pcol->text, pcol->fill, justifyCenter);
+ gdispGDrawLine(gw->g.display, gw->g.x+gw->g.width-1, gw->g.y, gw->g.x+gw->g.width-1, gw->g.y+gw->g.height-1, pcol->edge);
+ gdispGDrawLine(gw->g.display, gw->g.x, gw->g.y+gw->g.height-1, gw->g.x+gw->g.width-2, gw->g.y+gw->g.height-1, pcol->edge);
+ }
+#else
+ void gwinCheckboxDraw_Button(GWidgetObject *gw, void *param) {
+ const GColorSet * pcol;
+ fixed alpha;
+ fixed dalpha;
+ coord_t i;
+ color_t tcol, bcol;
+ (void) param;
+
+ if (gw->g.vmt != (gwinVMT *)&checkboxVMT) return;
+ pcol = getDrawColors(gw);
+
+ /* Fill the box blended from variants of the fill color */
+ tcol = gdispBlendColor(White, pcol->fill, TOP_FADE);
+ bcol = gdispBlendColor(Black, pcol->fill, BOTTOM_FADE);
+ dalpha = FIXED(255)/gw->g.height;
+ for(alpha = 0, i = 0; i < gw->g.height; i++, alpha += dalpha)
+ gdispGDrawLine(gw->g.display, gw->g.x, gw->g.y+i, gw->g.x+gw->g.width-2, gw->g.y+i, gdispBlendColor(bcol, tcol, NONFIXED(alpha)));
+
+ gdispGDrawStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width-1, gw->g.height-1, gw->text, gw->g.font, pcol->text, justifyCenter);
+ gdispGDrawLine(gw->g.display, gw->g.x+gw->g.width-1, gw->g.y, gw->g.x+gw->g.width-1, gw->g.y+gw->g.height-1, pcol->edge);
+ gdispGDrawLine(gw->g.display, gw->g.x, gw->g.y+gw->g.height-1, gw->g.x+gw->g.width-2, gw->g.y+gw->g.height-1, pcol->edge);
+ }
+#endif
+
#endif /* (GFX_USE_GWIN && GWIN_NEED_CHECKBOX) */
diff --git a/src/gwin/gwin_checkbox.h b/src/gwin/gwin_checkbox.h
index 3a67d487..f0a8e9f0 100644
--- a/src/gwin/gwin_checkbox.h
+++ b/src/gwin/gwin_checkbox.h
@@ -116,6 +116,7 @@ bool_t gwinCheckboxIsChecked(GHandle gh);
*/
void gwinCheckboxDraw_CheckOnLeft(GWidgetObject *gw, void *param);
void gwinCheckboxDraw_CheckOnRight(GWidgetObject *gw, void *param);
+void gwinCheckboxDraw_Button(GWidgetObject *gw, void *param);
/** @} */
#ifdef __cplusplus