[SFML 2.X] Wrapper tekstu - dzieleniu tekstu na linie
Ostatnio zmodyfikowano 2025-05-21 20:09
tBane Temat założony przez niniejszego użytkownika |
» 2025-04-23 17:23:18 Dziękuję za działający kod :-) |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-05-21 20:09:32 Update :-) Pozostało jeszcze napisać poprawkę dla słów dłuższych niż zadana szerokość linii. Tzn żeby słowa też zawijało gdy są dłuższe niż linia :-) std::vector < sf::Text * > wrap_text( int line_width, std::wstring text ) { std::vector < sf::Text * > wrapped_text; std::wstring line = L""; std::wstring word = L""; for( auto & character: text ) { if( sf::Text( word + character, font, characterSize ).getGlobalBounds().width > line_width ) { if( line != L"" ) { sf::Text * t = new sf::Text( line, font, characterSize ); wrapped_text.push_back( t ); line = L""; } std::wstring l = L""; word = word + character; for( wchar_t & c: word ) { if( sf::Text( l + c, font, characterSize ).getGlobalBounds().width > line_width ) { sf::Text * t = new sf::Text( l, font, characterSize ); wrapped_text.push_back( t ); l = c; } else l = l + c; } sf::Text * t = new sf::Text( l, font, characterSize ); wrapped_text.push_back( t ); word = L""; } else if( sf::Text( line + word + character, font, characterSize ).getGlobalBounds().width > line_width ) { sf::Text * t = new sf::Text( line, font, characterSize ); wrapped_text.push_back( t ); line = L""; word = word + character; } else if( character == L'\n' ) { if( sf::Text( line + word, font, characterSize ).getGlobalBounds().width > line_width ) { sf::Text * t = new sf::Text( line, font, characterSize ); wrapped_text.push_back( t ); sf::Text * t2 = new sf::Text( word + L"\n", font, characterSize ); wrapped_text.push_back( t2 ); line = L""; word = L""; } else { sf::Text * t = new sf::Text( line + word + L"\n", font, characterSize ); wrapped_text.push_back( t ); line = L""; word = L""; } } else if( character == L' ' || character == L'\t' ) { if( sf::Text( line + word, font, characterSize ).getGlobalBounds().width > line_width ) { sf::Text * t = new sf::Text( line + L"\n", font, characterSize ); wrapped_text.push_back( t ); line = L""; } else { line = line + word + character; } word = L""; } else { word = word + character; } } if( line != L"" || word != L"" ) { sf::Text * t = new sf::Text( line + word, font, characterSize ); wrapped_text.push_back( t ); } return wrapped_text; }
|
|
1 « 2 » |