aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@seriouslyembedded.com>2015-08-13 10:36:56 +0200
committerJoel Bodenmann <joel@seriouslyembedded.com>2015-08-13 10:36:56 +0200
commite7e4f813e1dcbc608d54e30183ccee0a036e7eb8 (patch)
tree924be44c76d2f9f33b32c2e087e9157231732ed3
parent3ba3be201cddf3c6a4606f49028fc6640da0b28e (diff)
downloaduGFX-e7e4f813e1dcbc608d54e30183ccee0a036e7eb8.tar.gz
uGFX-e7e4f813e1dcbc608d54e30183ccee0a036e7eb8.tar.bz2
uGFX-e7e4f813e1dcbc608d54e30183ccee0a036e7eb8.zip
Adding gwinIsWidget()
-rw-r--r--src/gwin/gwin_widget.c44
-rw-r--r--src/gwin/gwin_widget.h11
2 files changed, 47 insertions, 8 deletions
diff --git a/src/gwin/gwin_widget.c b/src/gwin/gwin_widget.c
index 09cc91d8..da816cb5 100644
--- a/src/gwin/gwin_widget.c
+++ b/src/gwin/gwin_widget.c
@@ -21,9 +21,6 @@
// Our listener for events for widgets
static GListener gl;
-// The widget that is currently in focus. May be NULL.
-static GHandle widgetInFocus;
-
// Our default style - a white background theme
const GWidgetStyle WhiteWidgetStyle = {
HTML2COLOR(0xFFFFFF), // window background
@@ -101,7 +98,7 @@ static void gwidgetEvent(void *param, GEvent *pe) {
uint16_t role;
#endif
(void) param;
-
+//static GHandle widgetInFocus = 0;
// Process various events
switch (pe->type) {
@@ -127,6 +124,7 @@ static void gwidgetEvent(void *param, GEvent *pe) {
// There is only ever one captured mouse. Prevent normal mouse processing if there is a captured mouse
gh = 0;
+
break;
}
@@ -150,14 +148,35 @@ static void gwidgetEvent(void *param, GEvent *pe) {
case GEVENT_KEYBOARD:
// If Tab key pressed then set focus to next widget
if (pke->bytecount == 1 && pke->c[0] == GKEY_TAB) {
- widgetInFocus = gwinGetNextWindow(widgetInFocus);
+ GHandle nextWidgetInFocus = 0;
+ bool_t loopCompleted = FALSE;
+ do {
+ nextWidgetInFocus = gwinGetNextWindow(gwinGetFocus());
+ printf("0x%X\r\n", nextWidgetInFocus);
+ // We only look out for widgets
+ if (!gwinIsWidget(nextWidgetInFocus)) {
+ continue;
+ }
+
+ if (nextWidgetInFocus == 0) {
+ loopCompleted = TRUE;
+ // Restart with the first widget
+ nextWidgetInFocus = gwinGetNextWindow(gwinGetFocus());
+ }
+ } while (nextWidgetInFocus == 0 && loopCompleted == FALSE);
+ printf("0x%X\r\n", nextWidgetInFocus);
+ gwinSetFocus(nextWidgetInFocus);
+
+ /*
// If it was the last widget begin with the first one again
if (widgetInFocus == 0) {
widgetInFocus = gwinGetNextWindow(0);
}
+ */
+ //printf("Got now: %s\n", gwinGetClassName(gwinGetFocus()));
break;
}
-
+/*
// Otherise, send keyboard events only to widget in focus
if (widgetInFocus != 0) {
// Make sure that it is a widget
@@ -178,6 +197,7 @@ static void gwidgetEvent(void *param, GEvent *pe) {
// If we got this far we can finally pass the event
((gwidgetVMT*)widgetInFocus->vmt)->KeyboardEvent((GWidgetObject*)widgetInFocus, pke);
}
+*/
#endif
#if GFX_USE_GINPUT && GINPUT_NEED_TOGGLE
@@ -270,8 +290,6 @@ static void gwidgetEvent(void *param, GEvent *pe) {
void _gwidgetInit(void)
{
- widgetInFocus = 0;
-
geventListenerInit(&gl);
geventRegisterCallback(&gl, gwidgetEvent, 0);
geventAttachSource(&gl, ginputGetMouse(GMOUSE_ALL_INSTANCES), GLISTEN_MOUSEMETA|GLISTEN_MOUSEDOWNMOVES);
@@ -444,12 +462,22 @@ const char *gwinGetText(GHandle gh) {
return gw->text;
}
+bool_t gwinIsWidget(GHandle gh) {
+ if (gh->flags & GWIN_FLG_WIDGET) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
void gwinSetStyle(GHandle gh, const GWidgetStyle *pstyle) {
if (!(gh->flags & GWIN_FLG_WIDGET))
return;
+
gw->pstyle = pstyle ? pstyle : defaultStyle;
gh->bgcolor = pstyle->background;
gh->color = pstyle->enabled.text;
+
_gwinUpdate(gh);
}
diff --git a/src/gwin/gwin_widget.h b/src/gwin/gwin_widget.h
index 1e97cdd2..d7b88b70 100644
--- a/src/gwin/gwin_widget.h
+++ b/src/gwin/gwin_widget.h
@@ -228,6 +228,17 @@ void gwinSetText(GHandle gh, const char *text, bool_t useAlloc);
*/
const char *gwinGetText(GHandle gh);
+/**
+ * @brief Check whether a handles is a widget handle or not
+ *
+ * @param[in] gh The handle to check.
+ *
+ * @return TRUE if the passed handle is a widget handle. FALSE otherwise.
+ *
+ * @api
+ */
+bool_t gwinIsWidget(GHandle gh);
+
#if GWIN_WIDGET_TAGS || defined(__DOXYGEN__)
/**
* @brief Set the tag of a widget.