Better text selection colour invert, fixes #107

This commit is contained in:
Simon Robertshaw 2012-08-14 18:05:07 +01:00
parent 3fcfede08f
commit bd7dd20742
4 changed files with 55 additions and 4 deletions

View File

@ -33,6 +33,13 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const char *s, int r, int g, int
g = oG; g = oG;
b = oB; b = oB;
} }
else if (*s == '\x01')
{
invert = !invert;
r = 255-r;
g = 255-g;
b = 255-b;
}
else if (*s == '\b') else if (*s == '\b')
{ {
if(!s[1]) break; if(!s[1]) break;
@ -67,6 +74,12 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const char *s, int r, int g, int
r = 32; r = 32;
break; break;
} }
if(invert)
{
r = 255-r;
g = 255-g;
b = 255-b;
}
s++; s++;
} }
else else

View File

@ -6,6 +6,7 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const char *s, int r, int g, int
return 0; return 0;
int width, height; int width, height;
int invert = 0;
int oR = r, oG = g, oB = b; int oR = r, oG = g, oB = b;
int characterX = x, characterY = y; int characterX = x, characterY = y;
int startX = characterX; int startX = characterX;
@ -33,6 +34,13 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const char *s, int r, int g, int
g = oG; g = oG;
b = oB; b = oB;
} }
else if (*s == '\x01')
{
invert = !invert;
r = 255-r;
g = 255-g;
b = 255-b;
}
else if (*s == '\b') else if (*s == '\b')
{ {
if(!s[1]) break; if(!s[1]) break;
@ -67,6 +75,12 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const char *s, int r, int g, int
r = 32; r = 32;
break; break;
} }
if(invert)
{
r = 255-r;
g = 255-g;
b = 255-b;
}
s++; s++;
} }
else else

View File

@ -250,26 +250,49 @@ void Label::updateSelection()
selectionLineL = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex0, selectionXL, selectionYL); selectionLineL = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex0, selectionXL, selectionYL);
textFragments = std::string(currentText); textFragments = std::string(currentText);
textFragments.insert(selectionIndex1, "\x0E"); //textFragments.insert(selectionIndex1, "\x0E");
textFragments.insert(selectionIndex0, "\x0F\x01\x01\x01"); //textFragments.insert(selectionIndex0, "\x0F\x01\x01\x01");
textFragments.insert(selectionIndex1, "\x01");
textFragments.insert(selectionIndex0, "\x01");
} else if(selectionIndex0 > selectionIndex1) { } else if(selectionIndex0 > selectionIndex1) {
selectionLineH = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex0, selectionXH, selectionYH); selectionLineH = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex0, selectionXH, selectionYH);
selectionLineL = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex1, selectionXL, selectionYL); selectionLineL = Graphics::PositionAtCharIndex((char*)currentText.c_str(), selectionIndex1, selectionXL, selectionYL);
textFragments = std::string(currentText); textFragments = std::string(currentText);
textFragments.insert(selectionIndex0, "\x0E"); //textFragments.insert(selectionIndex0, "\x0E");
textFragments.insert(selectionIndex1, "\x0F\x01\x01\x01"); //textFragments.insert(selectionIndex1, "\x0F\x01\x01\x01");
textFragments.insert(selectionIndex0, "\x01");
textFragments.insert(selectionIndex1, "\x01");
} else { } else {
selectionXH = -1; selectionXH = -1;
selectionXL = -1; selectionXL = -1;
textFragments = std::string(currentText); textFragments = std::string(currentText);
} }
if(displayText.length())
{
displayText = tDisplayText;
if(selectionIndex1 > selectionIndex0) {
int tSelectionIndex1 = Graphics::CharIndexAtPosition((char*)displayText.c_str(), selectionXH, selectionYH);
int tSelectionIndex0 = Graphics::CharIndexAtPosition((char*)displayText.c_str(), selectionXL, selectionYL);
displayText.insert(tSelectionIndex1, "\x01");
displayText.insert(tSelectionIndex0, "\x01");
} else if(selectionIndex0 > selectionIndex1) {
int tSelectionIndex0 = Graphics::CharIndexAtPosition((char*)displayText.c_str(), selectionXH, selectionYH);
int tSelectionIndex1 = Graphics::CharIndexAtPosition((char*)displayText.c_str(), selectionXL, selectionYL);
displayText.insert(tSelectionIndex0, "\x01");
displayText.insert(tSelectionIndex1, "\x01");
}
}
} }
void Label::SetDisplayText(std::string newText) void Label::SetDisplayText(std::string newText)
{ {
displayText = newText; displayText = newText;
tDisplayText = displayText;
} }
void Label::Draw(const Point& screenPos) void Label::Draw(const Point& screenPos)

View File

@ -15,6 +15,7 @@ namespace ui
std::string textFragments; std::string textFragments;
std::string textLines; std::string textLines;
std::string displayText; std::string displayText;
std::string tDisplayText;
std::string text; std::string text;
Colour textColour; Colour textColour;