mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-28 08:48:48 +02:00
support for predefined colors
This commit is contained in:
parent
f776422c67
commit
f5505c9f6d
@ -154,11 +154,13 @@ void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what)
|
||||
delimitersCount *= f->getStringWidth(delimeters)/2;
|
||||
|
||||
std::smatch match;
|
||||
std::regex expr("\\{(#[0-9a-fA-F]{6})");
|
||||
std::regex expr("\\{(.*?)\\|");
|
||||
std::string::const_iterator searchStart( what.cbegin() );
|
||||
while(std::regex_search(searchStart, what.cend(), match, expr))
|
||||
{
|
||||
delimitersCount += f->getStringWidth(match[1].str());
|
||||
std::string colorText = match[1].str();
|
||||
if(CMessage::parseColor(colorText).a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT)
|
||||
delimitersCount += f->getStringWidth(colorText + "|");
|
||||
searchStart = match.suffix().first;
|
||||
}
|
||||
|
||||
@ -201,15 +203,19 @@ void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what)
|
||||
if(currDelimeter % 2) // Enclosed in {} text - set to yellow or defined color
|
||||
{
|
||||
std::smatch match;
|
||||
std::regex expr("^#([0-9a-fA-F]{6})");
|
||||
std::regex expr("^(.*?)\\|");
|
||||
if(std::regex_search(toPrint, match, expr))
|
||||
{
|
||||
ui8 rgb[3] = {0, 0, 0};
|
||||
std::string tmp = boost::algorithm::unhex(match[1].str());
|
||||
std::copy(tmp.begin(), tmp.end(), rgb);
|
||||
|
||||
toPrint = toPrint.substr(7, toPrint.length() - 6);
|
||||
to.drawText(where, font, ColorRGBA(rgb[0], rgb[1], rgb[2]), ETextAlignment::TOPLEFT, toPrint);
|
||||
std::string colorText = match[1].str();
|
||||
ColorRGBA color = CMessage::parseColor(colorText);
|
||||
|
||||
if(color.a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT)
|
||||
{
|
||||
toPrint = toPrint.substr(colorText.length() + 1, toPrint.length() - colorText.length());
|
||||
to.drawText(where, font, color, ETextAlignment::TOPLEFT, toPrint);
|
||||
}
|
||||
else
|
||||
to.drawText(where, font, Colors::YELLOW, ETextAlignment::TOPLEFT, toPrint);
|
||||
}
|
||||
else
|
||||
to.drawText(where, font, Colors::YELLOW, ETextAlignment::TOPLEFT, toPrint);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "../CGameInfo.h"
|
||||
#include "../../lib/CGeneralTextHandler.h"
|
||||
#include "../../lib/TextOperations.h"
|
||||
#include "../../lib/JsonNode.h"
|
||||
|
||||
#include "../windows/InfoWindows.h"
|
||||
#include "../widgets/Buttons.h"
|
||||
@ -152,12 +153,16 @@ std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineWi
|
||||
opened=true;
|
||||
|
||||
std::smatch match;
|
||||
std::regex expr("^\\{(#[0-9a-fA-F]{6})$");
|
||||
std::string tmp = text.substr(currPos, 8);
|
||||
std::regex expr("^\\{(.*?)\\|");
|
||||
std::string tmp = text.substr(currPos);
|
||||
if(std::regex_search(tmp, match, expr))
|
||||
{
|
||||
color = match[1].str();
|
||||
currPos += 7;
|
||||
std::string colorText = match[1].str();
|
||||
if(CMessage::parseColor(colorText).a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT)
|
||||
{
|
||||
color = colorText + "|";
|
||||
currPos += colorText.length() + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (text[currPos]=='}')
|
||||
@ -222,6 +227,32 @@ std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineWi
|
||||
return ret;
|
||||
}
|
||||
|
||||
ColorRGBA CMessage::parseColor(std::string text)
|
||||
{
|
||||
std::smatch match;
|
||||
std::regex expr("^#([0-9a-fA-F]{6})$");
|
||||
ui8 rgb[3] = {0, 0, 0};
|
||||
if(std::regex_search(text, match, expr))
|
||||
{
|
||||
std::string tmp = boost::algorithm::unhex(match[1].str());
|
||||
std::copy(tmp.begin(), tmp.end(), rgb);
|
||||
return ColorRGBA(rgb[0], rgb[1], rgb[2]);
|
||||
}
|
||||
|
||||
const JsonNode config(JsonPath::builtin("CONFIG/textColors"));
|
||||
auto colors = config["colors"].Struct();
|
||||
for(auto & color : colors) {
|
||||
if(boost::algorithm::to_lower_copy(color.first) == boost::algorithm::to_lower_copy(text))
|
||||
{
|
||||
std::string tmp = boost::algorithm::unhex(color.second.String());
|
||||
std::copy(tmp.begin(), tmp.end(), rgb);
|
||||
return ColorRGBA(rgb[0], rgb[1], rgb[2]);
|
||||
}
|
||||
}
|
||||
|
||||
return Colors::TRANSPARENCY;
|
||||
}
|
||||
|
||||
std::string CMessage::guessHeader(const std::string & msg)
|
||||
{
|
||||
size_t begin = 0;
|
||||
|
@ -15,6 +15,7 @@
|
||||
struct SDL_Surface;
|
||||
class CInfoWindow;
|
||||
class CComponent;
|
||||
class ColorRGBA;
|
||||
|
||||
|
||||
/// Class which draws formatted text messages and generates chat windows
|
||||
@ -32,6 +33,9 @@ public:
|
||||
/// split text in lines
|
||||
static std::vector<std::string> breakText(std::string text, size_t maxLineWidth, EFonts font);
|
||||
|
||||
/// parse color
|
||||
static ColorRGBA parseColor(std::string text);
|
||||
|
||||
/// Try to guess a header of a message
|
||||
static std::string guessHeader(const std::string & msg);
|
||||
|
||||
|
170
config/textColors.json
Normal file
170
config/textColors.json
Normal file
@ -0,0 +1,170 @@
|
||||
{
|
||||
"colors": {
|
||||
"r": "F80000",
|
||||
"g": "00FC00",
|
||||
"b": "0000F8",
|
||||
"y": "F8FC00",
|
||||
"o": "F88000",
|
||||
"p": "F800F8",
|
||||
"c": "00FCF8",
|
||||
"k": "000000",
|
||||
"w": "FFFFFF",
|
||||
"Regular": "F8F0D8",
|
||||
"Highlight": "E8D478",
|
||||
"H3Red": "F80000",
|
||||
"H3Cyan": "00FCF8",
|
||||
"H3Green": "00FC00",
|
||||
"H3Blue": "0000F8",
|
||||
"H3Yellow": "F8FC00",
|
||||
"H3Orange": "F88000",
|
||||
"H3Purple": "F800F8",
|
||||
"H3Pink": "C07888",
|
||||
"AliceBlue": "F0F8FF",
|
||||
"AntiqueWhite": "FAEBD7",
|
||||
"Aqua": "00FFFF",
|
||||
"Aquamarine": "7FFFD4",
|
||||
"Azure": "F0FFFF",
|
||||
"Beige": "F5F5DC",
|
||||
"Bisque": "FFE4C4",
|
||||
"Black": "000000",
|
||||
"BlanchedAlmond": "FFEBCD",
|
||||
"Blue": "0000FF",
|
||||
"BlueViolet": "8A2BE2",
|
||||
"Brown": "A52A2A",
|
||||
"BurlyWood": "DEB887",
|
||||
"CadetBlue": "5F9EA0",
|
||||
"Chartreuse": "7FFF00",
|
||||
"Chocolate": "D2691E",
|
||||
"Coral": "FF7F50",
|
||||
"CornflowerBlue": "6495ED",
|
||||
"Cornsilk": "FFF8DC",
|
||||
"Crimson": "DC143C",
|
||||
"Cyan": "00FFFF",
|
||||
"DarkBlue": "00008B",
|
||||
"DarkCyan": "008B8B",
|
||||
"DarkGoldenRod": "B8860B",
|
||||
"DarkGray": "A9A9A9",
|
||||
"DarkGrey": "A9A9A9",
|
||||
"DarkGreen": "A9A9A9",
|
||||
"DarkKhaki": "006400",
|
||||
"DarkMagenta": "8B008B",
|
||||
"DarkOliveGreen": "556B2F",
|
||||
"Darkorange": "FF8C00",
|
||||
"DarkOrchid": "9932CC",
|
||||
"DarkRed": "8B0000",
|
||||
"DarkSalmon": "E9967A",
|
||||
"DarkSeaGreen": "8FBC8F",
|
||||
"DarkSlateBlue": "483D8B",
|
||||
"DarkSlateGray": "2F4F4F",
|
||||
"DarkSlateGrey": "2F4F4F",
|
||||
"DarkTurquoise": "00CED1",
|
||||
"DarkViolet": "9400D3",
|
||||
"DeepPink": "FF1493",
|
||||
"DeepSkyBlue": "00BFFF",
|
||||
"DimGray": "696969",
|
||||
"DimGrey": "696969",
|
||||
"DodgerBlue": "1E90FF",
|
||||
"FireBrick": "B22222",
|
||||
"FloralWhite": "FFFAF0",
|
||||
"ForestGreen": "228B22",
|
||||
"Fuchsia": "FF00FF",
|
||||
"Gainsboro": "DCDCDC",
|
||||
"GhostWhite": "F8F8FF",
|
||||
"Gold": "FFD700",
|
||||
"GoldenRod": "DAA520",
|
||||
"Gray": "808080",
|
||||
"Grey": "808080",
|
||||
"Green": "008000",
|
||||
"GreenYellow": "ADFF2F",
|
||||
"HoneyDew": "F0FFF0",
|
||||
"HotPink": "FF69B4",
|
||||
"IndianRed": "CD5C5C",
|
||||
"Indigo": "4B0082",
|
||||
"Ivory": "FFFFF0",
|
||||
"Khaki": "F0E68C",
|
||||
"Lavender": "E6E6FA",
|
||||
"LavenderBlush": "FFF0F5",
|
||||
"LawnGreen": "7CFC00",
|
||||
"LemonChiffon": "FFFACD",
|
||||
"LightBlue": "ADD8E6",
|
||||
"LightCoral": "F08080",
|
||||
"LightCyan": "E0FFFF",
|
||||
"LightGoldenRodYellow": "FAFAD2",
|
||||
"LightGray": "D3D3D3",
|
||||
"LightGrey": "D3D3D3",
|
||||
"LightGreen": "90EE90",
|
||||
"LightPink": "FFB6C1",
|
||||
"LightSalmon": "FFA07A",
|
||||
"LightSeaGreen": "20B2AA",
|
||||
"LightSkyBlue": "87CEFA",
|
||||
"LightSlateGray": "778899",
|
||||
"LightSlateGrey": "778899",
|
||||
"LightSteelBlue": "B0C4DE",
|
||||
"LightYellow": "FFFFE0",
|
||||
"Lime": "00FF00",
|
||||
"LimeGreen": "32CD32",
|
||||
"Linen": "FAF0E6",
|
||||
"Magenta": "FF00FF",
|
||||
"Maroon": "800000",
|
||||
"MediumAquaMarine": "66CDAA",
|
||||
"MediumBlue": "0000CD",
|
||||
"MediumOrchid": "BA55D3",
|
||||
"MediumPurple": "9370D8",
|
||||
"MediumSeaGreen": "3CB371",
|
||||
"MediumSlateBlue": "7B68EE",
|
||||
"MediumSpringGreen": "00FA9A",
|
||||
"MediumTurquoise": "48D1CC",
|
||||
"MediumVioletRed": "C71585",
|
||||
"MidnightBlue": "191970",
|
||||
"MintCream": "F5FFFA",
|
||||
"MistyRose": "FFE4E1",
|
||||
"Moccasin": "FFE4B5",
|
||||
"NavajoWhite": "FFDEAD",
|
||||
"Navy": "000080",
|
||||
"OldLace": "FDF5E6",
|
||||
"Olive": "808000",
|
||||
"OliveDrab": "6B8E23",
|
||||
"Orange": "FFA500",
|
||||
"OrangeRed": "FF4500",
|
||||
"Orchid": "DA70D6",
|
||||
"PaleGoldenRod": "EEE8AA",
|
||||
"PaleGreen": "98FB98",
|
||||
"PaleTurquoise": "AFEEEE",
|
||||
"PaleVioletRed": "D87093",
|
||||
"PapayaWhip": "FFEFD5",
|
||||
"PeachPuff": "FFDAB9",
|
||||
"Peru": "CD853F",
|
||||
"Pink": "FFC0CB",
|
||||
"Plum": "DDA0DD",
|
||||
"PowderBlue": "B0E0E6",
|
||||
"Purple": "800080",
|
||||
"Red": "FF0000",
|
||||
"RosyBrown": "BC8F8F",
|
||||
"RoyalBlue": "4169E1",
|
||||
"SaddleBrown": "8B4513",
|
||||
"Salmon": "FA8072",
|
||||
"SandyBrown": "F4A460",
|
||||
"SeaGreen": "2E8B57",
|
||||
"SeaShell": "FFF5EE",
|
||||
"Sienna": "A0522D",
|
||||
"Silver": "C0C0C0",
|
||||
"SkyBlue": "87CEEB",
|
||||
"SlateBlue": "6A5ACD",
|
||||
"SlateGray": "708090",
|
||||
"SlateGrey": "708090",
|
||||
"Snow": "FFFAFA",
|
||||
"SpringGreen": "00FF7F",
|
||||
"SteelBlue": "4682B4",
|
||||
"Tan": "D2B48C",
|
||||
"Teal": "008080",
|
||||
"Thistle": "D8BFD8",
|
||||
"Tomato": "FF6347",
|
||||
"Turquoise": "40E0D0",
|
||||
"Violet": "EE82EE",
|
||||
"Wheat": "F5DEB3",
|
||||
"White": "FFFFFF",
|
||||
"WhiteSmoke": "F5F5F5",
|
||||
"Yellow": "FFFF00",
|
||||
"YellowGreen": "9ACD32"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user