diff --git a/data/IntroText.h b/data/IntroText.h index c53517ef4..c7ce4bd12 100644 --- a/data/IntroText.h +++ b/data/IntroText.h @@ -2,8 +2,8 @@ #include "Config.h" const char *const introTextData = - "\bl" APPNAME " - Version " MTOS(SAVE_VERSION) "." MTOS(MINOR_VERSION) " - https://powdertoy.co.uk, irc.libera.chat #powder, https://tpt.io/discord\n" - "\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\xEE\x81\xA9\n" + "\bl\bU" APPNAME "\bU - Version " MTOS(SAVE_VERSION) "." MTOS(MINOR_VERSION) " - https://powdertoy.co.uk, irc.libera.chat #powder, https://tpt.io/discord\n" + "\n" "\n" "\bgControl+C/V/X are Copy, Paste and cut respectively.\n" "\bgTo choose a material, hover over one of the icons on the right, it will show a selection of elements in that group.\n" diff --git a/src/graphics/RasterDrawMethods.inl b/src/graphics/RasterDrawMethods.inl index 08220a6a8..c4f35154b 100644 --- a/src/graphics/RasterDrawMethods.inl +++ b/src/graphics/RasterDrawMethods.inl @@ -17,6 +17,7 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const String &str, int r, int g, if(!str.size()) return 0; + bool underline = false; int invert = 0; int oR = r, oG = g, oB = b; int characterX = x, characterY = y; @@ -57,18 +58,20 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const String &str, int r, int g, { if (str.length() <= i + 1) break; + auto colorCode = false; switch (str[i + 1]) { - case 'w': r = 255; g = 255; b = 255; break; - case 'g': r = 192; g = 192; b = 192; break; - case 'o': r = 255; g = 216; b = 32; break; - case 'r': r = 255; g = 0; b = 0; break; - case 'l': r = 255; g = 75; b = 75; break; - case 'b': r = 0; g = 0; b = 255; break; - case 't': b = 255; g = 170; r = 32; break; - case 'u': r = 147; g = 83; b = 211; break; + case 'U': underline = !underline; break; + case 'w': r = 255; g = 255; b = 255; colorCode = true; break; + case 'g': r = 192; g = 192; b = 192; colorCode = true; break; + case 'o': r = 255; g = 216; b = 32; colorCode = true; break; + case 'r': r = 255; g = 0; b = 0; colorCode = true; break; + case 'l': r = 255; g = 75; b = 75; colorCode = true; break; + case 'b': r = 0; g = 0; b = 255; colorCode = true; break; + case 't': b = 255; g = 170; r = 32; colorCode = true; break; + case 'u': r = 147; g = 83; b = 211; colorCode = true; break; } - if(invert) + if (colorCode && invert) { r = 255-r; g = 255-g; @@ -78,7 +81,15 @@ int PIXELMETHODS_CLASS::drawtext(int x, int y, const String &str, int r, int g, } else { - characterX = drawchar(characterX, characterY, str[i], r, g, b, a); + auto newCharacterX = drawchar(characterX, characterY, str[i], r, g, b, a); + if (underline) + { + for (int i = characterX; i < newCharacterX; ++i) + { + blendpixel(i, y + FONT_H, r, g, b, a); + } + } + characterX = newCharacterX; } } return x;