diff options
| author | Tectu <joel@unormal.org> | 2012-08-13 04:11:03 +0200 | 
|---|---|---|
| committer | Tectu <joel@unormal.org> | 2012-08-13 04:11:03 +0200 | 
| commit | 54229cbdaaf585b5adf9b085229a22c9824c112c (patch) | |
| tree | 846e654318f88d309bf6f7f0aadbf640d8cdd04b /gui | |
| parent | e7f0c8e2c2791fd2e571c762f03e277161f98a4b (diff) | |
| download | uGFX-54229cbdaaf585b5adf9b085229a22c9824c112c.tar.gz uGFX-54229cbdaaf585b5adf9b085229a22c9824c112c.tar.bz2 uGFX-54229cbdaaf585b5adf9b085229a22c9824c112c.zip | |
restructure
Diffstat (limited to 'gui')
| -rw-r--r-- | gui/gui.c | 334 | ||||
| -rw-r--r-- | gui/gui.h | 115 | ||||
| -rw-r--r-- | gui/gui.mk | 3 | 
3 files changed, 0 insertions, 452 deletions
| diff --git a/gui/gui.c b/gui/gui.c deleted file mode 100644 index 40553d86..00000000 --- a/gui/gui.c +++ /dev/null @@ -1,334 +0,0 @@ -/* -    ChibiOS/RT - Copyright (C) 2012 -                 Joel Bodenmann aka Tectu <joel@unormal.org> - -    This file is part of ChibiOS-LCD-Driver. - -    ChibiOS-LCD-Driver 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-LCD-Driver 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 "gui.h" - -static struct guiNode_t *firstGUI = NULL; -uint16_t x, y; 	// global touchpad coordinates - -static uint8_t addElement(struct guiNode_t *newNode) { -	struct guiNode_t *new; - -	if(firstGUI == NULL) { -		firstGUI = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -		if(firstGUI == NULL) -			return 0; - -		*firstGUI = *newNode; -		firstGUI->next = NULL; -	} else { -		new = firstGUI; -		while(new->next != NULL) -			new = new->next; - -		new->next = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -		if(new->next == NULL) -			return 0; - -		new = new->next; -		*new = *newNode; -		new->next = NULL; -	} - -	return 1; -} - -static uint8_t deleteElement(char *label) { -	struct guiNode_t *pointer, *pointer1; - -	if(firstGUI != NULL) { -		if(strcmp(firstGUI->label, label) == 0) { -			pointer = firstGUI->next; -			chHeapFree(firstGUI); -			firstGUI = pointer; -		} else { -			pointer = firstGUI; - -			while(pointer->next != NULL) { -				pointer1 = pointer->next; - -				if(strcmp(firstGUI->label, label) == 0) { -					pointer->next = pointer1->next; -					chHeapFree(pointer1); -					break; -				} - -				pointer = pointer1; - -			} -		} - -		return 1; // successful -	} - -	return 0;	// not successful -} - -void guiPrintElements(BaseSequentialStream *chp) { -	struct guiNode_t *pointer = firstGUI; - -	chprintf(chp, "\r\n\nguiNodes:\r\n\n"); - -	while(pointer != NULL) { -		chprintf(chp, "x0:      %d\r\n", pointer->x0); -		chprintf(chp, "y0:      %d\r\n", pointer->y0); -		chprintf(chp, "x1:      %d\r\n", pointer->x1); -		chprintf(chp, "y1:      %d\r\n", pointer->y1); -		chprintf(chp, "label:    %s\r\n", pointer->label); -		chprintf(chp, "active:  %d\r\n", *(pointer->active)); -		chprintf(chp, "state:   %d\r\n", *(pointer->state)); -		chprintf(chp, "*next:   0x%x\r\n", pointer->next); -		chprintf(chp, "\r\n\n"); -		pointer = pointer->next; -	} -} - -static inline void buttonUpdate(struct guiNode_t *node) { -	if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) { -		*(node->state) = 1; -	} else { -		*(node->state) = 0; -	}  -} - -static inline void sliderUpdate(struct guiNode_t *node) { -	uint16_t length = 1; - -	if(node->orientation == horizontal) -		length = node->x1 - node->x0; -	else if(node->orientation == vertical) -		length = node->y1 - node->y0; - -	if(node->mode == modePassive) { -		node->percentage = *(node->state); -	} else if(node->mode == modeActive) { -		if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) { -			if(node->orientation == horizontal) { -				node->percentage = (((x - node->x0) * 100) / length); -			} else if(node->orientation == vertical) { -				node->percentage = (((y - node->y0) * 100) / length); -			} -		} - -		*(node->state) = node->percentage; -	} - -	// a bit of safety here -	if(node->percentage > 100) -		node->percentage = 100; -	 -	if(node->orientation == horizontal) { -		node->value = ((((node->x1)-(node->x0)) * node->percentage) / 100); -		if(node->oldValue > node->value || node->value == 0) -			lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor); -		else -			lcdDrawRect(node->x0+1, node->y0+1, node->x0+node->value, node->y1, filled, node->valueColor);	 -	} else if(node->orientation == vertical) { -		node->value = ((((node->y1)-(node->y0)) * node->percentage) / 100); -		if(node->oldValue > node->value || node->value == 0) -			lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor); -		else -			lcdDrawRect(node->x0+1, node->y0+1, node->x1, node->y0+node->value, filled, node->valueColor); -	} - -	node->oldValue = node->value; -} - -static inline void wheelUpdate(struct guiNode_t *node) { -	(void)node; -} - -static inline void keymatrixUpdate(struct guiNode_t *node) { -	(void)node; -} - -static void guiThread(const uint16_t interval) { -	struct guiNode_t *node; - -	chRegSetThreadName("GUI"); - -	while(TRUE) { -		for(node = firstGUI; node; node = node->next) { -			// check if GUI element is set active -			if(*(node->active) == active) { -				x = tpReadX(); -				y = tpReadY(); - -				switch(node->type) { -					case button: -						buttonUpdate(node); -						break; -					case slider: -						sliderUpdate(node); -						break; -					case wheel: -						wheelUpdate(node); -						break; -					case keymatrix: -						keymatrixUpdate(node); -						break; -				} -			} -		} -		 -		chThdSleepMilliseconds(interval); -	} -} - -Thread *guiInit(uint16_t interval, tprio_t priority) { -	Thread *tp = NULL; - -	tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(512), priority, guiThread, interval); - -	return tp; -} - -uint8_t guiDeleteElement(char *label) { -	return deleteElement(label); -} - -uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state) { -	struct guiNode_t *newNode; -	uint16_t i; - -	newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -	if(newNode == NULL) -		return 0; -	 -	newNode->type = button; -	newNode->label = label; -	newNode->x0 = x0; -	newNode->y0 = y0; -	newNode->x1 = x1; -	newNode->y1 = y1; -	newNode->shadow = shadow; -	newNode->active = active; -	newNode->state = state;	 - -	if(addElement(newNode) != 1) -		return 0; -	 -	lcdDrawRectString(x0, y0, x1, y1, str, font, fontColor, buttonColor); - -	if(shadow != 0) { -		for(i = 0; i < shadow; i++) { -			lcdDrawLine(x0+shadow, y1+i, x1+shadow-1, y1+i, Black); -			lcdDrawLine(x1+i, y0+shadow, x1+i, y1+shadow-1, Black); -		} -	} - -	chHeapFree(newNode); - -	return 1; -} - -uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) { -	struct guiNode_t *newNode; - -	newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -	if(newNode == NULL) -		return 0; - -	newNode->type = slider; -	newNode->label = label; -	newNode->x0 = x0; -	newNode->y0 = y0; -	newNode->x1 = x1; -	newNode->y1 = y1; -	newNode->mode = mode; -	newNode->bkColor = bkColor; -	newNode->valueColor = valueColor; -	newNode->state = value; -	newNode->active = active; -	newNode->orientation = orientation; -	newNode->percentage = 0; - -	if(addElement(newNode) != 1) -		return 0; - -	(void)bkColor; -	(void)valueColor; -	 -	// lcdDraw functions -	lcdDrawRect(x0, y0, x1, y1, frame, frameColor); -	 -	chHeapFree(newNode); - -	return 1; -} - -uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) { -	struct guiNode_t *newNode; - -	newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -	if(newNode == NULL) -		return 0; - -	newNode->type = wheel; -	newNode->label = label; -	newNode->x0 = x0; -	newNode->y0 = y0; -	newNode->r1 = radius1; -	newNode->r2 = radius2; -	newNode->active = active; -	newNode->state = value; - -	if(addElement(newNode) != 1) -		return 0; - -	(void)bkColor; -	(void)valueColor; -	// lcdDraw functions - -	chHeapFree(newNode); - -	return 1; -} - -uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t size, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value) { -	struct guiNode_t *newNode; - -	newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); -	if(newNode == NULL) -		return 0; - -	newNode->type = keymatrix; -	newNode->label = label; -	newNode->x0 = x0; -	newNode->y0 = y0; -	newNode->shadow = shadow; -	newNode->active = active; -	newNode->state = value; - -	if(addElement(newNode) != 1) -		return 0; - -	// lcdDraw functions -	(void)size; -	(void)space; -	(void)buttonColor; -	(void)fontColor; -	(void)font; - -	chHeapFree(newNode); - -	return 1; -} - diff --git a/gui/gui.h b/gui/gui.h deleted file mode 100644 index 04d9a8b1..00000000 --- a/gui/gui.h +++ /dev/null @@ -1,115 +0,0 @@ -/* -    ChibiOS/RT - Copyright (C) 2012 -                 Joel Bodenmann aka Tectu <joel@unormal.org> - -    This file is part of ChibiOS-LCD-Driver. - -    ChibiOS-LCD-Driver 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-LCD-Driver 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/>. -*/ - -#ifndef GUI_H -#define GUI_H - -#include "ch.h" -#include "hal.h" -#include "glcd.h" -#include "chprintf.h" -#include "touchpad.h" -#include <string.h> - -struct guiNode_t { -	uint8_t type; -	uint16_t x0; -	uint16_t y0; -	uint16_t x1; -	uint16_t y1; -	uint16_t r1; -	uint16_t r2; -	uint16_t shadow; -	uint16_t bkColor; -	uint16_t valueColor; -	uint16_t value; -	uint16_t oldValue; -	uint16_t percentage; -	uint8_t orientation; -	uint8_t mode; -	uint8_t *active; -	uint8_t *state; -	char *label; -	struct guiNode_t *next; -}; - -#ifdef __cplusplus -extern "C" { -#endif - -enum {button, slider, wheel, keymatrix}; -enum {horizontal, vertical}; -enum {inactive, active}; -enum {modePassive, modeActive}; - -/* - * Description: creates the GUI thread - * - * param:		- interval:	thread sleep in milliseconds after each GUI element update - *				- priority: priority of the thread - * - * return:		pointer to created thread - */ -Thread *guiInit(uint16_t interval, tprio_t priority); - -/* - * Description: prints all GUI elements structs (linked list) - *  - * param:		- chp: pointer to output stream - * - * return:		none - */ -void guiPrintElements(BaseSequentialStream *chp); - -/* - * Description: deletes a GUI element from the linked list - * - * param:		- label: label of the element (parameter of each guiDrawXXX function) - * - * return:		1 if successful, 0 otherwise - */ -uint8_t guiDeleteElement(char *label); - -/* - * Description: draws a button on the screen and keeps it's state up to date - * - * param:		- x0, y0, x1, y1:	start and end coordinates of the button's rectangle - *				- str:				string that gets drawn into the rectangle - button's lable - *				- fontColor:		color of the lable - *				- buttonColor:		color of the rectangle - *				- shadow:			draws a black shadow with N pixels size if != 0  - *				- active:			pass pointer to variable which holds the state 'active' or 'inactive' - *				- state:			pass pointer to variable whcih will keep the state of the button (pressed / unpressed)' - * - * return:		1 if button successfully created - */ -uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state); - -uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value); - -uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value); - -uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t buttonSize, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/gui/gui.mk b/gui/gui.mk deleted file mode 100644 index e25cbd73..00000000 --- a/gui/gui.mk +++ /dev/null @@ -1,3 +0,0 @@ -LCD_GUI_SRC	=		$(LCDLIB)/gui/gui.c  - -LCD_GUI_INC =		$(LCDLIB)/gui | 
