diff options
Diffstat (limited to 'demos/modules/gwin')
| -rw-r--r-- | demos/modules/gwin/basic/main.c | 14 | ||||
| -rw-r--r-- | demos/modules/gwin/console/main.c | 41 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/gfxconf.h | 84 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/main.c | 97 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/readme.txt | 6 | ||||
| -rw-r--r-- | demos/modules/gwin/slider/result_647x490.png | bin | 24141 -> 0 bytes | |||
| -rw-r--r-- | demos/modules/gwin/widgets/main.c | 352 | ||||
| -rw-r--r-- | demos/modules/gwin/widgets/readme.txt | 4 | 
8 files changed, 268 insertions, 330 deletions
diff --git a/demos/modules/gwin/basic/main.c b/demos/modules/gwin/basic/main.c index 5dc1bab7..c46e6969 100644 --- a/demos/modules/gwin/basic/main.c +++ b/demos/modules/gwin/basic/main.c @@ -40,8 +40,14 @@ int main(void) {      gdispClear(Lime);      /* Create two windows */ -    GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150); -    GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100); +    { +    	GWindowInit	wi; + +    	wi.show = TRUE; wi.x = 20; wi.y = 10; wi.width = 200; wi.height = 150; +        GW1 = gwinWindowCreate(NULL, &wi); +    	wi.show = TRUE; wi.x = 50; wi.y = 190; wi.width = 150; wi.height = 100; +        GW2 = gwinWindowCreate(NULL, &wi); +    }      /* Set fore- and background colors for both windows */      gwinSetColor(GW1, Black); @@ -53,9 +59,9 @@ int main(void) {      gwinClear(GW1);      gwinClear(GW2); -    gwinDrawLine (GW1, 5, 30, 150, 110); +    gwinDrawLine(GW1, 5, 30, 150, 110);      for(i=5, j=0; i < 200 && j < 150; i+=3, j+=i/20) -        	gwinDrawPixel (GW1, i, j); +        	gwinDrawPixel(GW1, i, j);      /*         * Draw two filled circles at the same coordinate diff --git a/demos/modules/gwin/console/main.c b/demos/modules/gwin/console/main.c index aa3de40d..197a8ad6 100644 --- a/demos/modules/gwin/console/main.c +++ b/demos/modules/gwin/console/main.c @@ -28,27 +28,37 @@   */  #include "gfx.h" -#include "chprintf.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;  	/* initialize and clear the display */  	gfxInit(); -	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 some fonts */ +	font1 = gdispOpenFont("Small"); +	font2 = gdispOpenFont("UI2 Double"); +	gwinSetDefaultFont(font1); + +	/* create the three console windows */ +	{ +		GWindowInit		wi; + +		wi.show = TRUE; +		wi.x = 0; wi.y = 0; wi.width = gdispGetWidth(); wi.height = gdispGetHeight()/2; +		GW1 = gwinConsoleCreate(NULL, &wi); +		wi.y = gdispGetHeight()/2; wi.width = gdispGetWidth()/2; wi.height = gdispGetHeight(); +		GW2 = gwinConsoleCreate(NULL, &wi); +		wi.x = gdispGetWidth()/2; wi.height = gdispGetHeight(); +		GW3 = gwinConsoleCreate(NULL, &wi); +	} + +	/* Use a special font for GW1 */ +	gwinSetFont(GW1, font2);  	/* Set the fore- and background colors for each console */  	gwinSetColor(GW1, Green); @@ -63,24 +73,19 @@ int main(void) {  	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"); +		gwinPrintf(GW1, "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); +		gwinPrintf(GW2, "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); +		gwinPrintf(GW3, "Message Nr.: %d\r\n", i+1);  	}  	while(TRUE) { diff --git a/demos/modules/gwin/slider/gfxconf.h b/demos/modules/gwin/slider/gfxconf.h deleted file mode 100644 index b7b39a3f..00000000 --- a/demos/modules/gwin/slider/gfxconf.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org> - * 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 <organization> 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 <COPYRIGHT HOLDER> 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 */ -#define GFX_USE_OS_CHIBIOS		TRUE -#define GFX_USE_OS_WIN32		FALSE -#define GFX_USE_OS_POSIX		FALSE - -/* 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 -#define GINPUT_NEED_DIAL		TRUE - -#endif /* _GFXCONF_H */ diff --git a/demos/modules/gwin/slider/main.c b/demos/modules/gwin/slider/main.c deleted file mode 100644 index 15dc3e26..00000000 --- a/demos/modules/gwin/slider/main.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org> - * 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 <organization> 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 <COPYRIGHT HOLDER> 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" -#include "chprintf.h" - -static GListener gl; - -#define SLIDER_WIDTH	20 - -int main(void) { -	coord_t				swidth, sheight; -	GHandle				ghSliderH, ghSliderV, ghConsole; -	font_t				fui2; -	GEvent *			pe; -	GEventGWinSlider *	pSliderEvent; -	BaseSequentialStream *consout; - -	gfxInit();		// Initialize the display - -	// 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 and dials to the sliders. -#if GINPUT_NEED_MOUSE -	gwinAttachSliderMouse(ghSliderH, 0); -	gwinAttachSliderMouse(ghSliderV, 0); -#endif -#if GINPUT_NEED_DIAL -	gwinAttachSliderDial(ghSliderV, 0); -	gwinAttachSliderDial(ghSliderH, 1); -#endif - -    // 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 -		pe = geventEventWait(&gl, TIME_INFINITE); - -		switch(pe->type) { -		case GEVENT_GWIN_SLIDER: -			pSliderEvent = (GEventGWinSlider *)pe; -			chprintf(consout, "%c=%d\n", pSliderEvent->slider == ghSliderH ? 'H' : 'V', pSliderEvent->position); -			break; -		} -	} - -	return 0; -} diff --git a/demos/modules/gwin/slider/readme.txt b/demos/modules/gwin/slider/readme.txt deleted file mode 100644 index 02d733e9..00000000 --- a/demos/modules/gwin/slider/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -This demo supports input from both a mouse/touch and/or a dial input. -If your platform does not support one or the other, turn it off in -gfxconf.h - -Note that you will need to include the drivers into your project -makefile for whichever inputs you decide to use. diff --git a/demos/modules/gwin/slider/result_647x490.png b/demos/modules/gwin/slider/result_647x490.png Binary files differdeleted file mode 100644 index c7b12a93..00000000 --- a/demos/modules/gwin/slider/result_647x490.png +++ /dev/null diff --git a/demos/modules/gwin/widgets/main.c b/demos/modules/gwin/widgets/main.c index e0e4c401..bff842f4 100644 --- a/demos/modules/gwin/widgets/main.c +++ b/demos/modules/gwin/widgets/main.c @@ -31,37 +31,192 @@  // include our chibios logo in a .gif format  #include "image_chibios.h" +/** + * This demo demonstrates many of the GWIN widgets. + * On the "Radio" tab try playing with the color radio buttons. + * On the "Checkbox" tab try playing with the "Disable All" checkbox. + */ + +/* Our custom yellow style */ +static const GWidgetStyle YellowWidgetStyle = { +	Yellow,							// window background + +	// enabled color set +	{ +		HTML2COLOR(0x0000FF),		// text +		HTML2COLOR(0x404040),		// edge +		HTML2COLOR(0xE0E0E0),		// fill +		HTML2COLOR(0xE0E0E0),		// progress - inactive area +	}, + +	// disabled color set +	{ +		HTML2COLOR(0xC0C0C0),		// text +		HTML2COLOR(0x808080),		// edge +		HTML2COLOR(0xE0E0E0),		// fill +		HTML2COLOR(0xC0E0C0),		// progress - active area +	}, + +	// pressed color set +	{ +		HTML2COLOR(0xFF00FF),		// text +		HTML2COLOR(0x404040),		// edge +		HTML2COLOR(0x808080),		// fill +		HTML2COLOR(0x00E000),		// progress - active area +	}, +}; + +/* The variables we need */  static GListener	gl;  static GHandle		ghConsole;  static GHandle		ghTabButtons, ghTabSliders, ghTabCheckboxes, ghTabLabels, ghTabRadios, ghTabImages;  static GHandle		ghButton1, ghButton2, ghButton3, ghButton4;  static GHandle		ghSlider1, ghSlider2, ghSlider3, ghSlider4; -static GHandle		ghCheckbox1, ghCheckbox2; +static GHandle		ghCheckbox1, ghCheckbox2, ghCheckDisableAll;  static GHandle		ghLabel1;  static GHandle		ghRadio1, ghRadio2; -static GHandle	ghImage1; - -#define	ScrWidth		gdispGetWidth() -#define	ScrHeight		gdispGetHeight() - -#define TAB_HEIGHT		30 -#define BUTTON_WIDTH	50 -#define BUTTON_HEIGHT	30 -#define SLIDER_WIDTH	20 -#define CHECKBOX_WIDTH	80 -#define CHECKBOX_HEIGHT	20 -#define RADIO_WIDTH		50 -#define RADIO_HEIGHT	20 -#define GROUP_TABS		0 -#define GROUP_R1R2		1 - -static GHandle createTab(GWidgetInit *pwi) { -	GHandle		gh; - -	gh = gwinCreateRadio(NULL, pwi, GROUP_TABS); -	gwinSetCustomDraw(gh, gwinRadioDraw_Tab, 0); -	gwinSetVisible(gh, TRUE); -	return gh; +static GHandle		ghRadioBlack, ghRadioWhite, ghRadioYellow; +static GHandle		ghImage1; + +/* Some useful macros */ +#define	ScrWidth			gdispGetWidth() +#define	ScrHeight			gdispGetHeight() + +#define TAB_HEIGHT			30 +#define LABEL_HEIGHT		40 +#define BUTTON_WIDTH		50 +#define BUTTON_HEIGHT		30 +#define SLIDER_WIDTH		20 +#define CHECKBOX_WIDTH		80 +#define CHECKBOX_HEIGHT		20 +#define RADIO_WIDTH			50 +#define RADIO_HEIGHT		20 +#define COLOR_WIDTH			80 +#define DISABLEALL_WIDTH	100 +#define GROUP_TABS			0 +#define GROUP_YESNO			1 +#define GROUP_COLORS		2 + +/** + * Create all the widgets. + * With the exception of the Tabs they are all created invisible. + */ +static void createWidgets(void) { +	GWidgetInit		wi; + +	wi.customDraw = 0; wi.customParam = 0; wi.customStyle = 0; + +	// Create the Tabs +	wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab; +	wi.g.width = ScrWidth/6; wi.g.height = TAB_HEIGHT; wi.g.y = 0; +	wi.g.x = 0*wi.g.width; wi.text = "Buttons";		ghTabButtons	= gwinRadioCreate(NULL, &wi, GROUP_TABS); +	wi.g.x = 1*wi.g.width; wi.text = "Sliders";		ghTabSliders	= gwinRadioCreate(NULL, &wi, GROUP_TABS); +	wi.g.x = 2*wi.g.width; wi.text = "Checkbox";	ghTabCheckboxes	= gwinRadioCreate(NULL, &wi, GROUP_TABS); +	wi.g.x = 3*wi.g.width; wi.text = "Radios";		ghTabRadios		= gwinRadioCreate(NULL, &wi, GROUP_TABS); +	wi.g.x = 4*wi.g.width; wi.text = "Labels";		ghTabLabels		= gwinRadioCreate(NULL, &wi, GROUP_TABS); +	wi.g.x = 5*wi.g.width; wi.text = "Images";		ghTabImages		= gwinRadioCreate(NULL, &wi, GROUP_TABS); + +	// Buttons +	wi.g.show = FALSE; wi.customDraw = 0; +	wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5; +	wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinButtonCreate(NULL, &wi); +	wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinButtonCreate(NULL, &wi); +	wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinButtonCreate(NULL, &wi); +	wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinButtonCreate(NULL, &wi); + +	// Horizontal Sliders +	wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1; +	wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinSliderCreate(NULL, &wi); +	wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinSliderCreate(NULL, &wi); + +	// Vertical Sliders +	wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1; +	wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinSliderCreate(NULL, &wi); +	wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinSliderCreate(NULL, &wi); + +	// Checkboxes - for the 2nd checkbox we apply special drawing before making it visible +	wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0; +	wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCheckboxCreate(NULL, &wi); +	wi.customDraw = gwinCheckboxDraw_CheckOnRight; +	wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCheckboxCreate(NULL, &wi); +	wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH; +	wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Disable All"; ghCheckDisableAll = gwinCheckboxCreate(NULL, &wi); + +    // Labels +	wi.g.width = 0;	wi.g.height = LABEL_HEIGHT;	// dynamic width, fixed height +	wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Label"; ghLabel1 = gwinLabelCreate(NULL, &wi); + +	// Radio Buttons +	wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5; +	wi.g.x = 0*wi.g.width; wi.text = "Yes";		ghRadio1	= gwinRadioCreate(NULL, &wi, GROUP_YESNO); +	wi.g.x = 1*wi.g.width; wi.text = "No";		ghRadio2	= gwinRadioCreate(NULL, &wi, GROUP_YESNO); +	wi.g.width = COLOR_WIDTH; wi.g.y += RADIO_HEIGHT+5; +	wi.g.x = 0*wi.g.width; wi.text = "Black";	ghRadioBlack	= gwinRadioCreate(NULL, &wi, GROUP_COLORS); +	wi.g.x = 1*wi.g.width; wi.text = "White";	ghRadioWhite	= gwinRadioCreate(NULL, &wi, GROUP_COLORS); +	wi.g.x = 2*wi.g.width; wi.text = "Yellow";	ghRadioYellow	= gwinRadioCreate(NULL, &wi, GROUP_COLORS); +	gwinRadioPress(ghRadioWhite); + +	// Image +	wi.g.x = ScrWidth-210; wi.g.y = TAB_HEIGHT + 10; wi.g.width = 200; wi.g.height = 200; +	ghImage1 = gwinImageCreate(NULL, &wi.g); +	gwinImageOpenMemory(ghImage1, image_chibios); +	gwinImageCache(ghImage1); + +	// Console - we apply some special colors before making it visible +	wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1; +	wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2+1; +	ghConsole = gwinConsoleCreate(NULL, &wi.g); +    gwinSetColor(ghConsole, Yellow); +    gwinSetBgColor(ghConsole, Black); +} + +/** + * Set the visibility of widgets based on which tab is selected. + */ +static void setTab(GHandle tab) { +	/* Make sure everything is invisible first */ +	gwinSetVisible(ghButton1, FALSE);	gwinSetVisible(ghButton2, FALSE); +	gwinSetVisible(ghButton3, FALSE);	gwinSetVisible(ghButton4, FALSE); +	gwinSetVisible(ghSlider1, FALSE);	gwinSetVisible(ghSlider2, FALSE); +	gwinSetVisible(ghSlider3, FALSE);	gwinSetVisible(ghSlider4, FALSE); +	gwinSetVisible(ghCheckbox1, FALSE);	gwinSetVisible(ghCheckbox2, FALSE);	gwinSetVisible(ghCheckDisableAll, FALSE); +	gwinSetVisible(ghLabel1, FALSE); +	gwinSetVisible(ghRadio1, FALSE);	gwinSetVisible(ghRadio2, FALSE); +	gwinSetVisible(ghRadioWhite, FALSE);gwinSetVisible(ghRadioBlack, FALSE);gwinSetVisible(ghRadioYellow, FALSE); +	gwinSetVisible(ghImage1, FALSE); + +	/* Turn on widgets depending on the tab selected */ +	if (tab == ghTabButtons) { +		gwinSetVisible(ghButton1, TRUE);	gwinSetVisible(ghButton2, TRUE); +		gwinSetVisible(ghButton3, TRUE);	gwinSetVisible(ghButton4, TRUE); +	} else if (tab == ghTabSliders) { +		gwinSetVisible(ghSlider1, TRUE);	gwinSetVisible(ghSlider2, TRUE); +		gwinSetVisible(ghSlider3, TRUE);	gwinSetVisible(ghSlider4, TRUE); +	} else if (tab == ghTabCheckboxes) { +		gwinSetVisible(ghCheckbox1, TRUE);	gwinSetVisible(ghCheckbox2, TRUE);	gwinSetVisible(ghCheckDisableAll, TRUE); +	} else if (tab == ghTabLabels) { +		gwinSetVisible(ghLabel1, TRUE); +	} else if (tab == ghTabRadios) { +		gwinSetVisible(ghRadio1, TRUE);		gwinSetVisible(ghRadio2, TRUE); +		gwinSetVisible(ghRadioWhite, TRUE);	gwinSetVisible(ghRadioBlack, TRUE);	gwinSetVisible(ghRadioYellow, TRUE); +	} else if (tab == ghTabImages) { +		gwinSetVisible(ghImage1, TRUE); +	} +} + +/** + * Set the enabled state of every widget (except the tabs etc) + */ +static void setEnabled(bool_t ena) { +	gwinSetEnabled(ghButton1, ena);		gwinSetEnabled(ghButton2, ena); +	gwinSetEnabled(ghButton3, ena);		gwinSetEnabled(ghButton4, ena); +	gwinSetEnabled(ghSlider1, ena);		gwinSetEnabled(ghSlider2, ena); +	gwinSetEnabled(ghSlider3, ena);		gwinSetEnabled(ghSlider4, ena); +	gwinSetEnabled(ghCheckbox1, ena);	gwinSetEnabled(ghCheckbox2, ena);	//gwinSetEnabled(ghCheckDisableAll, TRUE); +	gwinSetEnabled(ghLabel1, ena); +	gwinSetEnabled(ghRadio1, ena);		gwinSetEnabled(ghRadio2, ena); +	gwinSetEnabled(ghRadioWhite, ena);	gwinSetEnabled(ghRadioBlack, ena);	gwinSetEnabled(ghRadioYellow, ena); +	gwinSetEnabled(ghImage1, ena);  }  int main(void) { @@ -69,16 +224,11 @@ int main(void) {  	// Initialize the display  	gfxInit(); -	gdispClear(White);  	// Set the widget defaults  	gwinSetDefaultFont(gdispOpenFont("UI2")); -	gwinSetDefaultColor(Black); -	gwinSetDefaultBgColor(White); - -    // We want to listen for widget events -	geventListenerInit(&gl); -	gwinAttachListener(&gl); +	gwinSetDefaultStyle(&WhiteWidgetStyle, FALSE); +	gdispClear(White);  	// Connect the mouse  	#if GINPUT_NEED_MOUSE @@ -86,65 +236,9 @@ int main(void) {  	#endif  	// Create the gwin windows/widgets -	{ -		GWidgetInit		wi; - -		// Create the Tabs -		wi.g.show = FALSE; wi.g.width = ScrWidth/6; wi.g.height = TAB_HEIGHT; wi.g.y = 0; -		wi.g.x = 0*wi.g.width; wi.text = "Buttons";		ghTabButtons	= createTab(&wi); -		wi.g.x = 1*wi.g.width; wi.text = "Sliders";		ghTabSliders	= createTab(&wi); -		wi.g.x = 2*wi.g.width; wi.text = "Checkbox";	ghTabCheckboxes	= createTab(&wi); -		wi.g.x = 3*wi.g.width; wi.text = "Labels";		ghTabLabels		= createTab(&wi); -		wi.g.x = 4*wi.g.width; wi.text = "Radios";		ghTabRadios		= createTab(&wi); -		wi.g.x = 5*wi.g.width; wi.text = "Images";		ghTabImages		= createTab(&wi); - -		// Buttons -		wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5; -		wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinCreateButton(NULL, &wi); -		wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinCreateButton(NULL, &wi); -		wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinCreateButton(NULL, &wi); -		wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinCreateButton(NULL, &wi); - -		// Horizontal Sliders -		wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1; -		wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinCreateSlider(NULL, &wi); -		wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinCreateSlider(NULL, &wi); - -		// Vertical Sliders -		wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1; -		wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinCreateSlider(NULL, &wi); -		wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinCreateSlider(NULL, &wi); - -		// Checkboxes - for the 2nd checkbox we apply special drawing before making it visible -		wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0; -		wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCreateCheckbox(NULL, &wi); -		wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCreateCheckbox(NULL, &wi); -	    gwinSetCustomDraw(ghCheckbox2, gwinCheckboxDraw_CheckOnRight, 0); - -	    // Labels -		wi.g.width = 0;		// dynamic width -		wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "L1"; ghLabel1 = gwinLabelCreate(NULL, &wi); - -		// Radio Buttons -		wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5; -		wi.g.x = 0*wi.g.width; wi.text = "Yes";		ghRadio1	= gwinCreateRadio(NULL, &wi, GROUP_R1R2); -		wi.g.x = 1*wi.g.width; wi.text = "No";		ghRadio2	= gwinCreateRadio(NULL, &wi, GROUP_R1R2); - -		// Image -		wi.g.x = ScrWidth-210; wi.g.y = TAB_HEIGHT + 10; wi.g.width = 200; wi.g.height = 200; -		ghImage1 = gwinImageCreate(NULL, &wi); -		gwinImageOpenMemory(ghImage1, image_chibios); -		gwinImageCache(ghImage1); - -		// Console - we apply some special colors before making it visible -		wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1; -		wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2+1; -		ghConsole = gwinCreateConsole(NULL, &wi.g); -	    gwinSetColor(ghConsole, Yellow); -	    gwinSetBgColor(ghConsole, Black); -	} +	createWidgets(); -    // Assign toggles and dials to the buttons & sliders etc. +    // Assign toggles and dials to specific buttons & sliders etc.  	#if GINPUT_NEED_TOGGLE  		gwinAttachToggle(ghButton1, 0, 0);  		gwinAttachToggle(ghButton2, 0, 1); @@ -158,8 +252,12 @@ int main(void) {  	gwinSetVisible(ghConsole, TRUE);  	gwinClear(ghConsole); -	// Press the Buttons Tab -	gwinPressRadio(ghTabButtons); +    // We want to listen for widget events +	geventListenerInit(&gl); +	gwinAttachListener(&gl); + +	// Press the Tab we want visible +	gwinRadioPress(ghTabButtons);  	while(1) {  		// Get an Event @@ -169,54 +267,68 @@ int main(void) {  		case GEVENT_GWIN_BUTTON:  			gwinPrintf(ghConsole, "Button %s\n", gwinGetText(((GEventGWinButton *)pe)->button));  			break; +  		case GEVENT_GWIN_SLIDER:  			gwinPrintf(ghConsole, "Slider %s=%d\n", gwinGetText(((GEventGWinSlider *)pe)->slider), ((GEventGWinSlider *)pe)->position);  			break; +  		case GEVENT_GWIN_CHECKBOX:  			gwinPrintf(ghConsole, "Checkbox %s=%s\n", gwinGetText(((GEventGWinCheckbox *)pe)->checkbox), ((GEventGWinCheckbox *)pe)->isChecked ? "Checked" : "UnChecked"); + +			// If it is the Disable All checkbox then do that. +			if (((GEventGWinCheckbox *)pe)->checkbox == ghCheckDisableAll) { +				gwinPrintf(ghConsole, "%s All\n", ((GEventGWinCheckbox *)pe)->isChecked ? "Disable" : "Enable"); +				setEnabled(!((GEventGWinCheckbox *)pe)->isChecked); +			}  			break; +  		case GEVENT_GWIN_RADIO:  			gwinPrintf(ghConsole, "Radio Group %u=%s\n", ((GEventGWinRadio *)pe)->group, gwinGetText(((GEventGWinRadio *)pe)->radio)); -			// Is this the tab radio's -			if (((GEventGWinRadio *)pe)->group == GROUP_TABS) { - -				// Do some special animation for Label1 -				if (((GEventGWinRadio *)pe)->radio == ghTabLabels) { -					gwinSetBgColor(ghLabel1, gwinGetDefaultBgColor()); -					gwinSetColor(ghLabel1, gwinGetDefaultColor()); -				} +			switch(((GEventGWinRadio *)pe)->group) { +			case GROUP_TABS:  				// Set control visibility depending on the tab selected -				gwinSetVisible(ghButton1, ((GEventGWinRadio *)pe)->radio == ghTabButtons); -				gwinSetVisible(ghButton2, ((GEventGWinRadio *)pe)->radio == ghTabButtons); -				gwinSetVisible(ghButton3, ((GEventGWinRadio *)pe)->radio == ghTabButtons); -				gwinSetVisible(ghButton4, ((GEventGWinRadio *)pe)->radio == ghTabButtons); -				gwinSetVisible(ghSlider1, ((GEventGWinRadio *)pe)->radio == ghTabSliders); -				gwinSetVisible(ghSlider2, ((GEventGWinRadio *)pe)->radio == ghTabSliders); -				gwinSetVisible(ghSlider3, ((GEventGWinRadio *)pe)->radio == ghTabSliders); -				gwinSetVisible(ghSlider4, ((GEventGWinRadio *)pe)->radio == ghTabSliders); -				gwinSetVisible(ghCheckbox1, ((GEventGWinRadio *)pe)->radio == ghTabCheckboxes); -				gwinSetVisible(ghCheckbox2, ((GEventGWinRadio *)pe)->radio == ghTabCheckboxes); -				gwinSetVisible(ghLabel1, ((GEventGWinRadio *)pe)->radio == ghTabLabels); -				gwinSetVisible(ghRadio1, ((GEventGWinRadio *)pe)->radio == ghTabRadios); -				gwinSetVisible(ghRadio2, ((GEventGWinRadio *)pe)->radio == ghTabRadios); -				gwinSetVisible(ghImage1, ((GEventGWinRadio *)pe)->radio == ghTabImages); - -				// Do some special animation for Label1 +				setTab(((GEventGWinRadio *)pe)->radio); + +				// Do some special animation for Label1 to demonstrate auto width sizing  				if (((GEventGWinRadio *)pe)->radio == ghTabLabels) { +					gwinPrintf(ghConsole, "Change Label Text\n");  					gfxSleepMilliseconds(1000); -				    gwinSetBgColor(ghLabel1, Blue); -				    gwinSetColor(ghLabel1, Yellow);  					gwinSetText(ghLabel1, "Very Big Label", FALSE);  					gfxSleepMilliseconds(1000); -				    gwinSetBgColor(ghLabel1, Yellow); -				    gwinSetColor(ghLabel1, Red); -					gwinSetText(ghLabel1, "L1", FALSE); +					gwinSetText(ghLabel1, "Label", FALSE);  				} +				break; + +			case GROUP_COLORS: +				{ +					const GWidgetStyle	*pstyle; + +					gwinPrintf(ghConsole, "Change Color Scheme\n"); + +					if (((GEventGWinRadio *)pe)->radio == ghRadioYellow) +						pstyle = &YellowWidgetStyle; +					else if (((GEventGWinRadio *)pe)->radio == ghRadioBlack) +						pstyle = &BlackWidgetStyle; +					else +						pstyle = &WhiteWidgetStyle; + +					// Clear the screen to the new color - we avoid the console area as it can't redraw itself +					#if GDISP_NEED_CLIP +						gdispUnsetClip(); +					#endif +					gdispFillArea(0, 0, ScrWidth, ScrHeight/2, pstyle->background); +					gdispFillArea(0, ScrHeight/2, ScrWidth/2, ScrHeight/2, pstyle->background); + +					// Update the style on all controls +					gwinSetDefaultStyle(pstyle, TRUE); +				} +				break;  			}  			break; +  		default:  			gwinPrintf(ghConsole, "Unknown %d\n", pe->type);  			break; diff --git a/demos/modules/gwin/widgets/readme.txt b/demos/modules/gwin/widgets/readme.txt index 02d733e9..b5777061 100644 --- a/demos/modules/gwin/widgets/readme.txt +++ b/demos/modules/gwin/widgets/readme.txt @@ -1,6 +1,8 @@ -This demo supports input from both a mouse/touch and/or a dial input. +This demo supports input from both a mouse/touch, toggles and/or a dial input.  If your platform does not support one or the other, turn it off in  gfxconf.h  Note that you will need to include the drivers into your project  makefile for whichever inputs you decide to use. + +For some fun have a play with the "colors" radio group and the "Disable All" checkbox.  | 
