Files
OpenBK7231T_App/src/sim/Text.cpp
2022-12-12 16:35:30 +01:00

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