Funções Solidtec

Revision:
0:73f074c39876
Child:
1:392e0e10ccf7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tela.cpp	Fri Dec 08 19:15:28 2017 +0000
@@ -0,0 +1,189 @@
+#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);
+}
+
+