From d11715935b677cb9dfe5420a08972036a9ab6b9b Mon Sep 17 00:00:00 2001 From: Sergei Nevdakh Date: Mon, 15 Apr 2024 17:31:49 +0300 Subject: [PATCH] ref counter LineBreakHelper::previousGlyphFontEngine --- src/qtbase/src/gui/text/qtextlayout.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/qtbase/src/gui/text/qtextlayout.cpp b/src/qtbase/src/gui/text/qtextlayout.cpp index e1eb1202..2e2431c3 100644 --- a/src/qtbase/src/gui/text/qtextlayout.cpp +++ b/src/qtbase/src/gui/text/qtextlayout.cpp @@ -1673,11 +1673,17 @@ namespace { struct LineBreakHelper { LineBreakHelper() - : glyphCount(0), maxGlyphs(0), currentPosition(0), fontEngine(nullptr), logClusters(nullptr), + : glyphCount(0), maxGlyphs(0), currentPosition(0), previousGlyphFontEngine(nullptr), fontEngine(nullptr), logClusters(nullptr), manualWrap(false), whiteSpaceOrObject(true) { } + ~LineBreakHelper() + { + if (previousGlyphFontEngine && !previousGlyphFontEngine->ref.deref()) + delete previousGlyphFontEngine; + } + QScriptLine tmpData; QScriptLine spaceData; @@ -1723,7 +1729,11 @@ namespace { if (currentPosition > 0 && logClusters[currentPosition - 1] < glyphs.numGlyphs) { previousGlyph = currentGlyph(); // needed to calculate right bearing later + if (previousGlyphFontEngine && !previousGlyphFontEngine->ref.deref()) + delete previousGlyphFontEngine; + previousGlyphFontEngine = fontEngine; + previousGlyphFontEngine->ref.ref(); } } -- GitLab