# HG changeset patch # User Peter Nelson # Date 2023-05-18 07:36:54 # Node ID dea7924e367af9adf62be7266d031f399491bf87 # Parent b919ab98bb53ad627b9245db5309160a84fa8932 Codechange: Use unique_ptr for text layout font mapping. This must stay a pointer as the value passed to other structures. diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -297,10 +297,10 @@ ptrdiff_t Layouter::GetCharAtPosition(in Font *Layouter::GetFont(FontSize size, TextColour colour) { FontColourMap::iterator it = fonts[size].find(colour); - if (it != fonts[size].end()) return it->second; + if (it != fonts[size].end()) return it->second.get(); - fonts[size][colour] = new Font(size, colour); - return fonts[size][colour]; + fonts[size][colour] = std::make_unique(size, colour); + return fonts[size][colour].get(); } /** @@ -309,9 +309,6 @@ Font *Layouter::GetFont(FontSize size, T */ void Layouter::ResetFontCache(FontSize size) { - for (auto &pair : fonts[size]) { - delete pair.second; - } fonts[size].clear(); /* We must reset the linecache since it references the just freed fonts */ diff --git a/src/gfx_layout.h b/src/gfx_layout.h --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -80,7 +80,7 @@ public: Font(FontSize size, TextColour colour); }; -/** Mapping from index to font. */ +/** Mapping from index to font. The pointer is owned by FontColourMap. */ using FontMap = std::map; /** @@ -169,7 +169,7 @@ private: static LineCacheItem &GetCachedParagraphLayout(std::string_view str, const FontState &state); - using FontColourMap = std::map; + using FontColourMap = std::map>; static FontColourMap fonts[FS_END]; public: static Font *GetFont(FontSize size, TextColour colour);