Funções Solidtec
tela.cpp
- Committer:
- marcusncunha
- Date:
- 2017-12-08
- Revision:
- 0:73f074c39876
- Child:
- 1:392e0e10ccf7
File content as of revision 0:73f074c39876:
#include "tela.h" LCD_DISCO_F746NG _lcd; void desenharImagem(const unsigned long *PICTURE, uint16_t largura, uint16_t altura,uint16_t posX, uint16_t posY){ int i; int j; int contadorImagem = 0; for (i=0; i<altura; i++){ for (j=0; j<largura; j++){ _lcd.DrawPixel(j + posX,i + posY,PICTURE[contadorImagem]); contadorImagem++; } } } void desenharImagemKey(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corDeFundo,uint16_t posX, uint16_t posY){ int i; int j; int contadorKey = 0; for (i=0; i<imagem.altura; i++){ for (j=0; j<imagem.largura; j++){ if (PICTURE[contadorKey] == imagem.corKey){ _lcd.DrawPixel(j + posX,i + posY,corDeFundo); } else { _lcd.DrawPixel(j + posX,i + posY,PICTURE[contadorKey]); } contadorKey++; } } } void desenhaBotaoComImagem (const unsigned long *PICTURE, dadosImagem imagem, uint32_t cor, botao *botaoObjeto){ int xDaImagem = botaoObjeto->retanguloObjeto.x + (botaoObjeto->retanguloObjeto.largura - imagem.largura) / 2; int yDaImagem = botaoObjeto->retanguloObjeto.y + (botaoObjeto->retanguloObjeto.altura - imagem.altura) / 2; _lcd.SetTextColor(cor); _lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); desenharImagemKey(PICTURE, imagem, cor, xDaImagem, yDaImagem); } 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; _lcd.SetTextColor(corDeFundoCaixa); _lcd.FillRect(baseMensagem->x, baseMensagem->y, baseMensagem->largura, baseMensagem->altura); desenharImagemKey(PICTURE, imagem, corDeFundoCaixa, xDaImagem, yDaImagem); _lcd.SetTextColor(corDeBordaCaixa); _lcd.DrawRect(baseMensagem->x, baseMensagem->y, baseMensagem->largura, baseMensagem->altura); } void iniciarBotaoArea(botao *botaoObjeto, TS_StateTypeDef *toqueTela){ bool isDentroBotaoX = 0; bool isDentroBotaoY = 0; 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; } }else{ //Se ele estava pressionado if((botaoObjeto->isPressed)){ botaoObjeto->depressTime.stop(); botaoObjeto->isPressed = 0; if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ botaoObjeto->updateFlag = 1; } } } } void iniciarBotaoComImagem(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela){ bool isDentroBotaoX = 0; bool isDentroBotaoY = 0; 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; desenhaBotaoComImagem (PICTURE, imagem, corComClick, botaoObjeto); } }else{ //Se ele estava pressionado if((botaoObjeto->isPressed)){ botaoObjeto->depressTime.stop(); botaoObjeto->isPressed = 0; if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ botaoObjeto->updateFlag = 1; } desenhaBotaoComImagem (PICTURE, imagem, corSemClick, botaoObjeto); } } } 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; 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; desenhaBotaoComImagem (PICTURECLK, imagemClk, corComClick, botaoObjeto); } }else{ //Se ele estava pressionado if((botaoObjeto->isPressed)){ botaoObjeto->depressTime.stop(); botaoObjeto->isPressed = 0; if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ botaoObjeto->updateFlag = 1; } desenhaBotaoComImagem (PICTURE, imagem, corSemClick, botaoObjeto); } } } void escreverInteiroTelaDireita(int variavel, int x, int y){ char txtTemporario[50]; sprintf(txtTemporario, "%d", variavel); _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, RIGHT_MODE); } void escreverInteiroTelaEsquerda(int variavel, int x, int y){ char txtTemporario[50]; sprintf(txtTemporario, "%d", variavel); _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, LEFT_MODE); } void escreverDoubleTelaDireita(double variavel, int x, int y){ char txtTemporario[50]; sprintf(txtTemporario, "%.2f", variavel); _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, RIGHT_MODE); } void escreverDoubleTelaEsquerda(double variavel, int x, int y){ char txtTemporario[50]; sprintf(txtTemporario, "%.2f", variavel); _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, LEFT_MODE); }