From 22ecd9a95fc6fb3f40b6b409b35bc19d27e6ca45 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 14 Aug 2015 21:20:34 +0200 Subject: Adding TextEdit demo --- demos/modules/gwin/textedit/demo.mk | 3 + demos/modules/gwin/textedit/gfxconf.h | 67 ++++++++++++++++ demos/modules/gwin/textedit/main.c | 143 ++++++++++++++++++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 demos/modules/gwin/textedit/demo.mk create mode 100644 demos/modules/gwin/textedit/gfxconf.h create mode 100644 demos/modules/gwin/textedit/main.c (limited to 'demos/modules') diff --git a/demos/modules/gwin/textedit/demo.mk b/demos/modules/gwin/textedit/demo.mk new file mode 100644 index 00000000..2cd40fd3 --- /dev/null +++ b/demos/modules/gwin/textedit/demo.mk @@ -0,0 +1,3 @@ +DEMODIR = $(GFXLIB)/demos/modules/gwin/textedit +GFXINC += $(DEMODIR) +GFXSRC += $(DEMODIR)/main.c diff --git a/demos/modules/gwin/textedit/gfxconf.h b/demos/modules/gwin/textedit/gfxconf.h new file mode 100644 index 00000000..4e518774 --- /dev/null +++ b/demos/modules/gwin/textedit/gfxconf.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu + * Copyright (c) 2012, 2013, Andrew Hannam aka inmarket + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* The operating system to use. One of these must be defined - preferably in your Makefile */ +//#define GFX_USE_OS_CHIBIOS FALSE +//#define GFX_USE_OS_WIN32 FALSE +//#define GFX_USE_OS_LINUX FALSE +//#define GFX_USE_OS_OSX FALSE + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP TRUE +#define GFX_USE_GWIN TRUE +#define GFX_USE_GINPUT TRUE +#define GFX_USE_GEVENT TRUE +#define GFX_USE_GTIMER TRUE + +/* Features for the GDISP sub-system. */ +#define GDISP_NEED_VALIDATION TRUE +#define GDISP_NEED_CLIP TRUE +#define GDISP_NEED_TEXT TRUE +#define GDISP_NEED_TEXT_KERNING TRUE +#define GDISP_NEED_STARTUP_LOGO TRUE + +/* GDISP fonts to include */ +#define GDISP_INCLUDE_FONT_UI2 TRUE +#define GDISP_INCLUDE_FONT_DEJAVUSANS16 TRUE + +/* Features for the GWIN subsystem. */ +#define GWIN_NEED_CONSOLE TRUE +#define GWIN_NEED_TEXTEDIT TRUE +#define GWIN_NEED_BUTTON TRUE + +/* Features for the GINPUT subsystem. */ +#define GINPUT_NEED_MOUSE TRUE +#define GINPUT_NEED_KEYBOARD TRUE + +#endif /* _GFXCONF_H */ + diff --git a/demos/modules/gwin/textedit/main.c b/demos/modules/gwin/textedit/main.c new file mode 100644 index 00000000..950475b5 --- /dev/null +++ b/demos/modules/gwin/textedit/main.c @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu + * Copyright (c) 2012, 2013, Andrew Hannam aka inmarket + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gfx.h" + +static GHandle ghConsole; +static GHandle ghTextedit1; +static GHandle ghTextedit2; +static GHandle ghTextedit3; +static GListener gl; + +static void guiCreate() +{ + GWidgetInit wi; + gwinWidgetClearInit(&wi); + + // Console + wi.g.show = TRUE; + wi.g.x = 0; + wi.g.y = 0; + wi.g.width = gdispGetWidth()/2; + wi.g.height = gdispGetHeight(); + ghConsole = gwinConsoleCreate(0, &wi.g); + gwinSetColor(ghConsole, Yellow); + gwinSetBgColor(ghConsole, Black); + gwinSetFont(ghConsole, gdispOpenFont("UI2")); + gwinClear(ghConsole); + + // TextEdit1 + wi.g.show = TRUE; + wi.g.x = gdispGetWidth()/2 + 10; + wi.g.y = 20; + wi.g.width = 200; + wi.g.height = 35; + wi.text = "Use the TAB key"; + ghTextedit1 = gwinTexteditCreate(0, &wi, 100); + + // TextEdit2 + wi.g.show = TRUE; + wi.g.x = gdispGetWidth()/2 + 10; + wi.g.y = 100; + wi.g.width = 200; + wi.g.height = 35; + wi.text = "to switch between"; + ghTextedit2 = gwinTexteditCreate(0, &wi, 20); + gwinTexteditSetBorder(ghTextedit2, FALSE); + + // TextEdit3 + wi.g.show = TRUE; + wi.g.x = gdispGetWidth()/2 + 10; + wi.g.y = 180; + wi.g.width = 200; + wi.g.height = 35; + wi.text = "the different widgets"; + ghTextedit3 = gwinTexteditCreate(0, &wi, 100); + gwinTexteditSetBorder(ghTextedit3, TRUE); +} + +int main(void) { + GEventKeyboard* pk; + unsigned i; + + gfxInit(); + + gdispClear(Silver); + gwinSetDefaultFont(gdispOpenFont("DejaVuSans16")); + gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE); + gwinSetDefaultColor(Black); + gwinSetDefaultBgColor(White); + + geventListenerInit(&gl); + geventAttachSource(&gl, ginputGetKeyboard(0), GLISTEN_KEYTRANSITIONS|GLISTEN_KEYUP); + + guiCreate(); + + gwinPrintf(ghConsole, "Keyboard Monitor...\n"); + + while(1) { + // Get an Event + pk = (GEventKeyboard *)geventEventWait(&gl, TIME_INFINITE); + + if (pk->type != GEVENT_KEYBOARD) + continue; + + gwinPrintf(ghConsole, "KEYSTATE: 0x%04X [ %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s]", + pk->keystate, + (!pk->keystate ? "NONE " : ""), + ((pk->keystate & GKEYSTATE_KEYUP) ? "KEYUP " : ""), + ((pk->keystate & GKEYSTATE_REPEAT) ? "REPEAT " : ""), + ((pk->keystate & GKEYSTATE_SPECIAL) ? "SPECIAL " : ""), + ((pk->keystate & GKEYSTATE_RAW) ? "RAW " : ""), + ((pk->keystate & GKEYSTATE_SHIFT_L) ? "LSHIFT " : ""), + ((pk->keystate & GKEYSTATE_SHIFT_R) ? "RSHIFT " : ""), + ((pk->keystate & GKEYSTATE_CTRL_L) ? "LCTRL " : ""), + ((pk->keystate & GKEYSTATE_CTRL_R) ? "RCTRL " : ""), + ((pk->keystate & GKEYSTATE_ALT_L) ? "LALT " : ""), + ((pk->keystate & GKEYSTATE_ALT_R) ? "RALT " : ""), + ((pk->keystate & GKEYSTATE_FN) ? "FN " : ""), + ((pk->keystate & GKEYSTATE_COMPOSE) ? "COMPOSE " : ""), + ((pk->keystate & GKEYSTATE_WINKEY) ? "WINKEY " : ""), + ((pk->keystate & GKEYSTATE_CAPSLOCK) ? "CAPSLOCK " : ""), + ((pk->keystate & GKEYSTATE_NUMLOCK) ? "NUMLOCK " : ""), + ((pk->keystate & GKEYSTATE_SCROLLLOCK) ? "SCROLLLOCK " : "") + ); + if (pk->bytecount) { + gwinPrintf(ghConsole, " Keys:"); + for (i = 0; i < pk->bytecount; i++) + gwinPrintf(ghConsole, " 0x%02X", (uint8_t)pk->c[i]); + gwinPrintf(ghConsole, " ["); + for (i = 0; i < pk->bytecount; i++) + gwinPrintf(ghConsole, "%c", pk->c[i] >= ' ' && pk->c[i] <= '~' ? pk->c[i] : ' '); + gwinPrintf(ghConsole, "]"); + } + gwinPrintf(ghConsole, "\n"); + } +} + -- cgit v1.2.3 From 15e7342fd7b21b76a565561a3caafee394e70c88 Mon Sep 17 00:00:00 2001 From: inmarket Date: Sun, 16 Aug 2015 21:53:47 +1000 Subject: Updates to focus. --- demos/modules/gwin/textedit/gfxconf.h | 8 +++++++- demos/modules/gwin/widgets/main.c | 7 ++++--- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'demos/modules') diff --git a/demos/modules/gwin/textedit/gfxconf.h b/demos/modules/gwin/textedit/gfxconf.h index 4e518774..3c5d7b96 100644 --- a/demos/modules/gwin/textedit/gfxconf.h +++ b/demos/modules/gwin/textedit/gfxconf.h @@ -48,13 +48,15 @@ #define GDISP_NEED_CLIP TRUE #define GDISP_NEED_TEXT TRUE #define GDISP_NEED_TEXT_KERNING TRUE -#define GDISP_NEED_STARTUP_LOGO TRUE +#define GDISP_NEED_MULTITHREAD TRUE /* GDISP fonts to include */ #define GDISP_INCLUDE_FONT_UI2 TRUE #define GDISP_INCLUDE_FONT_DEJAVUSANS16 TRUE /* Features for the GWIN subsystem. */ +#define GWIN_NEED_WINDOWMANAGER TRUE +#define GWIN_NEED_WIDGET TRUE #define GWIN_NEED_CONSOLE TRUE #define GWIN_NEED_TEXTEDIT TRUE #define GWIN_NEED_BUTTON TRUE @@ -63,5 +65,9 @@ #define GINPUT_NEED_MOUSE TRUE #define GINPUT_NEED_KEYBOARD TRUE +/* Features for the GQUEUE subsystem. */ +#define GFX_USE_GQUEUE TRUE +#define GQUEUE_NEED_ASYNC TRUE + #endif /* _GFXCONF_H */ diff --git a/demos/modules/gwin/widgets/main.c b/demos/modules/gwin/widgets/main.c index d5bfb6d2..8f5a6329 100644 --- a/demos/modules/gwin/widgets/main.c +++ b/demos/modules/gwin/widgets/main.c @@ -49,13 +49,14 @@ /* Our custom yellow style */ static const GWidgetStyle YellowWidgetStyle = { Yellow, // window background + HTML2COLOR(0x800000), // focus // enabled color set { HTML2COLOR(0x0000FF), // text HTML2COLOR(0x404040), // edge HTML2COLOR(0xE0E0E0), // fill - HTML2COLOR(0xE0E0E0), // progress - inactive area + HTML2COLOR(0xE0E0E0) // progress - inactive area }, // disabled color set @@ -63,7 +64,7 @@ static const GWidgetStyle YellowWidgetStyle = { HTML2COLOR(0xC0C0C0), // text HTML2COLOR(0x808080), // edge HTML2COLOR(0xE0E0E0), // fill - HTML2COLOR(0xC0E0C0), // progress - active area + HTML2COLOR(0xC0E0C0) // progress - active area }, // pressed color set @@ -72,7 +73,7 @@ static const GWidgetStyle YellowWidgetStyle = { HTML2COLOR(0x404040), // edge HTML2COLOR(0x808080), // fill HTML2COLOR(0x00E000), // progress - active area - }, + } }; /* The variables we need */ -- cgit v1.2.3 From af76c04767f3e5d1cc6f39ba907a7d4afdb43200 Mon Sep 17 00:00:00 2001 From: inmarket Date: Sun, 16 Aug 2015 22:05:32 +1000 Subject: Compile fixes --- demos/modules/gwin/textedit/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'demos/modules') diff --git a/demos/modules/gwin/textedit/main.c b/demos/modules/gwin/textedit/main.c index 950475b5..ed52ccb2 100644 --- a/demos/modules/gwin/textedit/main.c +++ b/demos/modules/gwin/textedit/main.c @@ -35,7 +35,7 @@ static GHandle ghTextedit2; static GHandle ghTextedit3; static GListener gl; -static void guiCreate() +static void guiCreate(void) { GWidgetInit wi; gwinWidgetClearInit(&wi); @@ -69,7 +69,7 @@ static void guiCreate() wi.g.height = 35; wi.text = "to switch between"; ghTextedit2 = gwinTexteditCreate(0, &wi, 20); - gwinTexteditSetBorder(ghTextedit2, FALSE); + //gwinTexteditSetBorder(ghTextedit2, FALSE); // TextEdit3 wi.g.show = TRUE; @@ -79,7 +79,7 @@ static void guiCreate() wi.g.height = 35; wi.text = "the different widgets"; ghTextedit3 = gwinTexteditCreate(0, &wi, 100); - gwinTexteditSetBorder(ghTextedit3, TRUE); + //gwinTexteditSetBorder(ghTextedit3, TRUE); } int main(void) { -- cgit v1.2.3 From 3fea02324831eba1773f45b1dc6d0bf2a0c8326d Mon Sep 17 00:00:00 2001 From: inmarket Date: Mon, 17 Aug 2015 00:18:54 +1000 Subject: Add some keyboard widget support --- demos/modules/gwin/textedit/gfxconf.h | 3 +++ demos/modules/gwin/textedit/main.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+) (limited to 'demos/modules') diff --git a/demos/modules/gwin/textedit/gfxconf.h b/demos/modules/gwin/textedit/gfxconf.h index 3c5d7b96..4faaae82 100644 --- a/demos/modules/gwin/textedit/gfxconf.h +++ b/demos/modules/gwin/textedit/gfxconf.h @@ -63,7 +63,10 @@ /* Features for the GINPUT subsystem. */ #define GINPUT_NEED_MOUSE TRUE + +/* One or both of these */ #define GINPUT_NEED_KEYBOARD TRUE +#define GWIN_NEED_KEYBOARD TRUE /* Features for the GQUEUE subsystem. */ #define GFX_USE_GQUEUE TRUE diff --git a/demos/modules/gwin/textedit/main.c b/demos/modules/gwin/textedit/main.c index ed52ccb2..4072f983 100644 --- a/demos/modules/gwin/textedit/main.c +++ b/demos/modules/gwin/textedit/main.c @@ -34,6 +34,9 @@ static GHandle ghTextedit1; static GHandle ghTextedit2; static GHandle ghTextedit3; static GListener gl; +#if GWIN_NEED_KEYBOARD + static GHandle ghKeyboard; +#endif static void guiCreate(void) { @@ -80,6 +83,17 @@ static void guiCreate(void) wi.text = "the different widgets"; ghTextedit3 = gwinTexteditCreate(0, &wi, 100); //gwinTexteditSetBorder(ghTextedit3, TRUE); + + // Virtual keyboard +#if GWIN_NEED_KEYBOARD + wi.g.show = TRUE; + wi.g.x = 0; + wi.g.y = gdispGetHeight()*3/4; + wi.g.width = gdispGetWidth(); + wi.g.height = gdispGetHeight()/4; + ghKeyboard = gwinKeyboardCreate(0, &wi); +#endif + } int main(void) { -- cgit v1.2.3