mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-03-14 11:18:41 +01:00
124 lines
2.4 KiB
C++
124 lines
2.4 KiB
C++
#ifdef WINDOWS
|
|
#include "Text.h"
|
|
|
|
void CText::recalcBoundsSelf() {
|
|
bounds.clear();
|
|
int line = 0;
|
|
int ch = 0;;
|
|
char buffer[4096];
|
|
CMD_ExpandConstantsWithinString(txt.c_str(), buffer, sizeof(buffer));
|
|
const char *p = buffer;
|
|
bounds.addPoint(Coord(0, -8));
|
|
// do not go smaller than that
|
|
bounds.addPoint(Coord(9, 5));
|
|
while (*p) {
|
|
if (p[0] == '\n') {
|
|
line++;
|
|
ch = 0;
|
|
}
|
|
else {
|
|
ch++;
|
|
}
|
|
bounds.addPoint(Coord(9 * ch, 5 + 15 * line));
|
|
p++;
|
|
}
|
|
//int useLen = txt.size();
|
|
//if (bTextEditMode)
|
|
// useLen += 1;
|
|
//bounds.addPoint(Coord(9 * useLen, 5));
|
|
//bounds.addPoint(Coord(0, -8));
|
|
}
|
|
CShape *CText::cloneShape() {
|
|
CText *r = new CText();
|
|
r->pos = this->pos;
|
|
r->txt = this->txt;
|
|
r->bDeepText = this->bDeepText;
|
|
r->bAllowNewLine = this->bAllowNewLine;
|
|
this->cloneShapeTo(r);
|
|
return r;
|
|
}
|
|
bool CText::processKeyDown(int keyCode) {
|
|
if (keyCode == SDLK_BACKSPACE) {
|
|
if (cursorPos > 0) {
|
|
txt.erase(cursorPos-1, 1);
|
|
cursorPos--;
|
|
}
|
|
}
|
|
if (keyCode == SDLK_DELETE) {
|
|
if (txt.size() > cursorPos) {
|
|
txt.erase(cursorPos, 1);
|
|
}
|
|
}
|
|
if (keyCode == SDLK_RIGHT) {
|
|
cursorPos++;
|
|
if (cursorPos > txt.size())
|
|
cursorPos = txt.size();
|
|
}
|
|
if (keyCode == SDLK_LEFT) {
|
|
cursorPos--;
|
|
if (cursorPos < 0)
|
|
cursorPos = 0;
|
|
}
|
|
if (keyCode == SDLK_ESCAPE) {
|
|
return true;
|
|
}
|
|
if (keyCode == SDLK_RETURN) {
|
|
if (bAllowNewLine) {
|
|
appendText("\n");
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
float CText::getFloat() const {
|
|
return atof(txt.c_str());
|
|
}
|
|
void CText::setTextf(const char *fmt, ...) {
|
|
va_list argList;
|
|
char buffer[4096];
|
|
va_start(argList, fmt);
|
|
vsnprintf(buffer, sizeof(buffer), fmt, argList);
|
|
va_end(argList);
|
|
setText(buffer);
|
|
}
|
|
void CText::appendText(const char *s) {
|
|
//txt.append(s);
|
|
txt.insert(cursorPos, s);
|
|
cursorPos += strlen(s);
|
|
recalcBoundsSelf();
|
|
}
|
|
|
|
|
|
void CText::drawShape() {
|
|
char buffer[4096];
|
|
if (bTextEditMode) {
|
|
recalcBoundsSelf();
|
|
}
|
|
if (bTextEditMode) {
|
|
strncpy(buffer, txt.c_str(), cursorPos);
|
|
buffer[cursorPos] = 0;
|
|
strcat(buffer, "|");
|
|
strcat(buffer, txt.c_str()+ cursorPos);
|
|
drawText(NULL, getX(), getY(), buffer);
|
|
}
|
|
else {
|
|
drawText(NULL, getX(), getY(), txt.c_str());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
float CText::drawPrivateInformation2D(float x, float h) {
|
|
h = drawText(NULL, x, h, "Text: %s", this->txt.c_str());
|
|
return h;
|
|
}
|
|
|
|
|
|
void CText::rotateDegreesAround_internal(float f, const Coord &p) {
|
|
//pos = pos.rotateDegreesAround(f, p);
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|