Funções Solidtec
Revision 1:392e0e10ccf7, committed 2018-11-06
- Comitter:
- marcusncunha
- Date:
- Tue Nov 06 16:28:00 2018 +0000
- Parent:
- 0:73f074c39876
- Commit message:
- 11_06_2018
Changed in this revision
tela.cpp | Show annotated file Show diff for this revision Revisions of this file |
tela.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 73f074c39876 -r 392e0e10ccf7 tela.cpp --- a/tela.cpp Fri Dec 08 19:15:28 2017 +0000 +++ b/tela.cpp Tue Nov 06 16:28:00 2018 +0000 @@ -40,6 +40,11 @@ desenharImagemKey(PICTURE, imagem, cor, xDaImagem, yDaImagem); } +void desenhaBotao(uint32_t cor, botao *botaoObjeto){ + _lcd.SetTextColor(cor); + _lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); +} + void desenhaCaixaMensagem(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corDeBordaCaixa, uint32_t corDeFundoCaixa, dadosRetanguloBase *baseMensagem){ int xDaImagem = baseMensagem->x + (baseMensagem->largura - imagem.largura) / 2; int yDaImagem = baseMensagem->y + (baseMensagem->altura - imagem.altura) / 2; @@ -124,6 +129,109 @@ } } +void desenhaBotaoComLabel(string label, int tamanhoFonte, uint32_t corSemClickLabel, uint32_t corSemClick, botao *botaoObjeto){ + int diferencaX = 0; + int diferencaY = 0; + switch(tamanhoFonte){ + case 16: + _lcd.SetFont(&Font16); + diferencaX = label.length() * 12; + diferencaY = 15; + break; + case 20: + _lcd.SetFont(&Font20); + diferencaX = label.length() * 15; + diferencaY = 20; + break; + case 24: + _lcd.SetFont(&Font16); + diferencaX = label.length() * 18; + diferencaY = 25; + break; + default: + _lcd.SetFont(&Font12); + diferencaX = label.length() * 7; + diferencaY = 10; + break; + } + int xDoLabel = botaoObjeto->retanguloObjeto.x + (botaoObjeto->retanguloObjeto.largura - diferencaX) / 2; + int yDoLabel = botaoObjeto->retanguloObjeto.y + (botaoObjeto->retanguloObjeto.altura - diferencaY) / 2; + + desenhaBotao(corSemClick, botaoObjeto); + _lcd.SetTextColor(corSemClickLabel); + _lcd.SetBackColor(corSemClick); + _lcd.DisplayStringAt(xDoLabel, yDoLabel, (uint8_t *)label.c_str(), LEFT_MODE); +} + +void iniciarBotaoComLabel(string label, int tamanhoFonte, uint32_t corSemClickLabel, uint32_t corComClickLabel, uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela){ + bool isDentroBotaoX = 0; + bool isDentroBotaoY = 0; + int diferencaX = 0; + int diferencaY = 0; + switch(tamanhoFonte){ + case 16: + _lcd.SetFont(&Font16); + diferencaX = label.length() * 12; + diferencaY = 15; + break; + case 20: + _lcd.SetFont(&Font20); + diferencaX = label.length() * 15; + diferencaY = 20; + break; + case 24: + _lcd.SetFont(&Font16); + diferencaX = label.length() * 18; + diferencaY = 25; + break; + default: + _lcd.SetFont(&Font12); + diferencaX = label.length() * 7; + diferencaY = 10; + break; + } + int xDoLabel = botaoObjeto->retanguloObjeto.x + (botaoObjeto->retanguloObjeto.largura - diferencaX) / 2; + int yDoLabel = botaoObjeto->retanguloObjeto.y + (botaoObjeto->retanguloObjeto.altura - diferencaY) / 2; + uint16_t cliqueX = toqueTela->touchX[0]; + uint16_t cliqueY = toqueTela->touchY[0]; + + //Testar se foi na área do botão em x e marca o flag + if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){ + isDentroBotaoX = 1; + } + + //Testar se foi na área do botão em y e marca o flag + if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){ + isDentroBotaoY = 1; + } + + //Testa se está dentro da área do botão XY + if(isDentroBotaoX && isDentroBotaoY){ + //Se ele não estava pressionado + if(!(botaoObjeto->isPressed)){ + botaoObjeto->depressTime.start(); + botaoObjeto->isPressed = 1; + desenhaBotao(corComClick, botaoObjeto); + _lcd.SetTextColor(corComClickLabel); + _lcd.SetBackColor(corComClick); + _lcd.DisplayStringAt(xDoLabel, yDoLabel, (uint8_t *)label.c_str(), LEFT_MODE); + } + }else{ + //Se ele estava pressionado + if((botaoObjeto->isPressed)){ + botaoObjeto->depressTime.stop(); + botaoObjeto->isPressed = 0; + if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ + botaoObjeto->updateFlag = 1; + } + desenhaBotao(corSemClick, botaoObjeto); + _lcd.SetTextColor(corSemClickLabel); + _lcd.SetBackColor(corSemClick); + _lcd.DisplayStringAt(xDoLabel, yDoLabel, (uint8_t *)label.c_str(), LEFT_MODE); + } + } +} + void iniciarBotaoComImagemClick(const unsigned long *PICTURE, const unsigned long *PICTURECLK, dadosImagem imagem, dadosImagem imagemClk,uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela){ bool isDentroBotaoX = 0; bool isDentroBotaoY = 0;
diff -r 73f074c39876 -r 392e0e10ccf7 tela.h --- a/tela.h Fri Dec 08 19:15:28 2017 +0000 +++ b/tela.h Tue Nov 06 16:28:00 2018 +0000 @@ -6,6 +6,7 @@ #include "mbed.h" #include "LCD_DISCO_F746NG.h" #include "TS_DISCO_F746NG.h" +#include <string> //Constantes de Botão #define TEMPO_PRESSIONADO_BOTAO 0.01000f @@ -61,6 +62,8 @@ ** Função desenhaBotaoComImagem desenha o botão retangular com a cor informada e coloca a imagem sobreposta com Key */ void desenhaBotaoComImagem (const unsigned long *PICTURE, dadosImagem imagem, uint32_t cor, botao *botaoObjeto); + +void desenhaBotaoComLabel(string label, int tamanhoFonte, uint32_t corSemClickLabel, uint32_t corSemClick, botao *botaoObjeto); /* ** Função iniciarBotaoArea limita área de toque aonde cria um evento de botão. Para funcionar tem que gerar ** condição de update do flag e função de callback @@ -90,6 +93,8 @@ */ void iniciarBotaoComImagem(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela); +void iniciarBotaoComLabel(string label, int tamanhoFonte, uint32_t corSemClickLabel, uint32_t corComClickLabel, uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela); + void iniciarBotaoComImagemClick(const unsigned long *PICTURE, const unsigned long *PICTURECLK, dadosImagem imagem, dadosImagem imagemClk,uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela); /*