diff options
Diffstat (limited to 'demos/modules')
| -rw-r--r-- | demos/modules/ginput/touch_driver_test/gfxconf.h (renamed from demos/modules/ginput_touch_driver_test/gfxconf.h) | 94 | ||||
| -rw-r--r-- | demos/modules/ginput/touch_driver_test/main.c (renamed from demos/modules/ginput_touch_driver_test/main.c) | 698 | ||||
| -rw-r--r-- | demos/modules/gwin/basic/gfxconf.h (renamed from demos/modules/window/gfxconf.h) | 66 | ||||
| -rw-r--r-- | demos/modules/gwin/basic/main.c (renamed from demos/modules/window/main.c) | 134 | ||||
| -rw-r--r-- | demos/modules/gwin/console/gfxconf.h (renamed from demos/modules/console/gfxconf.h) | 86 | ||||
| -rw-r--r-- | demos/modules/gwin/console/main.c (renamed from demos/modules/console/main.c) | 174 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/gfxconf.h | 57 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/main.c | 89 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/result_647x490.png | bin | 0 -> 24141 bytes | 
9 files changed, 772 insertions, 626 deletions
| diff --git a/demos/modules/ginput_touch_driver_test/gfxconf.h b/demos/modules/ginput/touch_driver_test/gfxconf.h index 05f685dd..e00aaedb 100644 --- a/demos/modules/ginput_touch_driver_test/gfxconf.h +++ b/demos/modules/ginput/touch_driver_test/gfxconf.h @@ -1,47 +1,47 @@ -/**
 - * This file has a different license to the rest of the GFX system.
 - * You can copy, modify and distribute this file as you see fit.
 - * You do not need to publish your source modifications to this file.
 - * The only thing you are not permitted to do is to relicense it
 - * under a different license.
 - */
 -
 -#ifndef _GFXCONF_H
 -#define _GFXCONF_H
 -
 -/* GFX sub-systems to turn on */
 -#define GFX_USE_GDISP			TRUE
 -#define GFX_USE_GWIN			TRUE
 -#define GFX_USE_GEVENT			TRUE
 -#define GFX_USE_GTIMER			TRUE
 -#define GFX_USE_GINPUT			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_CIRCLE		FALSE
 -#define GDISP_NEED_ELLIPSE		FALSE
 -#define GDISP_NEED_ARC			FALSE
 -#define GDISP_NEED_SCROLL		FALSE
 -#define GDISP_NEED_PIXELREAD	FALSE
 -#define GDISP_NEED_CONTROL		FALSE
 -#define GDISP_NEED_MULTITHREAD	TRUE
 -#define GDISP_NEED_ASYNC		FALSE
 -#define GDISP_NEED_MSGAPI		FALSE
 -
 -/* Builtin Fonts */
 -#define GDISP_INCLUDE_FONT_SMALL		FALSE
 -#define GDISP_INCLUDE_FONT_LARGER		FALSE
 -#define GDISP_INCLUDE_FONT_UI1			FALSE
 -#define GDISP_INCLUDE_FONT_UI2			TRUE
 -#define GDISP_INCLUDE_FONT_LARGENUMBERS	FALSE
 -
 -/* Features for the GWIN sub-system. */
 -#define GWIN_NEED_BUTTON		TRUE
 -#define GWIN_NEED_CONSOLE		TRUE
 -
 -/* Features for the GINPUT sub-system. */
 -#define GINPUT_NEED_MOUSE		TRUE
 -
 -#endif /* _GFXCONF_H */
 +/** + * This file has a different license to the rest of the GFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP			TRUE +#define GFX_USE_GWIN			TRUE +#define GFX_USE_GEVENT			TRUE +#define GFX_USE_GTIMER			TRUE +#define GFX_USE_GINPUT			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_CIRCLE		FALSE +#define GDISP_NEED_ELLIPSE		FALSE +#define GDISP_NEED_ARC			FALSE +#define GDISP_NEED_SCROLL		FALSE +#define GDISP_NEED_PIXELREAD	FALSE +#define GDISP_NEED_CONTROL		FALSE +#define GDISP_NEED_MULTITHREAD	TRUE +#define GDISP_NEED_ASYNC		FALSE +#define GDISP_NEED_MSGAPI		FALSE + +/* Builtin Fonts */ +#define GDISP_INCLUDE_FONT_SMALL		FALSE +#define GDISP_INCLUDE_FONT_LARGER		FALSE +#define GDISP_INCLUDE_FONT_UI1			FALSE +#define GDISP_INCLUDE_FONT_UI2			TRUE +#define GDISP_INCLUDE_FONT_LARGENUMBERS	FALSE + +/* Features for the GWIN sub-system. */ +#define GWIN_NEED_BUTTON		TRUE +#define GWIN_NEED_CONSOLE		TRUE + +/* Features for the GINPUT sub-system. */ +#define GINPUT_NEED_MOUSE		TRUE + +#endif /* _GFXCONF_H */ diff --git a/demos/modules/ginput_touch_driver_test/main.c b/demos/modules/ginput/touch_driver_test/main.c index 306ab631..95d29d28 100644 --- a/demos/modules/ginput_touch_driver_test/main.c +++ b/demos/modules/ginput/touch_driver_test/main.c @@ -1,349 +1,349 @@ -/*
 -    ChibiOS/GFX - Copyright (C) 2012, 2013
 -                 Joel Bodenmann aka Tectu <joel@unormal.org>
 -
 -    This file is part of ChibiOS/GFX.
 -
 -    ChibiOS/GFX is free software; you can redistribute it and/or modify
 -    it under the terms of the GNU General Public License as published by
 -    the Free Software Foundation; either version 3 of the License, or
 -    (at your option) any later version.
 -
 -    ChibiOS/GFX is distributed in the hope that it will be useful,
 -    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -    GNU General Public License for more details.
 -
 -    You should have received a copy of the GNU General Public License
 -    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -*/
 -
 -#include "ch.h"
 -#include "hal.h"
 -#include "chprintf.h"
 -#include "gfx.h"
 -
 -static GConsoleObject			gc;
 -static GButtonObject			gNext;
 -static GButtonObject			gPrev;
 -static GListener				gl;
 -
 -/*------------------------------------------------------------------------*
 - * GINPUT Touch Driver Calibrator.                                        *
 - *------------------------------------------------------------------------*/
 -int main(void) {
 -	GSourceHandle			gs, gsNext, gsPrev;
 -	GEvent					*pe;
 -	GEventMouse				*pem;
 -	GEventGWinButton		*peb;
 -	coord_t					swidth, sheight;
 -	GHandle					ghc, ghNext, ghPrev;
 -	BaseSequentialStream	*gp;
 -	GEventType				deviceType;
 -	font_t					font;
 -
 -	halInit();			// Initialise the Hardware
 -	chSysInit();		// Initialize the OS
 -	gdispInit();		// Initialize the display
 -
 -	// Get the display dimensions
 -	swidth = gdispGetWidth();
 -	sheight = gdispGetHeight();
 -	ghNext = ghPrev = 0;
 -
 -	// Create our title
 -	font = gdispOpenFont("UI2");
 -	gdispFillStringBox(0, 0, swidth, 20, "Touch Calibration", font, Red, White, justifyLeft);
 -
 -	// Create our main display window
 -	ghc = gwinCreateConsole(&gc, 0, 20, swidth, sheight-20, font);
 -	gwinClear(ghc);
 -	gp = gwinGetConsoleStream(ghc);
 -
 -	// Initialize the mouse in our special no calibration mode.
 -	geventListenerInit(&gl);
 -	gs = ginputGetMouse(9999);
 -	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA);
 -
 -	/*
 -	 * Test: Device Type
 -	 */
 -
 -StepDeviceType:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n1. DEVICE TYPE\n\n");
 -
 -	pem = (GEventMouse *)&gl.event;
 -	ginputGetMouseStatus(0, pem);
 -	deviceType = pem->type;
 -
 -	gwinSetColor(ghc, White);
 -	chprintf(gp, "This is detected as a %s device\n\n",
 -		deviceType == GEVENT_MOUSE ? "MOUSE" : (pem->type == GEVENT_TOUCH ? "TOUCH" : "UNKNOWN"));
 -
 -	if (ghNext)
 -		chprintf(gp, "Press Next or Back to continue.\n");
 -	else if (deviceType == GEVENT_MOUSE)
 -		chprintf(gp, "Click the mouse button to move on to the next test.\n");
 -	else
 -		chprintf(gp, "Press and release your finger to move on to the next test.\n");
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepClickJitter;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if (!ghNext && (pem->meta & GMETA_MOUSE_UP))
 -				break;
 -		}
 -	}
 -
 -	/*
 -	 * Test: Mouse raw reading jitter
 -	 */
 -
 -StepRawJitter:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n2. GINPUT_MOUSE_READ_CYCLES\n\n");
 -
 -	gwinSetColor(ghc, White);
 -	if (deviceType == GEVENT_MOUSE)
 -		chprintf(gp, "Press and hold the mouse button.\n\n");
 -	else
 -		chprintf(gp, "Press and hold on the surface.\n\n");
 -	chprintf(gp, "Numbers will display in this window.\n"
 -			"Ensure that values don't jump around very much when your finger is stationary.\n\n"
 -			"Increasing GINPUT_MOUSE_READ_CYCLES helps reduce jitter but increases CPU usage.\n\n");
 -
 -	if (ghNext)
 -		chprintf(gp, "Press Next or Back to continue.\n");
 -	else if (deviceType == GEVENT_MOUSE)
 -		chprintf(gp, "Release the mouse button to move on to the next test.\n");
 -	else
 -		chprintf(gp, "Release your finger to move on to the next test.\n");
 -
 -	// For this test turn on ALL mouse movement events
 -	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA|GLISTEN_MOUSENOFILTER);
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepDeviceType;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT))
 -				chprintf(gp, "%u:%u\n", pem->x, pem->y);
 -			if (!ghNext && (pem->meta & GMETA_MOUSE_UP))
 -				break;
 -		}
 -	}
 -
 -	// Reset to just changed movements.
 -	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA);
 -
 -	/*
 -	 * Test: Calibration
 -	 */
 -
 -StepCalibrate:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n3. GINPUT_MOUSE_CALIBRATION_ERROR\n\n");
 -	gwinSetColor(ghc, Gray);
 -	chprintf(gp, "Ensure GINPUT_MOUSE_NEED_CALIBRATION = TRUE and GINPUT_MOUSE_CALIBRATION_ERROR is >= 0\n\n");
 -	gwinSetColor(ghc, White);
 -	chprintf(gp, "You will be presented with a number of points to touch.\nPress them in turn.\n\n"
 -			"If the calibration repeatedly fails, increase GINPUT_MOUSE_CALIBRATION_ERROR and try again.\n\n");
 -
 -	if (ghNext)
 -		chprintf(gp, "Press Next to start the calibration.\n");
 -	else if (deviceType == GEVENT_MOUSE)
 -		chprintf(gp, "Click the mouse button to start the calibration.\n");
 -	else
 -		chprintf(gp, "Press and release your finger to start the calibration.\n");
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepRawJitter;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if (!ghNext && (pem->meta & GMETA_MOUSE_UP))
 -				break;
 -		}
 -	}
 -
 -	// Calibrate
 -	ginputCalibrateMouse(0);
 -
 -	/* From now on we can use Next and Previous Buttons */
 -	if (!ghNext) {
 -
 -		ghNext = gwinCreateButton(&gNext, swidth-50, 0, 50, 20, font, GBTN_NORMAL);
 -		gwinSetButtonText(ghNext, "Next", FALSE);
 -		gsNext = gwinGetButtonSource(ghNext);
 -		geventAttachSource(&gl, gsNext, 0);
 -		gwinAttachButtonMouseSource(ghNext, gs);
 -
 -		ghPrev = gwinCreateButton(&gPrev, swidth-100, 0, 50, 20, font, GBTN_NORMAL);
 -		gwinSetButtonText(ghPrev, "Back", FALSE);
 -		gsPrev = gwinGetButtonSource(ghPrev);
 -		geventAttachSource(&gl, gsPrev, 0);
 -		gwinAttachButtonMouseSource(ghPrev, gs);
 -
 -#if 0
 -		{
 -			GSourceHandle			gsButton1, gsButton2;
 -
 -			// Attach a couple of hardware toggle buttons to our Next and Back buttons as well.
 -			//	We can always use the mouse to trigger the buttons if you don't want to use hardware toggles.
 -			//	This code depends on your hardware. Turn it on only if you have
 -			//	defined a board definition for your toggle driver. Then change
 -			//	the next two lines to be correct for your hardware. The values
 -			//	below are correct for the Win32 toggle driver.
 -			gsButton1 = ginputGetToggle(GINPUT_TOGGLE_MOMENTARY1);
 -			gsButton2 = ginputGetToggle(GINPUT_TOGGLE_MOMENTARY2);
 -			gwinAttachButtonToggleSource(ghNext, gsButton2);
 -			gwinAttachButtonToggleSource(ghPrev, gsButton1);
 -		}
 -#endif
 -	}
 -
 -	// Calibration used the whole screen - re-establish our title
 -	gdispFillStringBox(0, 0, swidth, 20, "Touch Calibration", font, Green, White, justifyLeft);
 -	gwinButtonDraw(ghNext);
 -	gwinButtonDraw(ghPrev);
 -
 -	/*
 -	 * Test: Mouse movement jitter
 -	 */
 -
 -StepJitter:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n4. GINPUT_MOUSE_MOVE_JITTER\n\n");
 -
 -	gwinSetColor(ghc, White);
 -	if (deviceType == GEVENT_MOUSE)
 -		chprintf(gp, "Press and hold the mouse button and move around as if to draw.\n\n");
 -	else
 -		chprintf(gp, "Press firmly on the surface and move around as if to draw.\n\n");
 -
 -	chprintf(gp, "Dots will display in this window. Ensure that when you stop moving your finger that "
 -			"new dots stop displaying.\nNew dots should only display when your finger is moving.\n\n"
 -			"Adjust GINPUT_MOUSE_MOVE_JITTER to the smallest value that this reliably works for.\n\n");
 -	chprintf(gp, "Press Next or Back to continue.\n\n");
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepCalibrate;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT))
 -				chprintf(gp, ".");
 -		}
 -	}
 -
 -	/*
 -	 * Test: Polling frequency
 -	 */
 -
 -StepPolling:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n5. GINPUT_MOUSE_POLL_PERIOD\n\n");
 -
 -	gwinSetColor(ghc, White);
 -	chprintf(gp, "Press firmly on the surface (or press and hold the mouse button) and move around as if to draw.\n\n");
 -	chprintf(gp, "A green line will follow your finger.\n"
 -			"Adjust GINPUT_MOUSE_POLL_PERIOD to the highest value that provides a line without "
 -			"gaps that are too big.\nDecreasing the value increases CPU usage.\n"
 -			"About 25 (millisecs) normally produces good results."
 -			"This test can be ignored for interrupt driven drivers.\n\n");
 -	chprintf(gp, "Press Next or Back to continue.\n\n");
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepJitter;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT))
 -				gdispDrawPixel(pem->x, pem->y, Green);
 -		}
 -	}
 -	
 -	/*
 -	 * Test: Click Jitter
 -	 */
 -
 -StepClickJitter:
 -	gwinClear(ghc);
 -	gwinSetColor(ghc, Yellow);
 -	chprintf(gp, "\n6. GINPUT_MOUSE_MAX_CLICK_JITTER\n\n");
 -
 -	gwinSetColor(ghc, White);
 -	chprintf(gp, "Press and release the touch surface to \"click\".\nTry both short and long presses.\n");
 -	chprintf(gp, "For a mouse click with the left and right buttons.\n\n");
 -	chprintf(gp, "Dots will display in this window. A yellow dash is a left (or short) click. "
 -			"A red x is a right (or long) click.\n\n"
 -			"Adjust GINPUT_MOUSE_CLICK_JITTER to the smallest value that this reliably works for.\n"
 -			"Adjust GINPUT_MOUSE_CLICK_TIME to adjust distinguishing short vs long presses.\n"
 -			"TIME_INFINITE means there are no long presses (although a right mouse button will still work).\n\n"
 -			"Note: moving your finger (mouse) during a click cancels it.\n\n");
 -	chprintf(gp, "This is the last test but you can press Next or Back to continue.\n\n");
 -
 -	while(1) {
 -		pe = geventEventWait(&gl, TIME_INFINITE);
 -		if (pe->type == GEVENT_GWIN_BUTTON) {
 -			peb = (GEventGWinButton *)pe;
 -			if (peb->button == ghPrev)
 -				goto StepPolling;
 -			if (peb->button == ghNext)
 -				break;
 -		}
 -		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) {
 -			pem = (GEventMouse *)pe;
 -			if ((pem->meta & GMETA_MOUSE_CLICK)) {
 -				gwinSetColor(ghc, Yellow);
 -				chprintf(gp, "-");
 -			}
 -			if ((pem->meta & GMETA_MOUSE_CXTCLICK)) {
 -				gwinSetColor(ghc, Red);
 -				chprintf(gp, "x");
 -			}
 -		}
 -	}
 -
 -	// Can't let this really exit
 -	goto StepDeviceType;
 -}
 +/* +    ChibiOS/GFX - Copyright (C) 2012, 2013 +                 Joel Bodenmann aka Tectu <joel@unormal.org> + +    This file is part of ChibiOS/GFX. + +    ChibiOS/GFX is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, or +    (at your option) any later version. + +    ChibiOS/GFX is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" +#include "chprintf.h" +#include "gfx.h" + +static GConsoleObject			gc; +static GButtonObject			gNext; +static GButtonObject			gPrev; +static GListener				gl; + +/*------------------------------------------------------------------------* + * GINPUT Touch Driver Calibrator.                                        * + *------------------------------------------------------------------------*/ +int main(void) { +	GSourceHandle			gs, gsNext, gsPrev; +	GEvent					*pe; +	GEventMouse				*pem; +	GEventGWinButton		*peb; +	coord_t					swidth, sheight; +	GHandle					ghc, ghNext, ghPrev; +	BaseSequentialStream	*gp; +	GEventType				deviceType; +	font_t					font; + +	halInit();			// Initialise the Hardware +	chSysInit();		// Initialize the OS +	gdispInit();		// Initialize the display + +	// Get the display dimensions +	swidth = gdispGetWidth(); +	sheight = gdispGetHeight(); +	ghNext = ghPrev = 0; + +	// Create our title +	font = gdispOpenFont("UI2"); +	gdispFillStringBox(0, 0, swidth, 20, "Touch Calibration", font, Red, White, justifyLeft); + +	// Create our main display window +	ghc = gwinCreateConsole(&gc, 0, 20, swidth, sheight-20, font); +	gwinClear(ghc); +	gp = gwinGetConsoleStream(ghc); + +	// Initialize the mouse in our special no calibration mode. +	geventListenerInit(&gl); +	gs = ginputGetMouse(9999); +	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); + +	/* +	 * Test: Device Type +	 */ + +StepDeviceType: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n1. DEVICE TYPE\n\n"); + +	pem = (GEventMouse *)&gl.event; +	ginputGetMouseStatus(0, pem); +	deviceType = pem->type; + +	gwinSetColor(ghc, White); +	chprintf(gp, "This is detected as a %s device\n\n", +		deviceType == GEVENT_MOUSE ? "MOUSE" : (pem->type == GEVENT_TOUCH ? "TOUCH" : "UNKNOWN")); + +	if (ghNext) +		chprintf(gp, "Press Next or Back to continue.\n"); +	else if (deviceType == GEVENT_MOUSE) +		chprintf(gp, "Click the mouse button to move on to the next test.\n"); +	else +		chprintf(gp, "Press and release your finger to move on to the next test.\n"); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepClickJitter; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if (!ghNext && (pem->meta & GMETA_MOUSE_UP)) +				break; +		} +	} + +	/* +	 * Test: Mouse raw reading jitter +	 */ + +StepRawJitter: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n2. GINPUT_MOUSE_READ_CYCLES\n\n"); + +	gwinSetColor(ghc, White); +	if (deviceType == GEVENT_MOUSE) +		chprintf(gp, "Press and hold the mouse button.\n\n"); +	else +		chprintf(gp, "Press and hold on the surface.\n\n"); +	chprintf(gp, "Numbers will display in this window.\n" +			"Ensure that values don't jump around very much when your finger is stationary.\n\n" +			"Increasing GINPUT_MOUSE_READ_CYCLES helps reduce jitter but increases CPU usage.\n\n"); + +	if (ghNext) +		chprintf(gp, "Press Next or Back to continue.\n"); +	else if (deviceType == GEVENT_MOUSE) +		chprintf(gp, "Release the mouse button to move on to the next test.\n"); +	else +		chprintf(gp, "Release your finger to move on to the next test.\n"); + +	// For this test turn on ALL mouse movement events +	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA|GLISTEN_MOUSENOFILTER); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepDeviceType; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT)) +				chprintf(gp, "%u:%u\n", pem->x, pem->y); +			if (!ghNext && (pem->meta & GMETA_MOUSE_UP)) +				break; +		} +	} + +	// Reset to just changed movements. +	geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); + +	/* +	 * Test: Calibration +	 */ + +StepCalibrate: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n3. GINPUT_MOUSE_CALIBRATION_ERROR\n\n"); +	gwinSetColor(ghc, Gray); +	chprintf(gp, "Ensure GINPUT_MOUSE_NEED_CALIBRATION = TRUE and GINPUT_MOUSE_CALIBRATION_ERROR is >= 0\n\n"); +	gwinSetColor(ghc, White); +	chprintf(gp, "You will be presented with a number of points to touch.\nPress them in turn.\n\n" +			"If the calibration repeatedly fails, increase GINPUT_MOUSE_CALIBRATION_ERROR and try again.\n\n"); + +	if (ghNext) +		chprintf(gp, "Press Next to start the calibration.\n"); +	else if (deviceType == GEVENT_MOUSE) +		chprintf(gp, "Click the mouse button to start the calibration.\n"); +	else +		chprintf(gp, "Press and release your finger to start the calibration.\n"); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepRawJitter; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if (!ghNext && (pem->meta & GMETA_MOUSE_UP)) +				break; +		} +	} + +	// Calibrate +	ginputCalibrateMouse(0); + +	/* From now on we can use Next and Previous Buttons */ +	if (!ghNext) { + +		ghNext = gwinCreateButton(&gNext, swidth-50, 0, 50, 20, font, GBTN_NORMAL); +		gwinSetButtonText(ghNext, "Next", FALSE); +		gsNext = gwinGetButtonSource(ghNext); +		geventAttachSource(&gl, gsNext, 0); +		gwinAttachButtonMouseSource(ghNext, gs); + +		ghPrev = gwinCreateButton(&gPrev, swidth-100, 0, 50, 20, font, GBTN_NORMAL); +		gwinSetButtonText(ghPrev, "Back", FALSE); +		gsPrev = gwinGetButtonSource(ghPrev); +		geventAttachSource(&gl, gsPrev, 0); +		gwinAttachButtonMouseSource(ghPrev, gs); + +#if 0 +		{ +			GSourceHandle			gsButton1, gsButton2; + +			// Attach a couple of hardware toggle buttons to our Next and Back buttons as well. +			//	We can always use the mouse to trigger the buttons if you don't want to use hardware toggles. +			//	This code depends on your hardware. Turn it on only if you have +			//	defined a board definition for your toggle driver. Then change +			//	the next two lines to be correct for your hardware. The values +			//	below are correct for the Win32 toggle driver. +			gsButton1 = ginputGetToggle(GINPUT_TOGGLE_MOMENTARY1); +			gsButton2 = ginputGetToggle(GINPUT_TOGGLE_MOMENTARY2); +			gwinAttachButtonToggleSource(ghNext, gsButton2); +			gwinAttachButtonToggleSource(ghPrev, gsButton1); +		} +#endif +	} + +	// Calibration used the whole screen - re-establish our title +	gdispFillStringBox(0, 0, swidth, 20, "Touch Calibration", font, Green, White, justifyLeft); +	gwinButtonDraw(ghNext); +	gwinButtonDraw(ghPrev); + +	/* +	 * Test: Mouse movement jitter +	 */ + +StepJitter: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n4. GINPUT_MOUSE_MOVE_JITTER\n\n"); + +	gwinSetColor(ghc, White); +	if (deviceType == GEVENT_MOUSE) +		chprintf(gp, "Press and hold the mouse button and move around as if to draw.\n\n"); +	else +		chprintf(gp, "Press firmly on the surface and move around as if to draw.\n\n"); + +	chprintf(gp, "Dots will display in this window. Ensure that when you stop moving your finger that " +			"new dots stop displaying.\nNew dots should only display when your finger is moving.\n\n" +			"Adjust GINPUT_MOUSE_MOVE_JITTER to the smallest value that this reliably works for.\n\n"); +	chprintf(gp, "Press Next or Back to continue.\n\n"); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepCalibrate; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT)) +				chprintf(gp, "."); +		} +	} + +	/* +	 * Test: Polling frequency +	 */ + +StepPolling: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n5. GINPUT_MOUSE_POLL_PERIOD\n\n"); + +	gwinSetColor(ghc, White); +	chprintf(gp, "Press firmly on the surface (or press and hold the mouse button) and move around as if to draw.\n\n"); +	chprintf(gp, "A green line will follow your finger.\n" +			"Adjust GINPUT_MOUSE_POLL_PERIOD to the highest value that provides a line without " +			"gaps that are too big.\nDecreasing the value increases CPU usage.\n" +			"About 25 (millisecs) normally produces good results." +			"This test can be ignored for interrupt driven drivers.\n\n"); +	chprintf(gp, "Press Next or Back to continue.\n\n"); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepJitter; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if ((pem->current_buttons & GINPUT_MOUSE_BTN_LEFT)) +				gdispDrawPixel(pem->x, pem->y, Green); +		} +	} +	 +	/* +	 * Test: Click Jitter +	 */ + +StepClickJitter: +	gwinClear(ghc); +	gwinSetColor(ghc, Yellow); +	chprintf(gp, "\n6. GINPUT_MOUSE_MAX_CLICK_JITTER\n\n"); + +	gwinSetColor(ghc, White); +	chprintf(gp, "Press and release the touch surface to \"click\".\nTry both short and long presses.\n"); +	chprintf(gp, "For a mouse click with the left and right buttons.\n\n"); +	chprintf(gp, "Dots will display in this window. A yellow dash is a left (or short) click. " +			"A red x is a right (or long) click.\n\n" +			"Adjust GINPUT_MOUSE_CLICK_JITTER to the smallest value that this reliably works for.\n" +			"Adjust GINPUT_MOUSE_CLICK_TIME to adjust distinguishing short vs long presses.\n" +			"TIME_INFINITE means there are no long presses (although a right mouse button will still work).\n\n" +			"Note: moving your finger (mouse) during a click cancels it.\n\n"); +	chprintf(gp, "This is the last test but you can press Next or Back to continue.\n\n"); + +	while(1) { +		pe = geventEventWait(&gl, TIME_INFINITE); +		if (pe->type == GEVENT_GWIN_BUTTON) { +			peb = (GEventGWinButton *)pe; +			if (peb->button == ghPrev) +				goto StepPolling; +			if (peb->button == ghNext) +				break; +		} +		if (pe->type == GEVENT_MOUSE || pe->type == GEVENT_TOUCH) { +			pem = (GEventMouse *)pe; +			if ((pem->meta & GMETA_MOUSE_CLICK)) { +				gwinSetColor(ghc, Yellow); +				chprintf(gp, "-"); +			} +			if ((pem->meta & GMETA_MOUSE_CXTCLICK)) { +				gwinSetColor(ghc, Red); +				chprintf(gp, "x"); +			} +		} +	} + +	// Can't let this really exit +	goto StepDeviceType; +} diff --git a/demos/modules/window/gfxconf.h b/demos/modules/gwin/basic/gfxconf.h index c8080075..e567e5a0 100644 --- a/demos/modules/window/gfxconf.h +++ b/demos/modules/gwin/basic/gfxconf.h @@ -1,33 +1,33 @@ -/**
 - * This file has a different license to the rest of the GFX system.
 - * You can copy, modify and distribute this file as you see fit.
 - * You do not need to publish your source modifications to this file.
 - * The only thing you are not permitted to do is to relicense it
 - * under a different license.
 - */
 -
 -#ifndef _GFXCONF_H
 -#define _GFXCONF_H
 -
 -/* GFX sub-systems to turn on */
 -#define GFX_USE_GDISP			TRUE
 -#define GFX_USE_GWIN			TRUE
 -#define GFX_USE_GEVENT			FALSE
 -#define GFX_USE_GTIMER			FALSE
 -#define GFX_USE_GINPUT			FALSE
 -
 -/* Features for the GDISP sub-system. */
 -#define GDISP_NEED_VALIDATION	TRUE
 -#define GDISP_NEED_CLIP			TRUE
 -#define GDISP_NEED_TEXT			FALSE
 -#define GDISP_NEED_CIRCLE		TRUE
 -#define GDISP_NEED_ELLIPSE		FALSE
 -#define GDISP_NEED_ARC			FALSE
 -#define GDISP_NEED_SCROLL		FALSE
 -#define GDISP_NEED_PIXELREAD	FALSE
 -#define GDISP_NEED_CONTROL		FALSE
 -#define GDISP_NEED_MULTITHREAD	FALSE
 -#define GDISP_NEED_ASYNC		FALSE
 -#define GDISP_NEED_MSGAPI		FALSE
 -
 -#endif /* _GFXCONF_H */
 +/** + * This file has a different license to the rest of the GFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP			TRUE +#define GFX_USE_GWIN			TRUE +#define GFX_USE_GEVENT			FALSE +#define GFX_USE_GTIMER			FALSE +#define GFX_USE_GINPUT			FALSE + +/* Features for the GDISP sub-system. */ +#define GDISP_NEED_VALIDATION	TRUE +#define GDISP_NEED_CLIP			TRUE +#define GDISP_NEED_TEXT			FALSE +#define GDISP_NEED_CIRCLE		TRUE +#define GDISP_NEED_ELLIPSE		FALSE +#define GDISP_NEED_ARC			FALSE +#define GDISP_NEED_SCROLL		FALSE +#define GDISP_NEED_PIXELREAD	FALSE +#define GDISP_NEED_CONTROL		FALSE +#define GDISP_NEED_MULTITHREAD	FALSE +#define GDISP_NEED_ASYNC		FALSE +#define GDISP_NEED_MSGAPI		FALSE + +#endif /* _GFXCONF_H */ diff --git a/demos/modules/window/main.c b/demos/modules/gwin/basic/main.c index 6571f109..a0326fac 100644 --- a/demos/modules/window/main.c +++ b/demos/modules/gwin/basic/main.c @@ -1,67 +1,67 @@ -/*
 -    ChibiOS/GFX - Copyright (C) 2012, 2013
 -                 Joel Bodenmann aka Tectu <joel@unormal.org>
 -
 -    This file is part of ChibiOS/GFX.
 -
 -    ChibiOS/GFX is free software; you can redistribute it and/or modify
 -    it under the terms of the GNU General Public License as published by
 -    the Free Software Foundation; either version 3 of the License, or
 -    (at your option) any later version.
 -
 -    ChibiOS/GFX is distributed in the hope that it will be useful,
 -    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -    GNU General Public License for more details.
 -
 -    You should have received a copy of the GNU General Public License
 -    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -*/
 -
 -#include "ch.h"
 -#include "hal.h"
 -#include "gfx.h"
 -
 -/* The handles for our two Windows */
 -GHandle GW1, GW2;
 -
 -int main(void) {
 -    halInit();
 -    chSysInit();
 -   	coord_t		i, j;
 -
 -    /* Initialize and clear the display */
 -    gdispInit();
 -    gdispClear(Lime);
 -
 -    /* Create two windows */
 -    GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150);
 -    GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100);
 -
 -    /* Set fore- and background colors for both windows */
 -    gwinSetColor(GW1, Black);
 -    gwinSetBgColor(GW1, White);
 -    gwinSetColor(GW2, White);
 -    gwinSetBgColor(GW2, Blue);
 -
 -    /* Clear both windows - to set background color */
 -    gwinClear(GW1);
 -    gwinClear(GW2);
 -
 -    gwinDrawLine (GW1, 5, 30, 150, 110);
 -    for(i=5, j=0; i < 200 && j < 150; i+=3, j+=i/20)
 -        	gwinDrawPixel (GW1, i, j);
 -
 -    /*  
 -     * Draw two filled circles at the same coordinate
 -     * of each window to demonstrate the relative coordinates
 -     * of windows
 -     */
 -    gwinFillCircle(GW1, 20, 20, 15);
 -    gwinFillCircle(GW2, 20, 20, 15);
 -
 -    while(TRUE) {
 -        chThdSleepMilliseconds(500);
 -    }   
 -}
 -
 +/* +    ChibiOS/GFX - Copyright (C) 2012, 2013 +                 Joel Bodenmann aka Tectu <joel@unormal.org> + +    This file is part of ChibiOS/GFX. + +    ChibiOS/GFX is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, or +    (at your option) any later version. + +    ChibiOS/GFX is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" +#include "gfx.h" + +/* The handles for our two Windows */ +GHandle GW1, GW2; + +int main(void) { +    halInit(); +    chSysInit(); +   	coord_t		i, j; + +    /* Initialize and clear the display */ +    gdispInit(); +    gdispClear(Lime); + +    /* Create two windows */ +    GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150); +    GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100); + +    /* Set fore- and background colors for both windows */ +    gwinSetColor(GW1, Black); +    gwinSetBgColor(GW1, White); +    gwinSetColor(GW2, White); +    gwinSetBgColor(GW2, Blue); + +    /* Clear both windows - to set background color */ +    gwinClear(GW1); +    gwinClear(GW2); + +    gwinDrawLine (GW1, 5, 30, 150, 110); +    for(i=5, j=0; i < 200 && j < 150; i+=3, j+=i/20) +        	gwinDrawPixel (GW1, i, j); + +    /*   +     * Draw two filled circles at the same coordinate +     * of each window to demonstrate the relative coordinates +     * of windows +     */ +    gwinFillCircle(GW1, 20, 20, 15); +    gwinFillCircle(GW2, 20, 20, 15); + +    while(TRUE) { +        chThdSleepMilliseconds(500); +    }    +} + diff --git a/demos/modules/console/gfxconf.h b/demos/modules/gwin/console/gfxconf.h index 254bf181..178beb86 100644 --- a/demos/modules/console/gfxconf.h +++ b/demos/modules/gwin/console/gfxconf.h @@ -1,43 +1,43 @@ -/**
 - * This file has a different license to the rest of the GFX system.
 - * You can copy, modify and distribute this file as you see fit.
 - * You do not need to publish your source modifications to this file.
 - * The only thing you are not permitted to do is to relicense it
 - * under a different license.
 - */
 -
 -#ifndef _GFXCONF_H
 -#define _GFXCONF_H
 -
 -/* GFX sub-systems to turn on */
 -#define GFX_USE_GDISP			TRUE
 -#define GFX_USE_GWIN			TRUE
 -#define GFX_USE_GEVENT			FALSE
 -#define GFX_USE_GTIMER			FALSE
 -#define GFX_USE_GINPUT			FALSE
 -
 -/* Features for the GDISP sub-system. */
 -#define GDISP_NEED_VALIDATION	TRUE
 -#define GDISP_NEED_CLIP			TRUE
 -#define GDISP_NEED_TEXT			TRUE
 -#define GDISP_NEED_CIRCLE		FALSE
 -#define GDISP_NEED_ELLIPSE		FALSE
 -#define GDISP_NEED_ARC			FALSE
 -#define GDISP_NEED_SCROLL		FALSE
 -#define GDISP_NEED_PIXELREAD	FALSE
 -#define GDISP_NEED_CONTROL		FALSE
 -#define GDISP_NEED_MULTITHREAD	FALSE
 -#define GDISP_NEED_ASYNC		FALSE
 -#define GDISP_NEED_MSGAPI		FALSE
 -
 -/* Builtin Fonts */
 -#define GDISP_INCLUDE_FONT_SMALL		TRUE
 -#define GDISP_INCLUDE_FONT_LARGER		FALSE
 -#define GDISP_INCLUDE_FONT_UI1			FALSE
 -#define GDISP_INCLUDE_FONT_UI2			TRUE
 -#define GDISP_INCLUDE_FONT_LARGENUMBERS	FALSE
 -
 -/* Features for the GWIN sub-system. */
 -#define GWIN_NEED_CONSOLE		TRUE
 -
 -#endif /* _GFXCONF_H */
 +/** + * This file has a different license to the rest of the GFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP			TRUE +#define GFX_USE_GWIN			TRUE +#define GFX_USE_GEVENT			FALSE +#define GFX_USE_GTIMER			FALSE +#define GFX_USE_GINPUT			FALSE + +/* Features for the GDISP sub-system. */ +#define GDISP_NEED_VALIDATION	TRUE +#define GDISP_NEED_CLIP			TRUE +#define GDISP_NEED_TEXT			TRUE +#define GDISP_NEED_CIRCLE		FALSE +#define GDISP_NEED_ELLIPSE		FALSE +#define GDISP_NEED_ARC			FALSE +#define GDISP_NEED_SCROLL		FALSE +#define GDISP_NEED_PIXELREAD	FALSE +#define GDISP_NEED_CONTROL		FALSE +#define GDISP_NEED_MULTITHREAD	FALSE +#define GDISP_NEED_ASYNC		FALSE +#define GDISP_NEED_MSGAPI		FALSE + +/* Builtin Fonts */ +#define GDISP_INCLUDE_FONT_SMALL		TRUE +#define GDISP_INCLUDE_FONT_LARGER		FALSE +#define GDISP_INCLUDE_FONT_UI1			FALSE +#define GDISP_INCLUDE_FONT_UI2			TRUE +#define GDISP_INCLUDE_FONT_LARGENUMBERS	FALSE + +/* Features for the GWIN sub-system. */ +#define GWIN_NEED_CONSOLE		TRUE + +#endif /* _GFXCONF_H */ diff --git a/demos/modules/console/main.c b/demos/modules/gwin/console/main.c index 63a4c6ee..90ebf86f 100644 --- a/demos/modules/console/main.c +++ b/demos/modules/gwin/console/main.c @@ -1,87 +1,87 @@ -/*
 -    ChibiOS/GFX - Copyright (C) 2012, 2013
 -                 Joel Bodenmann aka Tectu <joel@unormal.org>
 -
 -    This file is part of ChibiOS/GFX.
 -
 -    ChibiOS/GFX is free software; you can redistribute it and/or modify
 -    it under the terms of the GNU General Public License as published by
 -    the Free Software Foundation; either version 3 of the License, or
 -    (at your option) any later version.
 -
 -    ChibiOS/GFX is distributed in the hope that it will be useful,
 -    but WITHOUT ANY WARRANTY; without even the implied warranty of
 -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -    GNU General Public License for more details.
 -
 -    You should have received a copy of the GNU General Public License
 -    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -*/
 -
 -#include "ch.h"
 -#include "hal.h"
 -#include "chprintf.h"
 -#include "gfx.h"
 -
 -/* The handles for our three consoles */
 -GHandle GW1, GW2, GW3;
 -
 -/* The streams for our three consoles */
 -BaseSequentialStream *S1, *S2, *S3;
 -
 -int main(void) {
 -	uint8_t i;
 -	font_t	font1, font2;
 -
 -	halInit();
 -	chSysInit();
 -
 -	/* initialize and clear the display */
 -	gdispInit();
 -	gdispClear(Black);
 -	font1 = gdispOpenFont("UI2 Double");
 -	font2 = gdispOpenFont("Small");
 -
 -	/* create the three console windows and set a font for each */
 -	GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, font1);
 -	GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), font2);
 -	GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), font2);
 -
 -	/* Set the fore- and background colors for each console */
 -	gwinSetColor(GW1, Green);
 -	gwinSetBgColor(GW1, Black);
 -	gwinSetColor(GW2, White);
 -	gwinSetBgColor(GW2, Blue);
 -	gwinSetColor(GW3, Black);
 -	gwinSetBgColor(GW3, Red);
 -
 -	/* clear all console windows - to set background */
 -	gwinClear(GW1);
 -	gwinClear(GW2);
 -	gwinClear(GW3);
 -
 -	/* receive the stream pointers of each console */
 -	S1 = gwinGetConsoleStream(GW1);
 -	S2 = gwinGetConsoleStream(GW2);
 -	S3 = gwinGetConsoleStream(GW3);
 -
 -	/* Output some data on the first console */
 -	for(i = 0; i < 10; i++) {
 -		chprintf(S1, "Hello ChibiOS/GFX!\r\n");
 -	}
 -
 -	/* Output some data on the second console */
 -	for(i = 0; i < 16; i++) {
 -		chprintf(S2, "Message Nr.: %d\r\n", i+1);
 -	}
 -
 -	/* Output some data on the third console */
 -	for(i = 0; i < 18; i++) {
 -		chprintf(S3, "Message Nr.: %d\r\n", i+1);
 -	}
 -
 -	while(TRUE) {
 -		chThdSleepMilliseconds(500);
 -	}
 -}
 -
 +/* +    ChibiOS/GFX - Copyright (C) 2012, 2013 +                 Joel Bodenmann aka Tectu <joel@unormal.org> + +    This file is part of ChibiOS/GFX. + +    ChibiOS/GFX is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, or +    (at your option) any later version. + +    ChibiOS/GFX is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" +#include "chprintf.h" +#include "gfx.h" + +/* The handles for our three consoles */ +GHandle GW1, GW2, GW3; + +/* The streams for our three consoles */ +BaseSequentialStream *S1, *S2, *S3; + +int main(void) { +	uint8_t i; +	font_t	font1, font2; + +	halInit(); +	chSysInit(); + +	/* initialize and clear the display */ +	gdispInit(); +	gdispClear(Black); +	font1 = gdispOpenFont("UI2 Double"); +	font2 = gdispOpenFont("Small"); + +	/* create the three console windows and set a font for each */ +	GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, font1); +	GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), font2); +	GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), font2); + +	/* Set the fore- and background colors for each console */ +	gwinSetColor(GW1, Green); +	gwinSetBgColor(GW1, Black); +	gwinSetColor(GW2, White); +	gwinSetBgColor(GW2, Blue); +	gwinSetColor(GW3, Black); +	gwinSetBgColor(GW3, Red); + +	/* clear all console windows - to set background */ +	gwinClear(GW1); +	gwinClear(GW2); +	gwinClear(GW3); + +	/* receive the stream pointers of each console */ +	S1 = gwinGetConsoleStream(GW1); +	S2 = gwinGetConsoleStream(GW2); +	S3 = gwinGetConsoleStream(GW3); + +	/* Output some data on the first console */ +	for(i = 0; i < 10; i++) { +		chprintf(S1, "Hello ChibiOS/GFX!\r\n"); +	} + +	/* Output some data on the second console */ +	for(i = 0; i < 16; i++) { +		chprintf(S2, "Message Nr.: %d\r\n", i+1); +	} + +	/* Output some data on the third console */ +	for(i = 0; i < 18; i++) { +		chprintf(S3, "Message Nr.: %d\r\n", i+1); +	} + +	while(TRUE) { +		chThdSleepMilliseconds(500); +	} +} + diff --git a/demos/modules/gwin/slider/gfxconf.h b/demos/modules/gwin/slider/gfxconf.h new file mode 100644 index 00000000..477d7d29 --- /dev/null +++ b/demos/modules/gwin/slider/gfxconf.h @@ -0,0 +1,57 @@ +/** + * This file has a different license to the rest of the GFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +#ifndef _GFXCONF_H +#define _GFXCONF_H + +/* GFX sub-systems to turn on */ +#define GFX_USE_GDISP			TRUE +#define GFX_USE_GWIN			TRUE +#define GFX_USE_GEVENT			TRUE +#define GFX_USE_GTIMER			TRUE +#define GFX_USE_GINPUT			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_CIRCLE			FALSE +#define GDISP_NEED_ELLIPSE			FALSE +#define GDISP_NEED_ARC				FALSE +#define GDISP_NEED_CONVEX_POLYGON	FALSE +#define GDISP_NEED_SCROLL			FALSE +#define GDISP_NEED_PIXELREAD		FALSE +#define GDISP_NEED_CONTROL			FALSE +#define GDISP_NEED_IMAGE			FALSE +#define GDISP_NEED_MULTITHREAD		TRUE +#define GDISP_NEED_ASYNC			FALSE +#define GDISP_NEED_MSGAPI			FALSE + +/* Builtin Fonts */ +#define GDISP_INCLUDE_FONT_SMALL		FALSE +#define GDISP_INCLUDE_FONT_LARGER		FALSE +#define GDISP_INCLUDE_FONT_UI1			FALSE +#define GDISP_INCLUDE_FONT_UI2			TRUE +#define GDISP_INCLUDE_FONT_LARGENUMBERS	FALSE + +/* GDISP image decoders */ +#define GDISP_NEED_IMAGE_NATIVE		FALSE +#define GDISP_NEED_IMAGE_GIF		FALSE +#define GDISP_NEED_IMAGE_BMP		FALSE +#define GDISP_NEED_IMAGE_JPG		FALSE +#define GDISP_NEED_IMAGE_PNG		FALSE + +/* Features for the GWIN sub-system. */ +#define GWIN_NEED_BUTTON		FALSE +#define GWIN_NEED_CONSOLE		TRUE +#define GWIN_NEED_SLIDER		TRUE + +/* Features for the GINPUT sub-system. */ +#define GINPUT_NEED_MOUSE		TRUE + +#endif /* _GFXCONF_H */ diff --git a/demos/modules/gwin/slider/main.c b/demos/modules/gwin/slider/main.c new file mode 100644 index 00000000..9a318943 --- /dev/null +++ b/demos/modules/gwin/slider/main.c @@ -0,0 +1,89 @@ +/* +    ChibiOS/GFX - Copyright (C) 2012, 2013 +                 Joel Bodenmann aka Tectu <joel@unormal.org> + +    This file is part of ChibiOS/GFX. + +    ChibiOS/GFX is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, or +    (at your option) any later version. + +    ChibiOS/GFX is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +    GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "ch.h" +#include "hal.h" +#include "gfx.h" +#include "chprintf.h" + +static GListener gl; + +#define SLIDER_WIDTH	20 + +int main(void) { +	coord_t				swidth, sheight; +	GHandle				ghSliderH, ghSliderV, ghConsole; +	font_t				fui2; +	GSourceHandle		gsMouse; +	GEventGWinSlider *	pSliderEvent; +	BaseSequentialStream *consout; + +	halInit();			// Initialize the Hardware +	chSysInit();		// Initialize the OS +	gdispInit();		// Initialize the display + +	gdispClear(Black); + +	// Get the display dimensions +	swidth = gdispGetWidth(); +	sheight = gdispGetHeight(); + +	// Get the font +	fui2 = gdispOpenFont("UI2"); + +	// Create out gwin windows/widgets +	ghSliderH = gwinCreateSlider(NULL, 5, 5, swidth-10, SLIDER_WIDTH); +	ghSliderV = gwinCreateSlider(NULL, 5, 10+SLIDER_WIDTH, SLIDER_WIDTH, sheight-15+SLIDER_WIDTH); +	ghConsole = gwinCreateConsole(NULL, 10+SLIDER_WIDTH, 10+SLIDER_WIDTH, swidth-15-SLIDER_WIDTH, sheight-15-SLIDER_WIDTH, fui2); +	consout = gwinGetConsoleStream(ghConsole); + +	// Color up the console window +    gwinSetColor(ghConsole, White); +    gwinSetBgColor(ghConsole, Blue); + +    // Assign the mouse to the sliders. +    gsMouse = ginputGetMouse(0); +    gwinAttachSliderMouseSource(ghSliderH, gsMouse); +    gwinAttachSliderMouseSource(ghSliderV, gsMouse); + +    // We want to listen for slider events +	geventListenerInit(&gl); +	geventAttachSource(&gl, gwinGetSliderSource(ghSliderH), 0); +	geventAttachSource(&gl, gwinGetSliderSource(ghSliderV), 0); + +	// Draw everything on the screen +    gwinClear(ghConsole); +    gwinSliderDraw(ghSliderH); +    gwinSliderDraw(ghSliderV); + +	while(1) { +		// Get an Event +		//	- we can assume it is a slider event as that is all we are listening for +		pSliderEvent = (GEventGWinSlider *)geventEventWait(&gl, TIME_INFINITE); + +		// Double check that assumption +		if (pSliderEvent->type != GEVENT_GWIN_SLIDER) +			continue; + +		chprintf(consout, "%c=%d\n", pSliderEvent->slider == ghSliderH ? 'H' : 'V', pSliderEvent->position); +	} + +	return 0; +} diff --git a/demos/modules/gwin/slider/result_647x490.png b/demos/modules/gwin/slider/result_647x490.pngBinary files differ new file mode 100644 index 00000000..c7b12a93 --- /dev/null +++ b/demos/modules/gwin/slider/result_647x490.png | 
