mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	move function; optional; json static
This commit is contained in:
		| @@ -10,6 +10,7 @@ | |||||||
|  |  | ||||||
| #include "StdInc.h" | #include "StdInc.h" | ||||||
| #include "Colors.h" | #include "Colors.h" | ||||||
|  | #include "../../lib/JsonNode.h" | ||||||
|  |  | ||||||
| const ColorRGBA Colors::YELLOW = { 229, 215, 123, ColorRGBA::ALPHA_OPAQUE }; | const ColorRGBA Colors::YELLOW = { 229, 215, 123, ColorRGBA::ALPHA_OPAQUE }; | ||||||
| const ColorRGBA Colors::WHITE = { 255, 243, 222, ColorRGBA::ALPHA_OPAQUE }; | const ColorRGBA Colors::WHITE = { 255, 243, 222, ColorRGBA::ALPHA_OPAQUE }; | ||||||
| @@ -23,3 +24,29 @@ const ColorRGBA Colors::RED = {255, 0, 0, ColorRGBA::ALPHA_OPAQUE}; | |||||||
| const ColorRGBA Colors::PURPLE = {255, 75, 125, ColorRGBA::ALPHA_OPAQUE}; | const ColorRGBA Colors::PURPLE = {255, 75, 125, ColorRGBA::ALPHA_OPAQUE}; | ||||||
| const ColorRGBA Colors::BLACK = {0, 0, 0, ColorRGBA::ALPHA_OPAQUE}; | const ColorRGBA Colors::BLACK = {0, 0, 0, ColorRGBA::ALPHA_OPAQUE}; | ||||||
| const ColorRGBA Colors::TRANSPARENCY = {0, 0, 0, ColorRGBA::ALPHA_TRANSPARENT}; | const ColorRGBA Colors::TRANSPARENCY = {0, 0, 0, ColorRGBA::ALPHA_TRANSPARENT}; | ||||||
|  |  | ||||||
|  | std::optional<ColorRGBA> Colors::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]); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	static 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 std::nullopt; | ||||||
|  | } | ||||||
| @@ -49,4 +49,7 @@ public: | |||||||
| 	static const ColorRGBA BLACK; | 	static const ColorRGBA BLACK; | ||||||
|  |  | ||||||
| 	static const ColorRGBA TRANSPARENCY; | 	static const ColorRGBA TRANSPARENCY; | ||||||
|  |  | ||||||
|  | 	/// parse color | ||||||
|  | 	static std::optional<ColorRGBA> parseColor(std::string text); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -159,7 +159,7 @@ void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what) | |||||||
| 	while(std::regex_search(searchStart, what.cend(), match, expr)) | 	while(std::regex_search(searchStart, what.cend(), match, expr)) | ||||||
| 	{ | 	{ | ||||||
| 		std::string colorText = match[1].str(); | 		std::string colorText = match[1].str(); | ||||||
| 		if(CMessage::parseColor(colorText).a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT) | 		if(auto c = Colors::parseColor(colorText)) | ||||||
| 			delimitersCount += f->getStringWidth(colorText + "|"); | 			delimitersCount += f->getStringWidth(colorText + "|"); | ||||||
| 		searchStart = match.suffix().first; | 		searchStart = match.suffix().first; | ||||||
| 	} | 	} | ||||||
| @@ -207,12 +207,11 @@ void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what) | |||||||
| 				if(std::regex_search(toPrint, match, expr)) | 				if(std::regex_search(toPrint, match, expr)) | ||||||
| 				{ | 				{ | ||||||
| 					std::string colorText = match[1].str(); | 					std::string colorText = match[1].str(); | ||||||
| 					ColorRGBA color = CMessage::parseColor(colorText); |  | ||||||
| 					 | 					 | ||||||
| 					if(color.a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT) | 					if(auto color = Colors::parseColor(colorText)) | ||||||
| 					{ | 					{ | ||||||
| 						toPrint = toPrint.substr(colorText.length() + 1, toPrint.length() - colorText.length()); | 						toPrint = toPrint.substr(colorText.length() + 1, toPrint.length() - colorText.length()); | ||||||
| 						to.drawText(where, font, color, ETextAlignment::TOPLEFT, toPrint); | 						to.drawText(where, font, *color, ETextAlignment::TOPLEFT, toPrint); | ||||||
| 					} | 					} | ||||||
| 					else | 					else | ||||||
| 						to.drawText(where, font, Colors::YELLOW, ETextAlignment::TOPLEFT, toPrint); | 						to.drawText(where, font, Colors::YELLOW, ETextAlignment::TOPLEFT, toPrint); | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ | |||||||
| #include "../CGameInfo.h" | #include "../CGameInfo.h" | ||||||
| #include "../../lib/CGeneralTextHandler.h" | #include "../../lib/CGeneralTextHandler.h" | ||||||
| #include "../../lib/TextOperations.h" | #include "../../lib/TextOperations.h" | ||||||
| #include "../../lib/JsonNode.h" |  | ||||||
|  |  | ||||||
| #include "../windows/InfoWindows.h" | #include "../windows/InfoWindows.h" | ||||||
| #include "../widgets/Buttons.h" | #include "../widgets/Buttons.h" | ||||||
| @@ -158,7 +157,7 @@ std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineWi | |||||||
| 				if(std::regex_search(tmp, match, expr)) | 				if(std::regex_search(tmp, match, expr)) | ||||||
| 				{ | 				{ | ||||||
| 					std::string colorText = match[1].str(); | 					std::string colorText = match[1].str(); | ||||||
| 					if(CMessage::parseColor(colorText).a != Colors::TRANSPARENCY.ALPHA_TRANSPARENT) | 					if(auto c = Colors::parseColor(colorText)) | ||||||
| 					{ | 					{ | ||||||
| 						color = colorText + "|"; | 						color = colorText + "|"; | ||||||
| 						currPos += colorText.length() + 1; | 						currPos += colorText.length() + 1; | ||||||
| @@ -227,32 +226,6 @@ std::vector<std::string> CMessage::breakText( std::string text, size_t maxLineWi | |||||||
| 	return ret; | 	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) | std::string CMessage::guessHeader(const std::string & msg) | ||||||
| { | { | ||||||
| 	size_t begin = 0; | 	size_t begin = 0; | ||||||
|   | |||||||
| @@ -36,9 +36,6 @@ public: | |||||||
| 	/// split text in lines | 	/// split text in lines | ||||||
| 	static std::vector<std::string> breakText(std::string text, size_t maxLineWidth, EFonts font); | 	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 | 	/// Try to guess a header of a message | ||||||
| 	static std::string guessHeader(const std::string & msg); | 	static std::string guessHeader(const std::string & msg); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user