|
|
@ -1082,10 +1082,10 @@ namespace NLGUI
|
|
|
|
|
|
|
|
|
|
|
|
// Draw a line
|
|
|
|
// Draw a line
|
|
|
|
if (_Underlined)
|
|
|
|
if (_Underlined)
|
|
|
|
rVR.drawRotFlipBitmap (_RenderLayer, (sint)floorf(px), y_line, line_width, 1.0f / rVR.getInterfaceScale(), 0, false, rVR.getBlankTextureId(), col);
|
|
|
|
rVR.drawRotFlipBitmap (_RenderLayer, (sint)floorf(px), y_line, line_width, 1.0f / _Scale, 0, false, rVR.getBlankTextureId(), col);
|
|
|
|
|
|
|
|
|
|
|
|
if (_StrikeThrough)
|
|
|
|
if (_StrikeThrough)
|
|
|
|
rVR.drawRotFlipBitmap (_RenderLayer, (sint)floorf(px), y_line + (_FontHeight / 2), line_width, 1.0f / rVR.getInterfaceScale(), 0, false, rVR.getBlankTextureId(), col);
|
|
|
|
rVR.drawRotFlipBitmap (_RenderLayer, (sint)floorf(px), y_line + (_FontHeight / 2), line_width, 1.0f / _Scale, 0, false, rVR.getBlankTextureId(), col);
|
|
|
|
|
|
|
|
|
|
|
|
// skip word
|
|
|
|
// skip word
|
|
|
|
px += currWord.Info.StringWidth;
|
|
|
|
px += currWord.Info.StringWidth;
|
|
|
@ -1426,7 +1426,7 @@ namespace NLGUI
|
|
|
|
linePushed= true;
|
|
|
|
linePushed= true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Append to the last line
|
|
|
|
// Append to the last line
|
|
|
|
_Lines.back()->addWord(ucCurrentWord, 0, wordFormat, _FontWidth, *TextContext);
|
|
|
|
_Lines.back()->addWord(ucCurrentWord, 0, wordFormat, _FontWidth, *TextContext, _Scale);
|
|
|
|
// reset the word
|
|
|
|
// reset the word
|
|
|
|
ucCurrentWord = ucstring("");
|
|
|
|
ucCurrentWord = ucstring("");
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1523,7 +1523,7 @@ namespace NLGUI
|
|
|
|
if(currLine[i].Format!=lineWordFormat)
|
|
|
|
if(currLine[i].Format!=lineWordFormat)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// add the current lineWord to the line.
|
|
|
|
// add the current lineWord to the line.
|
|
|
|
_Lines.back()->addWord(lineWord, 0, lineWordFormat, _FontWidth, *TextContext);
|
|
|
|
_Lines.back()->addWord(lineWord, 0, lineWordFormat, _FontWidth, *TextContext, _Scale);
|
|
|
|
// get new lineWordFormat
|
|
|
|
// get new lineWordFormat
|
|
|
|
lineWordFormat= currLine[i].Format;
|
|
|
|
lineWordFormat= currLine[i].Format;
|
|
|
|
// and clear
|
|
|
|
// and clear
|
|
|
@ -1538,7 +1538,7 @@ namespace NLGUI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(!lineWord.empty())
|
|
|
|
if(!lineWord.empty())
|
|
|
|
_Lines.back()->addWord(lineWord, 0, lineWordFormat, _FontWidth, *TextContext);
|
|
|
|
_Lines.back()->addWord(lineWord, 0, lineWordFormat, _FontWidth, *TextContext, _Scale);
|
|
|
|
|
|
|
|
|
|
|
|
// clear
|
|
|
|
// clear
|
|
|
|
currLine.clear();
|
|
|
|
currLine.clear();
|
|
|
@ -1699,7 +1699,7 @@ namespace NLGUI
|
|
|
|
{
|
|
|
|
{
|
|
|
|
uint maxNumSpaces = std::max(1U, (uint) (nMaxWidth / _SpaceWidth));
|
|
|
|
uint maxNumSpaces = std::max(1U, (uint) (nMaxWidth / _SpaceWidth));
|
|
|
|
CWord spaceWord; // a word with only spaces in it
|
|
|
|
CWord spaceWord; // a word with only spaces in it
|
|
|
|
spaceWord.build (ucstring (""), *TextContext, maxNumSpaces);
|
|
|
|
spaceWord.build (ucstring (""), *TextContext, _Scale, maxNumSpaces);
|
|
|
|
spaceWord.Format= wordFormat;
|
|
|
|
spaceWord.Format= wordFormat;
|
|
|
|
_Lines.push_back(TLineSPtr(new CLine));
|
|
|
|
_Lines.push_back(TLineSPtr(new CLine));
|
|
|
|
_Lines.back()->addWord(spaceWord, _FontWidth);
|
|
|
|
_Lines.back()->addWord(spaceWord, _FontWidth);
|
|
|
@ -1728,7 +1728,7 @@ namespace NLGUI
|
|
|
|
currChar = std::max((uint) 1, currChar); // must fit at least one character otherwise there's an infinite loop
|
|
|
|
currChar = std::max((uint) 1, currChar); // must fit at least one character otherwise there's an infinite loop
|
|
|
|
wordValue = _Text.substr(spaceEnd, currChar);
|
|
|
|
wordValue = _Text.substr(spaceEnd, currChar);
|
|
|
|
CWord word;
|
|
|
|
CWord word;
|
|
|
|
word.build(wordValue, *TextContext, numSpaces);
|
|
|
|
word.build(wordValue, *TextContext, _Scale, numSpaces);
|
|
|
|
word.Format= wordFormat;
|
|
|
|
word.Format= wordFormat;
|
|
|
|
_Lines.push_back(TLineSPtr(new CLine));
|
|
|
|
_Lines.push_back(TLineSPtr(new CLine));
|
|
|
|
float roomForSpaces = (float) nMaxWidth - word.Info.StringWidth;
|
|
|
|
float roomForSpaces = (float) nMaxWidth - word.Info.StringWidth;
|
|
|
@ -1763,7 +1763,7 @@ namespace NLGUI
|
|
|
|
if (!wordValue.empty() || numSpaces != 0)
|
|
|
|
if (!wordValue.empty() || numSpaces != 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CWord word;
|
|
|
|
CWord word;
|
|
|
|
word.build(wordValue, *TextContext, numSpaces);
|
|
|
|
word.build(wordValue, *TextContext, _Scale, numSpaces);
|
|
|
|
word.Format= wordFormat;
|
|
|
|
word.Format= wordFormat;
|
|
|
|
// update line width
|
|
|
|
// update line width
|
|
|
|
_Lines.back()->addWord(word, _FontWidth);
|
|
|
|
_Lines.back()->addWord(word, _FontWidth);
|
|
|
@ -1883,7 +1883,7 @@ namespace NLGUI
|
|
|
|
_Lines.pop_back();
|
|
|
|
_Lines.pop_back();
|
|
|
|
CViewText::CLine *endLine = new CViewText::CLine;
|
|
|
|
CViewText::CLine *endLine = new CViewText::CLine;
|
|
|
|
CViewText::CWord w;
|
|
|
|
CViewText::CWord w;
|
|
|
|
w.build(string("..."), *TextContext);
|
|
|
|
w.build(string("..."), *TextContext, _Scale);
|
|
|
|
endLine->addWord(w, _FontWidth);
|
|
|
|
endLine->addWord(w, _FontWidth);
|
|
|
|
_Lines.push_back(TLineSPtr(endLine));
|
|
|
|
_Lines.push_back(TLineSPtr(endLine));
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2280,7 +2280,7 @@ namespace NLGUI
|
|
|
|
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
|
|
|
// Tool fct : From a word and a x coordinate, give the matching character index
|
|
|
|
// Tool fct : From a word and a x coordinate, give the matching character index
|
|
|
|
static uint getCharacterIndex(const ucstring &textValue, float x, NL3D::UTextContext &textContext)
|
|
|
|
static uint getCharacterIndex(const ucstring &textValue, float x, NL3D::UTextContext &textContext, float scale)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
float px = 0.f;
|
|
|
|
float px = 0.f;
|
|
|
|
float sw;
|
|
|
|
float sw;
|
|
|
@ -2292,7 +2292,7 @@ namespace NLGUI
|
|
|
|
// get character width
|
|
|
|
// get character width
|
|
|
|
singleChar[0] = textValue[i];
|
|
|
|
singleChar[0] = textValue[i];
|
|
|
|
si = textContext.getStringInfo(singleChar);
|
|
|
|
si = textContext.getStringInfo(singleChar);
|
|
|
|
sw = si.StringWidth / CViewRenderer::getInstance()->getInterfaceScale();
|
|
|
|
sw = si.StringWidth / scale;
|
|
|
|
px += sw;
|
|
|
|
px += sw;
|
|
|
|
// the character is at the i - 1 position
|
|
|
|
// the character is at the i - 1 position
|
|
|
|
if (px > x)
|
|
|
|
if (px > x)
|
|
|
@ -2390,7 +2390,7 @@ namespace NLGUI
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// the coord is in the word itself
|
|
|
|
// the coord is in the word itself
|
|
|
|
index = charPos + currWord.NumSpaces + getCharacterIndex(currWord.Text, (float) x - (px + spacesWidth), *TextContext);
|
|
|
|
index = charPos + currWord.NumSpaces + getCharacterIndex(currWord.Text, (float) x - (px + spacesWidth), *TextContext, _Scale);
|
|
|
|
cursorAtPreviousLineEnd = false;
|
|
|
|
cursorAtPreviousLineEnd = false;
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2415,7 +2415,7 @@ namespace NLGUI
|
|
|
|
index = 0;
|
|
|
|
index = 0;
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
index = getCharacterIndex(_Text, (float) x, *TextContext);
|
|
|
|
index = getCharacterIndex(_Text, (float) x, *TextContext, _Scale);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2516,10 +2516,10 @@ namespace NLGUI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
|
|
|
void CViewText::CLine::addWord(const ucstring &text, uint numSpaces, const CFormatInfo &wordFormat, float fontWidth, NL3D::UTextContext &textContext)
|
|
|
|
void CViewText::CLine::addWord(const ucstring &text, uint numSpaces, const CFormatInfo &wordFormat, float fontWidth, NL3D::UTextContext &textContext, float scale)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CWord word;
|
|
|
|
CWord word;
|
|
|
|
word.build(text, textContext, numSpaces);
|
|
|
|
word.build(text, textContext, scale, numSpaces);
|
|
|
|
word.Format= wordFormat;
|
|
|
|
word.Format= wordFormat;
|
|
|
|
addWord(word, fontWidth);
|
|
|
|
addWord(word, fontWidth);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2563,13 +2563,13 @@ namespace NLGUI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
|
|
|
void CViewText::CWord::build(const ucstring &text, NL3D::UTextContext &textContext, uint numSpaces)
|
|
|
|
void CViewText::CWord::build(const ucstring &text, NL3D::UTextContext &textContext, float scale, uint numSpaces)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Text = text;
|
|
|
|
Text = text;
|
|
|
|
NumSpaces = numSpaces;
|
|
|
|
NumSpaces = numSpaces;
|
|
|
|
Index = textContext.textPush(text);
|
|
|
|
Index = textContext.textPush(text);
|
|
|
|
Info = textContext.getStringInfo(Index);
|
|
|
|
Info = textContext.getStringInfo(Index);
|
|
|
|
Info.StringWidth /= CViewRenderer::getInstance()->getInterfaceScale();
|
|
|
|
Info.StringWidth /= scale;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
|
|
|