Implement a "Toggle Button" using a checkbox with a custom draw.
Updated the widgets demo to show this.
This commit is contained in:
parent
fa8167b94d
commit
b316263833
4 changed files with 52 additions and 3 deletions
|
@ -87,7 +87,7 @@ static GHandle ghConsole;
|
||||||
static GHandle ghPgButtons, ghPgSliders, ghPgCheckboxes, ghPgLabels, ghPgRadios, ghPgLists, ghPgImages, ghPgProgressbars;
|
static GHandle ghPgButtons, ghPgSliders, ghPgCheckboxes, ghPgLabels, ghPgRadios, ghPgLists, ghPgImages, ghPgProgressbars;
|
||||||
static GHandle ghButton1, ghButton2, ghButton3, ghButton4;
|
static GHandle ghButton1, ghButton2, ghButton3, ghButton4;
|
||||||
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
|
static GHandle ghSlider1, ghSlider2, ghSlider3, ghSlider4;
|
||||||
static GHandle ghCheckbox1, ghCheckbox2, ghCheckDisableAll;
|
static GHandle ghCheckbox1, ghCheckbox2, ghCheckbox3, ghCheckDisableAll;
|
||||||
static GHandle ghLabelSlider1, ghLabelSlider2, ghLabelSlider3, ghLabelSlider4, ghLabelRadio1;
|
static GHandle ghLabelSlider1, ghLabelSlider2, ghLabelSlider3, ghLabelSlider4, ghLabelRadio1;
|
||||||
static GHandle ghRadio1, ghRadio2;
|
static GHandle ghRadio1, ghRadio2;
|
||||||
static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
|
static GHandle ghRadioBlack, ghRadioWhite, ghRadioYellow;
|
||||||
|
@ -303,7 +303,7 @@ static void createWidgets(void) {
|
||||||
ghSlider4 = gwinSliderCreate(0, &wi);
|
ghSlider4 = gwinSliderCreate(0, &wi);
|
||||||
gwinSliderSetPosition(ghSlider4, 76);
|
gwinSliderSetPosition(ghSlider4, 76);
|
||||||
|
|
||||||
// Checkboxes - for the 2nd checkbox we apply special drawing before making it visible
|
// Checkboxes - for the 2nd and 3rd checkbox we apply special drawing before making it visible
|
||||||
wi.g.parent = ghPgCheckboxes;
|
wi.g.parent = ghPgCheckboxes;
|
||||||
wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 5;
|
wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 5;
|
||||||
wi.g.y = 5; wi.text = "C1";
|
wi.g.y = 5; wi.text = "C1";
|
||||||
|
@ -311,8 +311,11 @@ static void createWidgets(void) {
|
||||||
wi.customDraw = gwinCheckboxDraw_CheckOnRight;
|
wi.customDraw = gwinCheckboxDraw_CheckOnRight;
|
||||||
wi.g.y += wi.g.height+1; wi.text = "C2";
|
wi.g.y += wi.g.height+1; wi.text = "C2";
|
||||||
ghCheckbox2 = gwinCheckboxCreate(0, &wi);
|
ghCheckbox2 = gwinCheckboxCreate(0, &wi);
|
||||||
wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH;
|
wi.customDraw = gwinCheckboxDraw_Button;
|
||||||
|
wi.g.y += wi.g.height+1; wi.text = "C3"; wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT;
|
||||||
|
ghCheckbox3 = gwinCheckboxCreate(0, &wi);
|
||||||
wi.g.y += wi.g.height+1; wi.text = "Disable All";
|
wi.g.y += wi.g.height+1; wi.text = "Disable All";
|
||||||
|
wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH; wi.g.height = CHECKBOX_HEIGHT;
|
||||||
ghCheckDisableAll = gwinCheckboxCreate(0, &wi);
|
ghCheckDisableAll = gwinCheckboxCreate(0, &wi);
|
||||||
|
|
||||||
// Labels
|
// Labels
|
||||||
|
@ -478,6 +481,7 @@ static void setEnabled(bool_t ena) {
|
||||||
// Checkboxes we need to do individually so we don't disable the checkbox to re-enable everything
|
// Checkboxes we need to do individually so we don't disable the checkbox to re-enable everything
|
||||||
gwinSetEnabled(ghCheckbox1, ena);
|
gwinSetEnabled(ghCheckbox1, ena);
|
||||||
gwinSetEnabled(ghCheckbox2, ena);
|
gwinSetEnabled(ghCheckbox2, ena);
|
||||||
|
gwinSetEnabled(ghCheckbox3, ena);
|
||||||
//gwinSetEnabled(ghCheckDisableAll, TRUE);
|
//gwinSetEnabled(ghCheckDisableAll, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ FEATURE: New Tabset GWIN widget
|
||||||
FEATURE: New keyboard driver interface with drivers for Win32 and X
|
FEATURE: New keyboard driver interface with drivers for Win32 and X
|
||||||
FEATURE: Support for keyboard layouts for non-english keyboards
|
FEATURE: Support for keyboard layouts for non-english keyboards
|
||||||
FEATURE: GDISP now supports pixmaps (in memory drawing)
|
FEATURE: GDISP now supports pixmaps (in memory drawing)
|
||||||
|
FEATURE: Rename files to improve experience in certain brain-dead IDE's
|
||||||
|
FEATURE: Add a checkbox "Toggle Button" custom draw
|
||||||
|
FEATURE: Add Tetris as an application demo.
|
||||||
|
|
||||||
|
|
||||||
*** Release 2.2 ***
|
*** Release 2.2 ***
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
|
|
||||||
#include "gwin_class.h"
|
#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
|
// Our checked state
|
||||||
#define GCHECKBOX_FLG_CHECKED (GWIN_FIRST_CONTROL_FLAG<<0)
|
#define GCHECKBOX_FLG_CHECKED (GWIN_FIRST_CONTROL_FLAG<<0)
|
||||||
|
|
||||||
|
@ -204,4 +208,41 @@ void gwinCheckboxDraw_CheckOnRight(GWidgetObject *gw, void *param) {
|
||||||
#undef gcw
|
#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) */
|
#endif /* (GFX_USE_GWIN && GWIN_NEED_CHECKBOX) */
|
||||||
|
|
|
@ -116,6 +116,7 @@ bool_t gwinCheckboxIsChecked(GHandle gh);
|
||||||
*/
|
*/
|
||||||
void gwinCheckboxDraw_CheckOnLeft(GWidgetObject *gw, void *param);
|
void gwinCheckboxDraw_CheckOnLeft(GWidgetObject *gw, void *param);
|
||||||
void gwinCheckboxDraw_CheckOnRight(GWidgetObject *gw, void *param);
|
void gwinCheckboxDraw_CheckOnRight(GWidgetObject *gw, void *param);
|
||||||
|
void gwinCheckboxDraw_Button(GWidgetObject *gw, void *param);
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
Loading…
Add table
Reference in a new issue