Seamaster101
Member
Hi all,
I want to thank sumotoy for the great library and guidance how to connect and revive the tft screen form Eastrising.
I found one problem when I use class that I wrote to create a tft button. The text will not get positioned where the cursor is set to. if I use simple setCursor(x,y) without the class then the text gets positioned correctly and it works as expected.
Maybe its my class fault, but I cant figure it out. here is my code:
this is my code:
My .ino file:
then my Button.h file:
then my Button.cpp file:
Can you please help me?
thanks!
I want to thank sumotoy for the great library and guidance how to connect and revive the tft screen form Eastrising.
I found one problem when I use class that I wrote to create a tft button. The text will not get positioned where the cursor is set to. if I use simple setCursor(x,y) without the class then the text gets positioned correctly and it works as expected.
Maybe its my class fault, but I cant figure it out. here is my code:
this is my code:
My .ino file:
Code:
#include <Wire.h>
#include "ColorDefinitions.h"
#include "Button.h"
RA8875 tft = RA8875(RA8875_CS, RA8875_RESET);
void setup() {
tft.begin(RA8875_800x480);
tft.setRotation(0);//works at any rotation as well
tft.clearScreen(RA8875_BLACK);
tButton EngineButton(20, 20, 300, 100, 10, 3, GREEN, WHITE,"ENGINE");
EngineButton.Title("ENGINE");
}
void loop() {
}
then my Button.h file:
Code:
//*******************************
//* Button Class *
//* tft screen button class *
//*******************************
#ifndef BUTTON_H
#define BUTTON_H
#include <SPI.h> //for display communications
#include <RA8875.h>
#define RA8875_CS 10
#define RA8875_RESET 9 //any pin or 255 to disable it!
#define CTP_INT 2 // touch data ready for read from FT5206 touch controller
class tButton
{
private:
//int m_bNumber;
int m_bX = 0;
int m_bY = 0;
int m_bWidth = 0;
int m_bHeight = 0;
int m_bRadius = 0;
int m_bBorderTickness = 0;
uint16_t m_bColor = 0;
uint16_t m_bBorderColor = 0;
String m_bText = "Button";
public:
tButton
(
//int bNumber,
int bX,
int bY,
int bWidth,
int bHeight,
int bRadius,
int bBorderTickness,
uint16_t bColor,
uint16_t bBorderColor,
String bText
);
void Draw();
void DrawFrame(uint16_t c);
void DrawFrame();
void Title(String);
};
#endif
then my Button.cpp file:
Code:
//*******************************
//* Button Class *
//* tft screen button class *
//*******************************
#include "ColorDefinitions.h"
#include "Button.h"
RA8875 b = RA8875(RA8875_CS, RA8875_RESET);
tButton::tButton(
int bX,
int bY,
int bWidth,
int bHeight,
int bRadius,
int bBorderTickness,
uint16_t bColor,
uint16_t bBorderColor,
String bText)
{
// m_bNumber = bNumber;
m_bX = bX;
m_bY = bY;
m_bWidth = bWidth;
m_bHeight = bHeight;
m_bRadius = bRadius;
m_bBorderTickness = bBorderTickness;
m_bColor = bColor;
m_bBorderColor = bBorderColor;
m_bText = bText;
}
void tButton::Draw()
{
b.fillRoundRect(m_bX, m_bY, m_bWidth, m_bHeight, m_bRadius, m_bColor ); //button FILL
}
void tButton::DrawFrame(uint16_t c)
{
m_bBorderColor = c;
for (int i = 0; i < m_bBorderTickness; i++ ) {
b.drawRoundRect(m_bX - i, m_bY - i, m_bWidth + i * 2, m_bHeight + i * 2, m_bRadius, m_bBorderColor); //button OUTLINE
}
}
void tButton::DrawFrame()
{
for (int i = 0; i < m_bBorderTickness; i++ ) {
b.drawRoundRect(m_bX - i, m_bY - i, m_bWidth + i * 2, m_bHeight + i * 2, m_bRadius, m_bBorderColor); //button OUTLINE
}
}
void tButton::Title(String t){ //will load specific
b.setCursor((m_bX+m_bWidth)/2, (m_bY+m_bHeight)/2, true); //it will not set text location???? why? it always prits the text at 0,0.
b.setTextColor(WHITE);
//b.setCursor(50, 40); //it will not set text location????
Serial.print ((m_bX+m_bWidth)/2); Serial.print(", "); Serial.print ((m_bY+m_bHeight)/2);
b.setFontScale(0);
b.print(t);
}
Can you please help me?
thanks!