added default theme
This commit is contained in:
parent
8a5596b39d
commit
dadcf535d4
2 changed files with 48 additions and 75 deletions
|
@ -46,12 +46,14 @@ typedef enum GCheckboxShape_e {
|
|||
} GCheckboxShape;
|
||||
|
||||
typedef enum GCheckboxState_e {
|
||||
GCHBX_SET, GCHBX_UNSET
|
||||
GCHBX_UNCHECKED, GCHBX_CHECKED
|
||||
} GCheckboxState;
|
||||
|
||||
typedef struct GCheckboxDrawStyle_t {
|
||||
color_t color;
|
||||
} GCheckboxDrawStyle;
|
||||
typedef struct GCheckboxColor_t {
|
||||
color_t border;
|
||||
color_t checked;
|
||||
color_t bg;
|
||||
} GCheckboxColor;
|
||||
|
||||
/* custom rendering interface */
|
||||
typedef void (*GCheckboxDrawFunction)(GHandle gh, bool_t enabled, bool_t state, void* param);
|
||||
|
@ -62,8 +64,7 @@ typedef struct GCheckboxObject_t {
|
|||
GListener listener;
|
||||
|
||||
GCheckboxDrawFunction fn;
|
||||
GCheckboxDrawStyle set;
|
||||
GCheckboxDrawStyle unset;
|
||||
GCheckboxColor *colors;
|
||||
bool_t state;
|
||||
void *param;
|
||||
} GCheckboxObject;
|
||||
|
@ -122,7 +123,7 @@ void gwinCheckboxSetEnabled(GHandle gh, bool_t enabled);
|
|||
*
|
||||
* @param[in] gh The window handle (must be a checkbox window)
|
||||
*
|
||||
* @return The state of the checkbox (GCHBX_SET or GCHBX_UNSET)
|
||||
* @return The state of the checkbox (GCHBX_CHECKED or GCHBX_UNCHECKED)
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
|
@ -148,27 +149,7 @@ void gwinCheckboxSetEnabled(GHandle gh, bool_t enabled);
|
|||
* @api
|
||||
*/
|
||||
bool_t gwinCheckboxAttachMouse(GHandle gh, uint16_t instance);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Standard checkbox drawing routines
|
||||
* @details These routines are called to draw the standard checkbox styles.
|
||||
*
|
||||
* @param[in] gh The checkbox handle
|
||||
* @param[in] enabled Is the checkbox currently enabled or disabled
|
||||
* @param[in] state Is the checkbox currently set or unset
|
||||
* @param[in] param A parameter passed from the user
|
||||
*
|
||||
* @note In your custom checkbox drawing function, you may optionally call these
|
||||
* standard functions and then draw your extra details on top.
|
||||
* @note The standard functions below ignore the param parameter. It is there only
|
||||
* to ensure the functions match the GCheckboxDrawFunction type.
|
||||
*
|
||||
* @api
|
||||
* @{
|
||||
*/
|
||||
void gwinCheckboxDraw_Normal(GHandle gh, bool_t enabled, bool_t state, void *param);
|
||||
/** @} */
|
||||
#endif /* GFX_USE_GINPUT && GINPUT_NEED_MOUSE */
|
||||
|
||||
#endif /* _GWIN_NEED_CHECKBOX */
|
||||
|
||||
|
|
|
@ -19,13 +19,28 @@
|
|||
|
||||
#if (GFX_USE_GWIN && GWIN_NEED_CHECKBOX) || defined(__DOXYGEN__)
|
||||
|
||||
static const GCheckboxDrawStyle GCheckboxDefaultStyleSelected = {
|
||||
Green
|
||||
static const GCheckboxColor defaultColors = {
|
||||
Grey, // border
|
||||
Grey, // selected
|
||||
Black // background
|
||||
};
|
||||
|
||||
static const GCheckboxDrawStyle GCheckboxDefaultStyleUnselected = {
|
||||
Red
|
||||
};
|
||||
/* default style drawing routine */
|
||||
static void gwinCheckboxDrawDefaultStyle(GHandle gh, bool_t enabled, bool_t state, void* param) {
|
||||
#define gcw ((GCheckboxObject *)gh)
|
||||
|
||||
(void) enabled;
|
||||
(void) param;
|
||||
|
||||
gdispDrawBox(gh->x, gh->y, gh->width, gh->height, gcw->colors->border);
|
||||
|
||||
if (state)
|
||||
gdispFillArea(gh->x+2, gh->y+2, gh->width-4, gh->height-4, gcw->colors->checked);
|
||||
else
|
||||
gdispFillArea(gh->x+2, gh->y+2, gh->width-4, gh->height-4, gcw->colors->bg);
|
||||
|
||||
#undef gcw
|
||||
}
|
||||
|
||||
/* process an event callback */
|
||||
static void gwinCheckboxCallback(void *param, GEvent *pe) {
|
||||
|
@ -78,12 +93,13 @@ GHandle gwinCheckboxCreate(GCheckboxObject *gb, coord_t x, coord_t y, coord_t wi
|
|||
if (!(gb = (GCheckboxObject *)_gwinInit((GWindowObject *)gb, x, y, width, height, sizeof(GCheckboxObject))))
|
||||
return 0;
|
||||
|
||||
gb->gwin.type = GW_CHECKBOX;
|
||||
gb->fn = 0;
|
||||
gb->param = 0;
|
||||
gb->state = GCHBX_UNSET;
|
||||
gb->gwin.type = GW_CHECKBOX; // create a window of the type checkbox
|
||||
gb->fn = gwinCheckboxDrawDefaultStyle; // set the default style drawing routine
|
||||
gb->colors = &defaultColors; // asign the default colors
|
||||
gb->param = 0; // some safe value here
|
||||
gb->state = GCHBX_UNCHECKED; // checkbox is currently unchecked
|
||||
gb->gwin.enabled = TRUE; // checkboxes are enabled by default
|
||||
|
||||
gwinCheckboxSetStyle(&gb->gwin, GCHBX_NORMAL, &GCheckboxDefaultStyleSelected, &GCheckboxDefaultStyleUnselected);
|
||||
geventListenerInit(&gb->listener);
|
||||
geventRegisterCallback(&gb->listener, gwinCheckboxCallback, gb);
|
||||
|
||||
|
@ -93,33 +109,6 @@ GHandle gwinCheckboxCreate(GCheckboxObject *gb, coord_t x, coord_t y, coord_t wi
|
|||
return (GHandle)gb;
|
||||
}
|
||||
|
||||
void gwinCheckboxSetStyle(GHandle gh, GCheckboxShape shape, const GCheckboxDrawStyle *pSelected, const GCheckboxDrawStyle *pUnselected) {
|
||||
#define gcw ((GCheckboxObject *)gh)
|
||||
|
||||
if (gh->type != GW_CHECKBOX)
|
||||
return;
|
||||
|
||||
switch (shape) {
|
||||
case GCHBX_NORMAL:
|
||||
gcw->fn = gwinCheckboxDraw_Normal;
|
||||
break;
|
||||
|
||||
default:
|
||||
gcw->fn = gwinCheckboxDraw_Normal;
|
||||
break;
|
||||
}
|
||||
|
||||
if (pSelected) {
|
||||
gcw->set.color = pSelected->color;
|
||||
}
|
||||
|
||||
if (pUnselected) {
|
||||
gcw->unset.color = pSelected->color;
|
||||
}
|
||||
|
||||
#undef gcw
|
||||
}
|
||||
|
||||
void gwinCheckboxSetEnabled(GHandle gh, bool_t enabled) {
|
||||
if (gh->type != GW_CHECKBOX)
|
||||
return;
|
||||
|
@ -145,16 +134,6 @@ void gwinCheckboxDraw(GHandle gh) {
|
|||
#undef gcw
|
||||
}
|
||||
|
||||
void gwinCheckboxDraw_Normal(GHandle gh, bool_t enabled, bool_t state, void* param) {
|
||||
(void) enabled;
|
||||
(void) param;
|
||||
|
||||
if (state)
|
||||
gdispClear(Green);
|
||||
else
|
||||
gdispClear(Red);
|
||||
}
|
||||
|
||||
#if GFX_USE_GINPUT && GINPUT_NEED_MOUSE
|
||||
bool_t gwinCheckboxAttachMouse(GHandle gh, uint16_t instance) {
|
||||
GSourceHandle gsh;
|
||||
|
@ -166,6 +145,19 @@ void gwinCheckboxDraw_Normal(GHandle gh, bool_t enabled, bool_t state, void* par
|
|||
}
|
||||
#endif
|
||||
|
||||
void gwinCheckboxSetColors(GHandle gh, color_t border, color_t checked, color_t bg) {
|
||||
#define gcw ((GCheckboxObject *)gh)
|
||||
|
||||
if (gh->type != GW_CHECKBOX)
|
||||
return;
|
||||
|
||||
gcw->colors->border = border;
|
||||
gcw->colors->checked = checked,
|
||||
gcw->colors->bg = bg;
|
||||
|
||||
#undef gcw
|
||||
}
|
||||
|
||||
#endif /* (GFX_USE_GWIN && GWIN_NEED_CHECKBOX) */
|
||||
/** @} */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue