mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 01:58:19 +00:00
add ellipsis again
This commit is contained in:
parent
4183ad6b47
commit
0914c1260b
|
@ -1057,6 +1057,21 @@ public:
|
|||
|
||||
const char *pCurrent = (char *)pText;
|
||||
const char *pEnd = pCurrent + Length;
|
||||
const char *pEllipsis = "…";
|
||||
SFontSizeChar *pEllipsisChr = nullptr;
|
||||
if(pCursor->m_Flags & TEXTFLAG_ELLIPSIS_AT_END)
|
||||
{
|
||||
if(pCursor->m_LineWidth != -1 && pCursor->m_LineWidth < TextWidth(0, pCursor->m_FontSize, pText, -1, -1.0f))
|
||||
{
|
||||
pEllipsisChr = GetChar(TextContainer.m_pFont, pSizeData, 0x2026); // …
|
||||
if(pEllipsisChr == nullptr)
|
||||
{
|
||||
// no ellipsis char in font, just stop at end instead
|
||||
pCursor->m_Flags &= ~TEXTFLAG_ELLIPSIS_AT_END;
|
||||
pCursor->m_Flags |= TEXTFLAG_STOP_AT_END;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int RenderFlags = TextContainer.m_RenderFlags;
|
||||
|
||||
|
@ -1163,11 +1178,11 @@ public:
|
|||
pCursor->m_CursorCharacter = -1;
|
||||
}
|
||||
|
||||
while(pCurrent < pEnd && (pCursor->m_MaxLines < 1 || LineCount <= pCursor->m_MaxLines))
|
||||
while(pCurrent < pEnd && (pCursor->m_MaxLines < 1 || LineCount <= pCursor->m_MaxLines) && pCurrent != pEllipsis)
|
||||
{
|
||||
int NewLine = 0;
|
||||
const char *pBatchEnd = pEnd;
|
||||
if(pCursor->m_LineWidth > 0 && !(pCursor->m_Flags & TEXTFLAG_STOP_AT_END))
|
||||
if(pCursor->m_LineWidth > 0 && !(pCursor->m_Flags & TEXTFLAG_STOP_AT_END) && !(pCursor->m_Flags & TEXTFLAG_ELLIPSIS_AT_END))
|
||||
{
|
||||
int Wlen = minimum(WordLength((char *)pCurrent), (int)(pEnd - pCurrent));
|
||||
CTextCursor Compare = *pCursor;
|
||||
|
@ -1212,11 +1227,11 @@ public:
|
|||
const char *pTmp = pCurrent;
|
||||
int NextCharacter = str_utf8_decode(&pTmp);
|
||||
|
||||
while(pCurrent < pBatchEnd)
|
||||
while(pCurrent < pBatchEnd && pCurrent != pEllipsis)
|
||||
{
|
||||
pCursor->m_CharCount += pTmp - pCurrent;
|
||||
int Character = NextCharacter;
|
||||
pCurrent = pTmp;
|
||||
int Character = NextCharacter;
|
||||
NextCharacter = str_utf8_decode(&pTmp);
|
||||
|
||||
if(Character == '\n')
|
||||
|
@ -1242,6 +1257,23 @@ public:
|
|||
CharKerning = Kerning(TextContainer.m_pFont, LastCharGlyphIndex, pChr->m_GlyphIndex) * Scale * Size;
|
||||
LastCharGlyphIndex = pChr->m_GlyphIndex;
|
||||
|
||||
if(pEllipsisChr != nullptr && pCursor->m_Flags & TEXTFLAG_ELLIPSIS_AT_END && pCurrent < pBatchEnd && pCurrent != pEllipsis)
|
||||
{
|
||||
float AdvanceEllipsis = ((((RenderFlags & TEXT_RENDER_FLAG_ONLY_ADVANCE_WIDTH) != 0) ? (pEllipsisChr->m_Width) : (pEllipsisChr->m_AdvanceX + ((!ApplyBearingX) ? (-pEllipsisChr->m_OffsetX) : 0.f)))) * Scale * Size;
|
||||
float CharKerningEllipsis = 0.f;
|
||||
if((RenderFlags & TEXT_RENDER_FLAG_KERNING) != 0)
|
||||
{
|
||||
CharKerningEllipsis = Kerning(TextContainer.m_pFont, pChr->m_GlyphIndex, pEllipsisChr->m_GlyphIndex) * Scale * Size;
|
||||
}
|
||||
if(DrawX + CharKerning + Advance + CharKerningEllipsis + AdvanceEllipsis - pCursor->m_StartX > pCursor->m_LineWidth)
|
||||
{
|
||||
// we hit the end, only render ellipsis and finish
|
||||
pTmp = pEllipsis;
|
||||
NextCharacter = 0x2026;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(pCursor->m_Flags & TEXTFLAG_STOP_AT_END && (DrawX + CharKerning) + Advance - pCursor->m_StartX > pCursor->m_LineWidth)
|
||||
{
|
||||
// we hit the end of the line, no more to render or count
|
||||
|
|
|
@ -12,7 +12,8 @@ enum
|
|||
{
|
||||
TEXTFLAG_RENDER = 1,
|
||||
TEXTFLAG_ALLOW_NEWLINE = 2,
|
||||
TEXTFLAG_STOP_AT_END = 4
|
||||
TEXTFLAG_STOP_AT_END = 4,
|
||||
TEXTFLAG_ELLIPSIS_AT_END = 8,
|
||||
};
|
||||
|
||||
enum ETextAlignment
|
||||
|
|
|
@ -441,11 +441,9 @@ void CHud::RenderScoreHud()
|
|||
if(m_aScoreInfo[t].m_OptionalNameTextContainerIndex != -1)
|
||||
TextRender()->DeleteTextContainer(m_aScoreInfo[t].m_OptionalNameTextContainerIndex);
|
||||
|
||||
float w = TextRender()->TextWidth(0, 8.0f, pName, -1, -1.0f);
|
||||
|
||||
CTextCursor Cursor;
|
||||
TextRender()->SetCursor(&Cursor, minimum(m_Width - w - 1.0f, m_Width - ScoreWidthMax - ImageSize - 2 * Split - PosSize), StartY + (t + 1) * 20.0f - 2.0f, 8.0f, TEXTFLAG_RENDER);
|
||||
Cursor.m_LineWidth = -1;
|
||||
TextRender()->SetCursor(&Cursor, m_Width - ScoreWidthMax - ImageSize - 2 * Split - PosSize, StartY + (t + 1) * 20.0f - 2.0f, 8.0f, TEXTFLAG_RENDER | TEXTFLAG_ELLIPSIS_AT_END);
|
||||
Cursor.m_LineWidth = m_Width - Cursor.m_X - Split;
|
||||
m_aScoreInfo[t].m_OptionalNameTextContainerIndex = TextRender()->CreateTextContainer(&Cursor, pName);
|
||||
}
|
||||
|
||||
|
|
|
@ -466,7 +466,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
|
|||
RenderTools()->RenderTee(pIdleState, &TeeInfo, EMOTE_NORMAL, vec2(1.0f, 0.0f), TeeRenderPos);
|
||||
|
||||
// name
|
||||
TextRender()->SetCursor(&Cursor, NameOffset, y + (LineHeight - FontSize) / 2.f, FontSize, TEXTFLAG_RENDER | TEXTFLAG_STOP_AT_END);
|
||||
TextRender()->SetCursor(&Cursor, NameOffset, y + (LineHeight - FontSize) / 2.f, FontSize, TEXTFLAG_RENDER | TEXTFLAG_ELLIPSIS_AT_END);
|
||||
if(m_pClient->m_aClients[pInfo->m_ClientID].m_AuthLevel)
|
||||
{
|
||||
ColorRGBA Color = color_cast<ColorRGBA>(ColorHSLA(g_Config.m_ClAuthedPlayerColor));
|
||||
|
@ -504,7 +504,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
|
|||
TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
tw = minimum(TextRender()->TextWidth(nullptr, FontSize, m_pClient->m_aClients[pInfo->m_ClientID].m_aClan, -1, -1.0f), ClanLength);
|
||||
TextRender()->SetCursor(&Cursor, ClanOffset + (ClanLength - tw) / 2, y + (LineHeight - FontSize) / 2.f, FontSize, TEXTFLAG_RENDER | TEXTFLAG_STOP_AT_END);
|
||||
TextRender()->SetCursor(&Cursor, ClanOffset + (ClanLength - tw) / 2, y + (LineHeight - FontSize) / 2.f, FontSize, TEXTFLAG_RENDER | TEXTFLAG_ELLIPSIS_AT_END);
|
||||
Cursor.m_LineWidth = ClanLength;
|
||||
TextRender()->TextEx(&Cursor, m_pClient->m_aClients[pInfo->m_ClientID].m_aClan, -1);
|
||||
|
||||
|
|
Loading…
Reference in a new issue