aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2014-04-28 23:20:51 +0200
committerJoel Bodenmann <joel@unormal.org>2014-04-28 23:20:51 +0200
commit135f8f5ecac5bc04bc18438bf78fd7ba82c40816 (patch)
treefb9475415cd85fb4eee71b097c07838755bdffd3 /src
parent8b4ca720369d790ea330bc2189efa05cc557c2f7 (diff)
downloaduGFX-135f8f5ecac5bc04bc18438bf78fd7ba82c40816.tar.gz
uGFX-135f8f5ecac5bc04bc18438bf78fd7ba82c40816.tar.bz2
uGFX-135f8f5ecac5bc04bc18438bf78fd7ba82c40816.zip
Added gwinLabelSetAttribute()
Diffstat (limited to 'src')
-rw-r--r--src/gwin/label.c43
-rw-r--r--src/gwin/label.h28
2 files changed, 67 insertions, 4 deletions
diff --git a/src/gwin/label.c b/src/gwin/label.c
index a5064818..167ded84 100644
--- a/src/gwin/label.c
+++ b/src/gwin/label.c
@@ -23,6 +23,7 @@
// macros to assist in data type conversions
#define gh2obj ((GLabelObject *)gh)
+#define gw2obj ((GLabelObject *)gw)
// flags for the GLabelObject
#define GLABEL_FLG_WAUTO (GWIN_FIRST_CONTROL_FLAG << 0)
@@ -57,10 +58,26 @@ static void gwinLabelDefaultDraw(GWidgetObject *gw, void *param) {
return;
}
- // render the text
- gdispGFillStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width, gw->g.height, gw->text, gw->g.font,
- (gw->g.flags & GWIN_FLG_ENABLED) ? gw->pstyle->enabled.text : gw->pstyle->disabled.text, gw->pstyle->background,
- justifyLeft);
+ #if GWIN_LABEL_ATTRIBUTE
+ if (gw2obj->attr != 0) {
+ gdispGFillStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width, gw->g.height, gw2obj->attr, gw->g.font,
+ (gw->g.flags & GWIN_FLG_ENABLED) ? gw->pstyle->enabled.text : gw->pstyle->disabled.text, gw->pstyle->background,
+ justifyLeft);
+
+ gdispGFillStringBox(gw->g.display, gw->g.x + gw2obj->tab, gw->g.y, gw->g.width, gw->g.height, gw->text, gw->g.font,
+ (gw->g.flags & GWIN_FLG_ENABLED) ? gw->pstyle->enabled.text : gw->pstyle->disabled.text, gw->pstyle->background,
+ justifyLeft);
+ } else {
+ gdispGFillStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width, gw->g.height, gw->text, gw->g.font,
+ (gw->g.flags & GWIN_FLG_ENABLED) ? gw->pstyle->enabled.text : gw->pstyle->disabled.text, gw->pstyle->background,
+ justifyLeft);
+
+ }
+ #else
+ gdispGFillStringBox(gw->g.display, gw->g.x, gw->g.y, gw->g.width, gw->g.height, gw->text, gw->g.font,
+ (gw->g.flags & GWIN_FLG_ENABLED) ? gw->pstyle->enabled.text : gw->pstyle->disabled.text, gw->pstyle->background,
+ justifyLeft);
+ #endif
// render the border (if any)
if (gw->g.flags & GLABEL_FLG_BORDER)
@@ -124,6 +141,11 @@ GHandle gwinGLabelCreate(GDisplay *g, GLabelObject *widget, GWidgetInit *pInit)
// no borders by default
flags &=~ GLABEL_FLG_BORDER;
+ #if GWIN_LABEL_ATTRIBUTE
+ widget->tab = 0;
+ widget->attr = 0;
+ #endif
+
widget->w.g.flags |= flags;
gwinSetVisible(&widget->w.g, pInit->g.show);
@@ -141,6 +163,19 @@ void gwinLabelSetBorder(GHandle gh, bool_t border) {
gh2obj->w.g.flags &=~ GLABEL_FLG_BORDER;
}
+#if GWIN_LABEL_ATTRIBUTE
+ void gwinLabelSetAttribute(GHandle gh, coord_t tab, char* attr) {
+ // is it a valid handle?
+ if (gh->vmt != (gwinVMT *)&labelVMT)
+ return;
+
+ gh2obj->tab = tab;
+ gh2obj->attr = attr;
+
+ gwinRedraw(gh);
+ }
+#endif // GWIN_LABEL_ATTRIBUTE
+
#endif // GFX_USE_GWIN && GFX_NEED_LABEL
/** @} */
diff --git a/src/gwin/label.h b/src/gwin/label.h
index 9d62738d..5cf87ad1 100644
--- a/src/gwin/label.h
+++ b/src/gwin/label.h
@@ -32,6 +32,11 @@
// An label window
typedef struct GLabelObject {
GWidgetObject w;
+
+ #if GWIN_LABEL_ATTRIBUTE
+ coord_t tab;
+ char* attr;
+ #endif
} GLabelObject;
#ifdef __cplusplus
@@ -63,6 +68,29 @@ GHandle gwinGLabelCreate(GDisplay *g, GLabelObject *widget, GWidgetInit *pInit);
*/
void gwinLabelSetBorder(GHandle gh, bool_t border);
+#if GWIN_LABEL_ATTRIBUTE
+ /**
+ * @brief Add an attribute in front of the actualy label text
+ * @detail Often you want to display a text like this:
+ * Current IP: 192.168.1.42
+ * In that case, one the actual IP will be variable, the text in front of it
+ * always remains the same. The static text is called the attribute and can be
+ * set using this function.
+ * Furthermore, the tab can be set in order to vertically align multiple labels.
+ * Please check out the website for further explanation, illustraions and usage
+ * examples.
+ *
+ * @note The attribute text is currently not being allocated
+ *
+ * @param[in] gh The widget handle (must be a label handle)
+ * @param[in] tab The distance of the label text from the left widget edge
+ * @param[in] attr The attribute to be displayed
+ *
+ * @api
+ */
+ void gwinLabelSetAttribute(GHandle gh, coord_t tab, char* attr);
+#endif
+
#ifdef __cplusplus
}
#endif