|  | @@ -182,29 +182,39 @@ std::vector<std::string> CMultiLineLabel::getLines()
 | 
	
		
			
				|  |  |  	return lines;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what)
 | 
	
		
			
				|  |  | +const std::string delimiters = "{}";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int CTextContainer::getDelimitersWidth(EFonts font, std::string text)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	const auto f = ENGINE->renderHandler().loadFont(font);
 | 
	
		
			
				|  |  | -	Point where = destRect.topLeft();
 | 
	
		
			
				|  |  | -	const std::string delimiters = "{}";
 | 
	
		
			
				|  |  | -	auto delimitersCount = std::count_if(what.cbegin(), what.cend(), [&delimiters](char c)
 | 
	
		
			
				|  |  | +	auto delimitersWidth = std::count_if(text.cbegin(), text.cend(), [](char c)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		return delimiters.find(c) != std::string::npos;
 | 
	
		
			
				|  |  |  	});
 | 
	
		
			
				|  |  |  	//We should count delimiters length from string to correct centering later.
 | 
	
		
			
				|  |  | -	delimitersCount *= f->getStringWidth(delimiters)/2;
 | 
	
		
			
				|  |  | +	delimitersWidth *= f->getStringWidth(delimiters)/2;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	std::smatch match;
 | 
	
		
			
				|  |  |  	std::regex expr("\\{(.*?)\\|");
 | 
	
		
			
				|  |  | -	std::string::const_iterator searchStart( what.cbegin() );
 | 
	
		
			
				|  |  | -	while(std::regex_search(searchStart, what.cend(), match, expr))
 | 
	
		
			
				|  |  | +	std::string::const_iterator searchStart( text.cbegin() );
 | 
	
		
			
				|  |  | +	while(std::regex_search(searchStart, text.cend(), match, expr))
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		std::string colorText = match[1].str();
 | 
	
		
			
				|  |  |  		if(auto c = Colors::parseColor(colorText))
 | 
	
		
			
				|  |  | -			delimitersCount += f->getStringWidth(colorText + "|");
 | 
	
		
			
				|  |  | +			delimitersWidth += f->getStringWidth(colorText + "|");
 | 
	
		
			
				|  |  |  		searchStart = match.suffix().first;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	return delimitersWidth;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	const auto f = ENGINE->renderHandler().loadFont(font);
 | 
	
		
			
				|  |  | +	Point where = destRect.topLeft();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	int delimitersWidth = getDelimitersWidth(font, what);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	// input is rect in which given text should be placed
 | 
	
		
			
				|  |  |  	// calculate proper position for top-left corner of the text
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -212,10 +222,10 @@ void CTextContainer::blitLine(Canvas & to, Rect destRect, std::string what)
 | 
	
		
			
				|  |  |  		where.x += getBorderSize().x;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if(alignment == ETextAlignment::CENTER || alignment == ETextAlignment::TOPCENTER || alignment == ETextAlignment::BOTTOMCENTER)
 | 
	
		
			
				|  |  | -		where.x += (destRect.w - (static_cast<int>(f->getStringWidth(what)) - delimitersCount)) / 2;
 | 
	
		
			
				|  |  | +		where.x += (destRect.w - (static_cast<int>(f->getStringWidth(what)) - delimitersWidth)) / 2;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if(alignment == ETextAlignment::TOPRIGHT || alignment == ETextAlignment::BOTTOMRIGHT || alignment == ETextAlignment::CENTERRIGHT)
 | 
	
		
			
				|  |  | -		where.x += getBorderSize().x + destRect.w - (static_cast<int>(f->getStringWidth(what)) - delimitersCount);
 | 
	
		
			
				|  |  | +		where.x += getBorderSize().x + destRect.w - (static_cast<int>(f->getStringWidth(what)) - delimitersWidth);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if(alignment == ETextAlignment::TOPLEFT || alignment == ETextAlignment::TOPCENTER || alignment == ETextAlignment::TOPRIGHT)
 | 
	
		
			
				|  |  |  		where.y += getBorderSize().y;
 |