Add proper line breaking
This commit is contained in:
parent
4fdd3eee38
commit
34b8a07d80
@ -13,7 +13,7 @@ namespace gui
|
||||
//You can add more characters if needed
|
||||
//For full list please visit http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/kinsoku.html
|
||||
|
||||
bool UtfNoStarting (wchar_t c)
|
||||
inline bool UtfNoStarting (wchar_t c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
@ -66,7 +66,7 @@ bool UtfNoStarting (wchar_t c)
|
||||
}
|
||||
}
|
||||
|
||||
bool UtfNoEnding (wchar_t c)
|
||||
inline bool UtfNoEnding (wchar_t c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
@ -99,7 +99,7 @@ bool UtfNoEnding (wchar_t c)
|
||||
|
||||
//Helper function
|
||||
|
||||
bool breakable (wchar_t c)
|
||||
inline bool breakable (wchar_t c)
|
||||
{
|
||||
if ((c > 12287 && c < 40960) || //Common CJK words
|
||||
(c > 44031 && c < 55204) || //Hangul
|
||||
|
@ -44,6 +44,8 @@
|
||||
#include "states_screens/dialogs/network_user_dialog.hpp"
|
||||
#include "utils/translation.hpp"
|
||||
|
||||
#include <utfwrapping.h>
|
||||
|
||||
using namespace Online;
|
||||
using namespace GUIEngine;
|
||||
|
||||
@ -155,16 +157,22 @@ void NetworkingLobby::init()
|
||||
// ----------------------------------------------------------------------------
|
||||
void NetworkingLobby::addMoreServerInfo(core::stringw info)
|
||||
{
|
||||
assert(m_text_bubble->getDimension().Width > 10);
|
||||
while ((int)GUIEngine::getFont()->getDimension(info.c_str()).Width >
|
||||
m_text_bubble->getDimension().Width - 10)
|
||||
const unsigned box_width = m_text_bubble->getDimension().Width;
|
||||
while (GUIEngine::getFont()->getDimension(info.c_str()).Width > box_width)
|
||||
{
|
||||
int size = (m_text_bubble->getDimension().Width - 10)
|
||||
/ m_server_info_height;
|
||||
assert(size > 0);
|
||||
core::stringw new_info = info.subString(0, size);
|
||||
m_server_info.push_back(new_info);
|
||||
info = info.subString(new_info.size(), 80);
|
||||
core::stringw brokentext = info;
|
||||
while (brokentext.size() > 0)
|
||||
{
|
||||
brokentext.erase(brokentext.size() - 1);
|
||||
if (GUIEngine::getFont()->getDimension(brokentext.c_str()).Width <
|
||||
box_width && gui::breakable(brokentext.lastChar()))
|
||||
break;
|
||||
}
|
||||
if (brokentext.size() == 0)
|
||||
break;
|
||||
m_server_info.push_back(brokentext);
|
||||
info =
|
||||
info.subString(brokentext.size(), info.size() - brokentext.size());
|
||||
}
|
||||
if (info.size() > 0)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user