aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/gwin/label.h18
-rw-r--r--src/gwin/label.c31
2 files changed, 44 insertions, 5 deletions
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;
}
+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