Funções Solidtec
tela.cpp@0:73f074c39876, 2017-12-08 (annotated)
- Committer:
- marcusncunha
- Date:
- Fri Dec 08 19:15:28 2017 +0000
- Revision:
- 0:73f074c39876
- Child:
- 1:392e0e10ccf7
Solidtec
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcusncunha | 0:73f074c39876 | 1 | #include "tela.h" |
marcusncunha | 0:73f074c39876 | 2 | |
marcusncunha | 0:73f074c39876 | 3 | LCD_DISCO_F746NG _lcd; |
marcusncunha | 0:73f074c39876 | 4 | |
marcusncunha | 0:73f074c39876 | 5 | void desenharImagem(const unsigned long *PICTURE, uint16_t largura, uint16_t altura,uint16_t posX, uint16_t posY){ |
marcusncunha | 0:73f074c39876 | 6 | int i; |
marcusncunha | 0:73f074c39876 | 7 | int j; |
marcusncunha | 0:73f074c39876 | 8 | int contadorImagem = 0; |
marcusncunha | 0:73f074c39876 | 9 | for (i=0; i<altura; i++){ |
marcusncunha | 0:73f074c39876 | 10 | for (j=0; j<largura; j++){ |
marcusncunha | 0:73f074c39876 | 11 | _lcd.DrawPixel(j + posX,i + posY,PICTURE[contadorImagem]); |
marcusncunha | 0:73f074c39876 | 12 | contadorImagem++; |
marcusncunha | 0:73f074c39876 | 13 | } |
marcusncunha | 0:73f074c39876 | 14 | } |
marcusncunha | 0:73f074c39876 | 15 | } |
marcusncunha | 0:73f074c39876 | 16 | |
marcusncunha | 0:73f074c39876 | 17 | void desenharImagemKey(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corDeFundo,uint16_t posX, uint16_t posY){ |
marcusncunha | 0:73f074c39876 | 18 | int i; |
marcusncunha | 0:73f074c39876 | 19 | int j; |
marcusncunha | 0:73f074c39876 | 20 | int contadorKey = 0; |
marcusncunha | 0:73f074c39876 | 21 | for (i=0; i<imagem.altura; i++){ |
marcusncunha | 0:73f074c39876 | 22 | for (j=0; j<imagem.largura; j++){ |
marcusncunha | 0:73f074c39876 | 23 | if (PICTURE[contadorKey] == imagem.corKey){ |
marcusncunha | 0:73f074c39876 | 24 | _lcd.DrawPixel(j + posX,i + posY,corDeFundo); |
marcusncunha | 0:73f074c39876 | 25 | } |
marcusncunha | 0:73f074c39876 | 26 | else |
marcusncunha | 0:73f074c39876 | 27 | { |
marcusncunha | 0:73f074c39876 | 28 | _lcd.DrawPixel(j + posX,i + posY,PICTURE[contadorKey]); |
marcusncunha | 0:73f074c39876 | 29 | } |
marcusncunha | 0:73f074c39876 | 30 | contadorKey++; |
marcusncunha | 0:73f074c39876 | 31 | } |
marcusncunha | 0:73f074c39876 | 32 | } |
marcusncunha | 0:73f074c39876 | 33 | } |
marcusncunha | 0:73f074c39876 | 34 | |
marcusncunha | 0:73f074c39876 | 35 | void desenhaBotaoComImagem (const unsigned long *PICTURE, dadosImagem imagem, uint32_t cor, botao *botaoObjeto){ |
marcusncunha | 0:73f074c39876 | 36 | int xDaImagem = botaoObjeto->retanguloObjeto.x + (botaoObjeto->retanguloObjeto.largura - imagem.largura) / 2; |
marcusncunha | 0:73f074c39876 | 37 | int yDaImagem = botaoObjeto->retanguloObjeto.y + (botaoObjeto->retanguloObjeto.altura - imagem.altura) / 2; |
marcusncunha | 0:73f074c39876 | 38 | _lcd.SetTextColor(cor); |
marcusncunha | 0:73f074c39876 | 39 | _lcd.FillRect(botaoObjeto->retanguloObjeto.x, botaoObjeto->retanguloObjeto.y, botaoObjeto->retanguloObjeto.largura, botaoObjeto->retanguloObjeto.altura); |
marcusncunha | 0:73f074c39876 | 40 | desenharImagemKey(PICTURE, imagem, cor, xDaImagem, yDaImagem); |
marcusncunha | 0:73f074c39876 | 41 | } |
marcusncunha | 0:73f074c39876 | 42 | |
marcusncunha | 0:73f074c39876 | 43 | void desenhaCaixaMensagem(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corDeBordaCaixa, uint32_t corDeFundoCaixa, dadosRetanguloBase *baseMensagem){ |
marcusncunha | 0:73f074c39876 | 44 | int xDaImagem = baseMensagem->x + (baseMensagem->largura - imagem.largura) / 2; |
marcusncunha | 0:73f074c39876 | 45 | int yDaImagem = baseMensagem->y + (baseMensagem->altura - imagem.altura) / 2; |
marcusncunha | 0:73f074c39876 | 46 | _lcd.SetTextColor(corDeFundoCaixa); |
marcusncunha | 0:73f074c39876 | 47 | _lcd.FillRect(baseMensagem->x, baseMensagem->y, baseMensagem->largura, baseMensagem->altura); |
marcusncunha | 0:73f074c39876 | 48 | desenharImagemKey(PICTURE, imagem, corDeFundoCaixa, xDaImagem, yDaImagem); |
marcusncunha | 0:73f074c39876 | 49 | _lcd.SetTextColor(corDeBordaCaixa); |
marcusncunha | 0:73f074c39876 | 50 | _lcd.DrawRect(baseMensagem->x, baseMensagem->y, baseMensagem->largura, baseMensagem->altura); |
marcusncunha | 0:73f074c39876 | 51 | } |
marcusncunha | 0:73f074c39876 | 52 | |
marcusncunha | 0:73f074c39876 | 53 | void iniciarBotaoArea(botao *botaoObjeto, TS_StateTypeDef *toqueTela){ |
marcusncunha | 0:73f074c39876 | 54 | bool isDentroBotaoX = 0; |
marcusncunha | 0:73f074c39876 | 55 | bool isDentroBotaoY = 0; |
marcusncunha | 0:73f074c39876 | 56 | |
marcusncunha | 0:73f074c39876 | 57 | uint16_t cliqueX = toqueTela->touchX[0]; |
marcusncunha | 0:73f074c39876 | 58 | uint16_t cliqueY = toqueTela->touchY[0]; |
marcusncunha | 0:73f074c39876 | 59 | |
marcusncunha | 0:73f074c39876 | 60 | //Testar se foi na área do botão em x e marca o flag |
marcusncunha | 0:73f074c39876 | 61 | if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){ |
marcusncunha | 0:73f074c39876 | 62 | isDentroBotaoX = 1; |
marcusncunha | 0:73f074c39876 | 63 | } |
marcusncunha | 0:73f074c39876 | 64 | |
marcusncunha | 0:73f074c39876 | 65 | //Testar se foi na área do botão em y e marca o flag |
marcusncunha | 0:73f074c39876 | 66 | if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){ |
marcusncunha | 0:73f074c39876 | 67 | isDentroBotaoY = 1; |
marcusncunha | 0:73f074c39876 | 68 | } |
marcusncunha | 0:73f074c39876 | 69 | |
marcusncunha | 0:73f074c39876 | 70 | //Testa se está dentro da área do botão XY |
marcusncunha | 0:73f074c39876 | 71 | if(isDentroBotaoX && isDentroBotaoY){ |
marcusncunha | 0:73f074c39876 | 72 | //Se ele não estava pressionado |
marcusncunha | 0:73f074c39876 | 73 | if(!(botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 74 | botaoObjeto->depressTime.start(); |
marcusncunha | 0:73f074c39876 | 75 | botaoObjeto->isPressed = 1; |
marcusncunha | 0:73f074c39876 | 76 | } |
marcusncunha | 0:73f074c39876 | 77 | }else{ |
marcusncunha | 0:73f074c39876 | 78 | //Se ele estava pressionado |
marcusncunha | 0:73f074c39876 | 79 | if((botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 80 | botaoObjeto->depressTime.stop(); |
marcusncunha | 0:73f074c39876 | 81 | botaoObjeto->isPressed = 0; |
marcusncunha | 0:73f074c39876 | 82 | if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ |
marcusncunha | 0:73f074c39876 | 83 | botaoObjeto->updateFlag = 1; |
marcusncunha | 0:73f074c39876 | 84 | } |
marcusncunha | 0:73f074c39876 | 85 | } |
marcusncunha | 0:73f074c39876 | 86 | } |
marcusncunha | 0:73f074c39876 | 87 | } |
marcusncunha | 0:73f074c39876 | 88 | |
marcusncunha | 0:73f074c39876 | 89 | void iniciarBotaoComImagem(const unsigned long *PICTURE, dadosImagem imagem, uint32_t corSemClick, uint32_t corComClick, botao *botaoObjeto, TS_StateTypeDef *toqueTela){ |
marcusncunha | 0:73f074c39876 | 90 | bool isDentroBotaoX = 0; |
marcusncunha | 0:73f074c39876 | 91 | bool isDentroBotaoY = 0; |
marcusncunha | 0:73f074c39876 | 92 | |
marcusncunha | 0:73f074c39876 | 93 | uint16_t cliqueX = toqueTela->touchX[0]; |
marcusncunha | 0:73f074c39876 | 94 | uint16_t cliqueY = toqueTela->touchY[0]; |
marcusncunha | 0:73f074c39876 | 95 | |
marcusncunha | 0:73f074c39876 | 96 | //Testar se foi na área do botão em x e marca o flag |
marcusncunha | 0:73f074c39876 | 97 | if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){ |
marcusncunha | 0:73f074c39876 | 98 | isDentroBotaoX = 1; |
marcusncunha | 0:73f074c39876 | 99 | } |
marcusncunha | 0:73f074c39876 | 100 | |
marcusncunha | 0:73f074c39876 | 101 | //Testar se foi na área do botão em y e marca o flag |
marcusncunha | 0:73f074c39876 | 102 | if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){ |
marcusncunha | 0:73f074c39876 | 103 | isDentroBotaoY = 1; |
marcusncunha | 0:73f074c39876 | 104 | } |
marcusncunha | 0:73f074c39876 | 105 | |
marcusncunha | 0:73f074c39876 | 106 | //Testa se está dentro da área do botão XY |
marcusncunha | 0:73f074c39876 | 107 | if(isDentroBotaoX && isDentroBotaoY){ |
marcusncunha | 0:73f074c39876 | 108 | //Se ele não estava pressionado |
marcusncunha | 0:73f074c39876 | 109 | if(!(botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 110 | botaoObjeto->depressTime.start(); |
marcusncunha | 0:73f074c39876 | 111 | botaoObjeto->isPressed = 1; |
marcusncunha | 0:73f074c39876 | 112 | desenhaBotaoComImagem (PICTURE, imagem, corComClick, botaoObjeto); |
marcusncunha | 0:73f074c39876 | 113 | } |
marcusncunha | 0:73f074c39876 | 114 | }else{ |
marcusncunha | 0:73f074c39876 | 115 | //Se ele estava pressionado |
marcusncunha | 0:73f074c39876 | 116 | if((botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 117 | botaoObjeto->depressTime.stop(); |
marcusncunha | 0:73f074c39876 | 118 | botaoObjeto->isPressed = 0; |
marcusncunha | 0:73f074c39876 | 119 | if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ |
marcusncunha | 0:73f074c39876 | 120 | botaoObjeto->updateFlag = 1; |
marcusncunha | 0:73f074c39876 | 121 | } |
marcusncunha | 0:73f074c39876 | 122 | desenhaBotaoComImagem (PICTURE, imagem, corSemClick, botaoObjeto); |
marcusncunha | 0:73f074c39876 | 123 | } |
marcusncunha | 0:73f074c39876 | 124 | } |
marcusncunha | 0:73f074c39876 | 125 | } |
marcusncunha | 0:73f074c39876 | 126 | |
marcusncunha | 0:73f074c39876 | 127 | 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){ |
marcusncunha | 0:73f074c39876 | 128 | bool isDentroBotaoX = 0; |
marcusncunha | 0:73f074c39876 | 129 | bool isDentroBotaoY = 0; |
marcusncunha | 0:73f074c39876 | 130 | |
marcusncunha | 0:73f074c39876 | 131 | uint16_t cliqueX = toqueTela->touchX[0]; |
marcusncunha | 0:73f074c39876 | 132 | uint16_t cliqueY = toqueTela->touchY[0]; |
marcusncunha | 0:73f074c39876 | 133 | |
marcusncunha | 0:73f074c39876 | 134 | //Testar se foi na área do botão em x e marca o flag |
marcusncunha | 0:73f074c39876 | 135 | if((cliqueX > botaoObjeto->retanguloObjeto.x) && (cliqueX < ( botaoObjeto->retanguloObjeto.x + botaoObjeto->retanguloObjeto.largura))){ |
marcusncunha | 0:73f074c39876 | 136 | isDentroBotaoX = 1; |
marcusncunha | 0:73f074c39876 | 137 | } |
marcusncunha | 0:73f074c39876 | 138 | |
marcusncunha | 0:73f074c39876 | 139 | //Testar se foi na área do botão em y e marca o flag |
marcusncunha | 0:73f074c39876 | 140 | if((cliqueY > botaoObjeto->retanguloObjeto.y) && (cliqueY < ( botaoObjeto->retanguloObjeto.y + botaoObjeto->retanguloObjeto.altura))){ |
marcusncunha | 0:73f074c39876 | 141 | isDentroBotaoY = 1; |
marcusncunha | 0:73f074c39876 | 142 | } |
marcusncunha | 0:73f074c39876 | 143 | |
marcusncunha | 0:73f074c39876 | 144 | //Testa se está dentro da área do botão XY |
marcusncunha | 0:73f074c39876 | 145 | if(isDentroBotaoX && isDentroBotaoY){ |
marcusncunha | 0:73f074c39876 | 146 | //Se ele não estava pressionado |
marcusncunha | 0:73f074c39876 | 147 | if(!(botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 148 | botaoObjeto->depressTime.start(); |
marcusncunha | 0:73f074c39876 | 149 | botaoObjeto->isPressed = 1; |
marcusncunha | 0:73f074c39876 | 150 | desenhaBotaoComImagem (PICTURECLK, imagemClk, corComClick, botaoObjeto); |
marcusncunha | 0:73f074c39876 | 151 | } |
marcusncunha | 0:73f074c39876 | 152 | }else{ |
marcusncunha | 0:73f074c39876 | 153 | //Se ele estava pressionado |
marcusncunha | 0:73f074c39876 | 154 | if((botaoObjeto->isPressed)){ |
marcusncunha | 0:73f074c39876 | 155 | botaoObjeto->depressTime.stop(); |
marcusncunha | 0:73f074c39876 | 156 | botaoObjeto->isPressed = 0; |
marcusncunha | 0:73f074c39876 | 157 | if(botaoObjeto->depressTime.read() > TEMPO_PRESSIONADO_BOTAO){ |
marcusncunha | 0:73f074c39876 | 158 | botaoObjeto->updateFlag = 1; |
marcusncunha | 0:73f074c39876 | 159 | } |
marcusncunha | 0:73f074c39876 | 160 | desenhaBotaoComImagem (PICTURE, imagem, corSemClick, botaoObjeto); |
marcusncunha | 0:73f074c39876 | 161 | } |
marcusncunha | 0:73f074c39876 | 162 | } |
marcusncunha | 0:73f074c39876 | 163 | } |
marcusncunha | 0:73f074c39876 | 164 | |
marcusncunha | 0:73f074c39876 | 165 | void escreverInteiroTelaDireita(int variavel, int x, int y){ |
marcusncunha | 0:73f074c39876 | 166 | char txtTemporario[50]; |
marcusncunha | 0:73f074c39876 | 167 | sprintf(txtTemporario, "%d", variavel); |
marcusncunha | 0:73f074c39876 | 168 | _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, RIGHT_MODE); |
marcusncunha | 0:73f074c39876 | 169 | } |
marcusncunha | 0:73f074c39876 | 170 | |
marcusncunha | 0:73f074c39876 | 171 | void escreverInteiroTelaEsquerda(int variavel, int x, int y){ |
marcusncunha | 0:73f074c39876 | 172 | char txtTemporario[50]; |
marcusncunha | 0:73f074c39876 | 173 | sprintf(txtTemporario, "%d", variavel); |
marcusncunha | 0:73f074c39876 | 174 | _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, LEFT_MODE); |
marcusncunha | 0:73f074c39876 | 175 | } |
marcusncunha | 0:73f074c39876 | 176 | |
marcusncunha | 0:73f074c39876 | 177 | void escreverDoubleTelaDireita(double variavel, int x, int y){ |
marcusncunha | 0:73f074c39876 | 178 | char txtTemporario[50]; |
marcusncunha | 0:73f074c39876 | 179 | sprintf(txtTemporario, "%.2f", variavel); |
marcusncunha | 0:73f074c39876 | 180 | _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, RIGHT_MODE); |
marcusncunha | 0:73f074c39876 | 181 | } |
marcusncunha | 0:73f074c39876 | 182 | |
marcusncunha | 0:73f074c39876 | 183 | void escreverDoubleTelaEsquerda(double variavel, int x, int y){ |
marcusncunha | 0:73f074c39876 | 184 | char txtTemporario[50]; |
marcusncunha | 0:73f074c39876 | 185 | sprintf(txtTemporario, "%.2f", variavel); |
marcusncunha | 0:73f074c39876 | 186 | _lcd.DisplayStringAt(x, y, (uint8_t *)&txtTemporario, LEFT_MODE); |
marcusncunha | 0:73f074c39876 | 187 | } |
marcusncunha | 0:73f074c39876 | 188 | |
marcusncunha | 0:73f074c39876 | 189 |