mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Prevent duplicate entries in the line-break array. Bug 404204, b+r+sr=roc
This commit is contained in:
parent
9c8e59ce28
commit
5e7ee1a7dc
@ -1322,14 +1322,6 @@ GetFontMetrics(gfxFontGroup* aFontGroup)
|
||||
return font->GetMetrics();
|
||||
}
|
||||
|
||||
static void
|
||||
AppendLineBreakOffset(nsTArray<PRUint32>* aArray, PRUint32 aOffset)
|
||||
{
|
||||
if (aArray->Length() > 0 && (*aArray)[aArray->Length() - 1] == aOffset)
|
||||
return;
|
||||
aArray->AppendElement(aOffset);
|
||||
}
|
||||
|
||||
void
|
||||
BuildTextRunsScanner::BuildTextRunForFrames(void* aTextBuffer)
|
||||
{
|
||||
@ -1532,11 +1524,12 @@ BuildTextRunsScanner::BuildTextRunForFrames(void* aTextBuffer)
|
||||
gfxSkipCharsIterator iter(skipChars);
|
||||
nsAutoTArray<PRUint32,50> textBreakPointsAfterTransform;
|
||||
for (i = 0; i < textBreakPoints.Length(); ++i) {
|
||||
AppendLineBreakOffset(&textBreakPointsAfterTransform,
|
||||
nsTextFrameUtils::AppendLineBreakOffset(&textBreakPointsAfterTransform,
|
||||
iter.ConvertOriginalToSkipped(textBreakPoints[i]));
|
||||
}
|
||||
if (mStartOfLine) {
|
||||
AppendLineBreakOffset(&textBreakPointsAfterTransform, transformedLength);
|
||||
nsTextFrameUtils::AppendLineBreakOffset(&textBreakPointsAfterTransform,
|
||||
transformedLength);
|
||||
}
|
||||
|
||||
// Setup factory chain
|
||||
|
@ -113,6 +113,15 @@ public:
|
||||
PRPackedBool* aIncomingWhitespace,
|
||||
gfxSkipCharsBuilder* aSkipChars,
|
||||
PRUint32* aAnalysisFlags);
|
||||
|
||||
static void
|
||||
AppendLineBreakOffset(nsTArray<PRUint32>* aArray, PRUint32 aOffset)
|
||||
{
|
||||
if (aArray->Length() > 0 && (*aArray)[aArray->Length() - 1] == aOffset)
|
||||
return;
|
||||
aArray->AppendElement(aOffset);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class nsSkipCharsRunIterator {
|
||||
|
@ -106,14 +106,14 @@ nsTransformedTextRun::SetLineBreaks(PRUint32 aStart, PRUint32 aLength,
|
||||
changed = PR_TRUE;
|
||||
}
|
||||
if (aLineBreakBefore) {
|
||||
newBreaks.AppendElement(aStart);
|
||||
nsTextFrameUtils::AppendLineBreakOffset(&newBreaks, aStart);
|
||||
}
|
||||
if (aLineBreakAfter != (i + 1 < mLineBreaks.Length() &&
|
||||
mLineBreaks[i + 1] == aStart + aLength)) {
|
||||
changed = PR_TRUE;
|
||||
}
|
||||
if (aLineBreakAfter) {
|
||||
newBreaks.AppendElement(aStart + aLength);
|
||||
nsTextFrameUtils::AppendLineBreakOffset(&newBreaks, aStart + aLength);
|
||||
}
|
||||
for (; i < mLineBreaks.Length(); ++i) {
|
||||
if (mLineBreaks[i] > aStart + aLength)
|
||||
|
Loading…
Reference in New Issue
Block a user