diff --git a/include/gwin/label.h b/include/gwin/label.h index 3874026c..ed774ed7 100644 --- a/include/gwin/label.h +++ b/include/gwin/label.h @@ -19,7 +19,7 @@ * @pre GFX_USE_GWIN must be set to TRUE in your gfxconf.h * @pre GDISP_NEED_TEXT must be set to TRUE in your gfxconf.h * @pre GWIN_NEED_LABEL must be set to TRUE in your gfxconf.h - * @pre The font you want to use must be enabled in your gfxconf.h + * @pre The fonts you want to use must be enabled in your gfxconf.h * * @{ */ @@ -33,17 +33,29 @@ typedef struct GLabelWidget_t { GWindowObject g; - char* text; + const char* text; } GLabelWidget; #ifdef __cplusplus extern "C" { #endif +/** + * @brief Create a label widget. + * @details A label widget is a simple window which has a static text. + * + * @param[in] widget The label structure to initialise. If this is NULL, the structure is dynamically allocated. + * @param[in] pinit The initialisation parameters to use. + * + * @return NULL if there is no resultat drawing area, otherwise the widget handle. + * + * @api + */ GHandle gwinLabelCreate(GLabelWidget *widget, GWindowInit *pInit); void gwinLabelSetColor(GHandle gh, color_t color); void gwinLabelSetBgColor(GHandle gh, color_t bgColor); -void gwinLabelSetText(GHandle gh, char* text); +void gwinLabelSetFont(GHandle gh, font_t font); +void gwinLabelSetText(GHandle gh, const char* text); void gwinLabelDraw(GHandle gh); #ifdef __cplusplus diff --git a/src/gwin/label.c b/src/gwin/label.c index e31a3de6..8c892217 100644 --- a/src/gwin/label.c +++ b/src/gwin/label.c @@ -41,8 +41,25 @@ static void _afterClear(GWindowObject *gh) { return; } -GHandle gwinLabelCreate(GLabelWidget *widget, GWindowInit *pInit) { +static const gwinVMT labelVMT = { + "Label", // The class name + sizeof(GLabelWidget), // The object size + _destroy, // The destroy routine + 0, // The redraw routine + _afterClear // The after-clear routine +}; +GHandle gwinLabelCreate(GLabelWidget *widget, GWindowInit *pInit) { + if (!(widget = (GLabelWidget *)_gwindowCreate(&widget->g, pInit, &labelVMT, 0))) + return 0; + + widget->g.x = pInit->x; + widget->g.y = pInit->y; + widget->g.width = pInit->width; + widget->g.height = pInit->height; + gwinSetVisible((GHandle)widget, pInit->show); + + return (GHandle)widget; } void gwinLabelSetColor(GHandle gh, color_t color) { @@ -53,14 +70,24 @@ void gwinLabelSetBgColor(GHandle gh, color_t bgColor) { widget(gh)->g.bgcolor = bgColor; } -void gwinLabelSetText(GHandle gh, char* text) { +void gwinLabelSetFont(GHandle gh, font_t font) { + widget(gh)->g.font = font; +} + +void gwinLabelSetText(GHandle gh, const char* text) { widget(gh)->text = text; gwinLabelDraw(gh); } void gwinLabelDraw(GHandle gh) { - + gdispFillString( widget(gh)->g.x, + widget(gh)->g.y, + widget(gh)->text, + widget(gh)->g.font, + widget(gh)->g.color, + widget(gh)->g.bgcolor + ); } #endif // GFX_USE_GWIN && GFX_NEED_LABEL