- use a saner data structure to store the BrokenLines.
Calling the old method with a pointer to an array of unspecified length 'dirty' would be an understatement. Now it uses a TArray to store the single elements
This commit is contained in:
parent
b911bbc424
commit
0d54d335c4
15 changed files with 62 additions and 135 deletions
|
|
@ -74,11 +74,11 @@ FConsoleBuffer::~FConsoleBuffer()
|
|||
|
||||
void FConsoleBuffer::FreeBrokenText(unsigned start, unsigned end)
|
||||
{
|
||||
if (end > mBrokenConsoleText.Size()) end = mBrokenConsoleText.Size();
|
||||
if (end > m_BrokenConsoleText.Size()) end = m_BrokenConsoleText.Size();
|
||||
for (unsigned i = start; i < end; i++)
|
||||
{
|
||||
if (mBrokenConsoleText[i] != NULL) V_FreeBrokenLines(mBrokenConsoleText[i]);
|
||||
mBrokenConsoleText[i] = NULL;
|
||||
m_BrokenConsoleText[i].Clear();
|
||||
m_BrokenConsoleText[i].ShrinkToFit();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ void FConsoleBuffer::FormatText(FFont *formatfont, int displaywidth)
|
|||
if (formatfont != mLastFont || displaywidth != mLastDisplayWidth || mBufferWasCleared)
|
||||
{
|
||||
FreeBrokenText();
|
||||
mBrokenConsoleText.Clear();
|
||||
m_BrokenConsoleText.Clear();
|
||||
mBrokenStart.Clear();
|
||||
mBrokenStart.Push(0);
|
||||
mBrokenLines.Clear();
|
||||
|
|
@ -268,7 +268,7 @@ void FConsoleBuffer::FormatText(FFont *formatfont, int displaywidth)
|
|||
mLastDisplayWidth = displaywidth;
|
||||
mBufferWasCleared = false;
|
||||
}
|
||||
unsigned brokensize = mBrokenConsoleText.Size();
|
||||
unsigned brokensize = m_BrokenConsoleText.Size();
|
||||
if (brokensize == mConsoleText.Size())
|
||||
{
|
||||
// The last line got text appended. We have to wait until here to format it because
|
||||
|
|
@ -276,21 +276,19 @@ void FConsoleBuffer::FormatText(FFont *formatfont, int displaywidth)
|
|||
if (mLastLineNeedsUpdate)
|
||||
{
|
||||
brokensize--;
|
||||
V_FreeBrokenLines(mBrokenConsoleText[brokensize]);
|
||||
mBrokenConsoleText.Resize(brokensize);
|
||||
m_BrokenConsoleText.Resize(brokensize);
|
||||
}
|
||||
}
|
||||
mBrokenLines.Resize(mBrokenStart[brokensize]);
|
||||
mBrokenStart.Resize(brokensize);
|
||||
for (unsigned i = brokensize; i < mConsoleText.Size(); i++)
|
||||
{
|
||||
FBrokenLines *bl = V_BreakLines(formatfont, displaywidth, mConsoleText[i], true);
|
||||
mBrokenConsoleText.Push(bl);
|
||||
auto bl = V_BreakLines(formatfont, displaywidth, mConsoleText[i], true);
|
||||
m_BrokenConsoleText.Push(bl);
|
||||
mBrokenStart.Push(mBrokenLines.Size());
|
||||
while (bl->Width != -1)
|
||||
for(auto &bline : bl)
|
||||
{
|
||||
mBrokenLines.Push(bl);
|
||||
bl++;
|
||||
mBrokenLines.Push(bline);
|
||||
}
|
||||
}
|
||||
mTextLines = mBrokenLines.Size();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue