From 22ecd9a95fc6fb3f40b6b409b35bc19d27e6ca45 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 14 Aug 2015 21:20:34 +0200 Subject: [PATCH] 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 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"); + } +} +