From 080ac6e7e7999058fbd34196cdc43c021f0bd001 Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 26 Feb 2024 19:03:58 +0000 Subject: [PATCH] LruCache: Factor out of GlyphArrangementCache --- .../Builds/Android/app/CMakeLists.txt | 2 + .../VisualStudio2017/DemoRunner_App.vcxproj | 1 + .../DemoRunner_App.vcxproj.filters | 3 + .../VisualStudio2019/DemoRunner_App.vcxproj | 1 + .../DemoRunner_App.vcxproj.filters | 3 + .../VisualStudio2022/DemoRunner_App.vcxproj | 1 + .../DemoRunner_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../AudioPerformanceTest_App.vcxproj | 1 + .../AudioPerformanceTest_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../AudioPluginHost_App.vcxproj | 1 + .../AudioPluginHost_App.vcxproj.filters | 3 + .../AudioPluginHost_App.vcxproj | 1 + .../AudioPluginHost_App.vcxproj.filters | 3 + .../AudioPluginHost_App.vcxproj | 1 + .../AudioPluginHost_App.vcxproj.filters | 3 + .../Builds/Android/app/CMakeLists.txt | 2 + .../NetworkGraphicsDemo_App.vcxproj | 1 + .../NetworkGraphicsDemo_App.vcxproj.filters | 3 + .../VisualStudio2017/Projucer_App.vcxproj | 1 + .../Projucer_App.vcxproj.filters | 3 + .../VisualStudio2019/Projucer_App.vcxproj | 1 + .../Projucer_App.vcxproj.filters | 3 + .../VisualStudio2022/Projucer_App.vcxproj | 1 + .../Projucer_App.vcxproj.filters | 3 + .../UnitTestRunner_ConsoleApp.vcxproj | 1 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 + .../UnitTestRunner_ConsoleApp.vcxproj | 1 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 + .../UnitTestRunner_ConsoleApp.vcxproj | 1 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 3 + .../WindowsDLL_StaticLibrary.vcxproj | 1 + .../WindowsDLL_StaticLibrary.vcxproj.filters | 3 + .../contexts/juce_GraphicsContext.cpp | 76 +++++------------ modules/juce_graphics/fonts/juce_LruCache.h | 84 +++++++++++++++++++ modules/juce_graphics/juce_graphics.cpp | 1 + 37 files changed, 173 insertions(+), 56 deletions(-) create mode 100644 modules/juce_graphics/fonts/juce_LruCache.h diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index 2701be6ff0..213b9fb32b 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -1821,6 +1821,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" @@ -4284,6 +4285,7 @@ set_source_files_properties( "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj index 5eec35f268..409bed9e2b 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj @@ -4135,6 +4135,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters index 491d11e512..1310a4b55b 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters @@ -7137,6 +7137,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index e27808acf1..7bc2f31cc7 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -4135,6 +4135,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index 90e8fbeb7f..10cb5d602b 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -7137,6 +7137,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index 7703651909..d034adfd40 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -4135,6 +4135,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index f1a7954b7e..832d8fd8da 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -7137,6 +7137,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index ee894e8676..3cb52b0dfb 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -1583,6 +1583,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" @@ -3728,6 +3729,7 @@ set_source_files_properties( "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 29a78ff88e..b2b87cf479 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -3606,6 +3606,7 @@ + diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index d1b6ca7e51..181041210a 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -6192,6 +6192,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index 5836a2c403..39a284b2b2 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -1713,6 +1713,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" @@ -4011,6 +4012,7 @@ set_source_files_properties( "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj index 7274a0ec43..34e5bd94e2 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj @@ -3839,6 +3839,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters index ad9cc580ec..43d7ced166 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters @@ -6627,6 +6627,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index 59d788a62a..932ac849a3 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -3839,6 +3839,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index b7958f9f03..2b2dc9a272 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -6627,6 +6627,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 4346f8bab0..58b6da112f 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -3839,6 +3839,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 003ef7864b..e54be8ba21 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -6627,6 +6627,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index acea45e7ff..7b770e2113 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -1602,6 +1602,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" @@ -3827,6 +3828,7 @@ set_source_files_properties( "../../../../../modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp" "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h" + "../../../../../modules/juce_graphics/fonts/juce_LruCache.h" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp" "../../../../../modules/juce_graphics/fonts/juce_TextLayout.h" "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index 1116fa49a0..bba04587c3 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -3704,6 +3704,7 @@ + diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 12796b1747..e84dfcd2d1 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -6354,6 +6354,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj index 0e7f58e592..e32fdb2ceb 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj @@ -2521,6 +2521,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters index 3253030f02..5b68dbba75 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters @@ -4332,6 +4332,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index 9c034564dd..f5f1fa8bea 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -2521,6 +2521,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index 27ff30dbc5..57cc299aa9 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -4332,6 +4332,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj index a6fd888f10..f593e05a18 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj @@ -2521,6 +2521,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index 44c0153f5e..a9ebc0ba85 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -4332,6 +4332,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj index aa44f67a72..cfc1e8944b 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj @@ -3935,6 +3935,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters index dce8dbe962..e8891893e4 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -6741,6 +6741,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index 5b513e4bbf..37318296d2 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -3935,6 +3935,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index 78aa21314c..ab2d5f5570 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -6741,6 +6741,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index 60bba34113..cac9e8a8e6 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -3935,6 +3935,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index 76c7151150..c3066925f9 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -6741,6 +6741,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj index 989161a28a..d756c649f7 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj @@ -3680,6 +3680,7 @@ + diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters index 868c703321..0421b160a0 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters @@ -6321,6 +6321,9 @@ JUCE Modules\juce_graphics\fonts + + JUCE Modules\juce_graphics\fonts + JUCE Modules\juce_graphics\fonts diff --git a/modules/juce_graphics/contexts/juce_GraphicsContext.cpp b/modules/juce_graphics/contexts/juce_GraphicsContext.cpp index 294ccd1038..205697c78f 100644 --- a/modules/juce_graphics/contexts/juce_GraphicsContext.cpp +++ b/modules/juce_graphics/contexts/juce_GraphicsContext.cpp @@ -62,7 +62,10 @@ namespace { struct ConfiguredArrangement { - void draw (const Graphics& g) const { arrangement.draw (g, transform); } + void draw (const Graphics& g) const + { + arrangement.draw (g, transform); + } GlyphArrangement arrangement; AffineTransform transform; @@ -80,56 +83,17 @@ namespace } template - void draw (const Graphics& g, ArrangementArgs&& args, ConfigureArrangement&& configureArrangement) + [[nodiscard]] auto get (ArrangementArgs&& args, ConfigureArrangement&& configureArrangement) { const ScopedTryLock stl (lock); - - if (! stl.isLocked()) - { - configureArrangement (args).draw (g); - return; - } - - const auto cached = [&] - { - const auto iter = cache.find (args); - - if (iter != cache.end()) - { - if (iter->second.cachePosition != cacheOrder.begin()) - cacheOrder.splice (cacheOrder.begin(), cacheOrder, iter->second.cachePosition); - - return iter; - } - - auto result = cache.emplace (std::move (args), CachedGlyphArrangement { configureArrangement (args), {} }).first; - cacheOrder.push_front (result); - return result; - }(); - - cached->second.cachePosition = cacheOrder.begin(); - cached->second.configured.draw (g); - - while (cache.size() > cacheSize) - { - cache.erase (cacheOrder.back()); - cacheOrder.pop_back(); - } + return stl.isLocked() ? cache.get (args, std::forward (configureArrangement)) + : configureArrangement (args); } JUCE_DECLARE_SINGLETON (GlyphArrangementCache, false) private: - struct CachedGlyphArrangement - { - using CachePtr = typename std::map::const_iterator; - ConfiguredArrangement configured; - typename std::list::const_iterator cachePosition; - }; - - static constexpr size_t cacheSize = 128; - std::map cache; - std::list cacheOrder; + LruCache cache; CriticalSection lock; }; @@ -383,9 +347,9 @@ void Graphics::drawSingleLineText (const String& text, const int startX, const i return ConfiguredArrangement { std::move (arrangement), std::move (transform) }; }; - GlyphArrangementCache::getInstance()->draw (*this, - { context.getFont(), text, startX, baselineY, flags }, - std::move (configureArrangement)); + GlyphArrangementCache::getInstance()->get ({ context.getFont(), text, startX, baselineY, flags }, + std::move (configureArrangement)) + .draw (*this); } void Graphics::drawMultiLineText (const String& text, const int startX, @@ -416,9 +380,9 @@ void Graphics::drawMultiLineText (const String& text, const int startX, return ConfiguredArrangement { std::move (arrangement), {} }; }; - GlyphArrangementCache::getInstance()->draw (*this, - { context.getFont(), text, startX, baselineY, maximumLineWidth, justification, leading }, - std::move (configureArrangement)); + GlyphArrangementCache::getInstance()->get ({ context.getFont(), text, startX, baselineY, maximumLineWidth, justification, leading }, + std::move (configureArrangement)) + .draw (*this); } void Graphics::drawText (const String& text, Rectangle area, @@ -451,9 +415,9 @@ void Graphics::drawText (const String& text, Rectangle area, return ConfiguredArrangement { std::move (arrangement), {} }; }; - GlyphArrangementCache::getInstance()->draw (*this, - { context.getFont(), text, area, justificationType, useEllipsesIfTooBig }, - std::move (configureArrangement)); + GlyphArrangementCache::getInstance()->get ({ context.getFont(), text, area, justificationType, useEllipsesIfTooBig }, + std::move (configureArrangement)) + .draw (*this); } void Graphics::drawText (const String& text, Rectangle area, @@ -501,9 +465,9 @@ void Graphics::drawFittedText (const String& text, Rectangle area, return ConfiguredArrangement { std::move (arrangement), {} }; }; - GlyphArrangementCache::getInstance()->draw (*this, - { context.getFont(), text, area.toFloat(), justification, maximumNumberOfLines, minimumHorizontalScale }, - std::move (configureArrangement)); + GlyphArrangementCache::getInstance()->get ({ context.getFont(), text, area.toFloat(), justification, maximumNumberOfLines, minimumHorizontalScale }, + std::move (configureArrangement)) + .draw (*this); } void Graphics::drawFittedText (const String& text, int x, int y, int width, int height, diff --git a/modules/juce_graphics/fonts/juce_LruCache.h b/modules/juce_graphics/fonts/juce_LruCache.h new file mode 100644 index 0000000000..96ab860533 --- /dev/null +++ b/modules/juce_graphics/fonts/juce_LruCache.h @@ -0,0 +1,84 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +template +class LruCache +{ +public: + template + Value get (Key key, Fn&& fn) + { + if (const auto iter = map.find (key); iter != map.end()) + { + list.erase (iter->second.listIterator); + iter->second.listIterator = list.insert (list.end(), iter); + return iter->second.value; + } + + while (list.size() >= maxEntries) + { + const auto toRemove = list.begin(); + map.erase (*toRemove); + list.erase (toRemove); + } + + auto value = fn (key); + const auto mapIteratorPair = map.emplace (std::move (key), Pair { std::move (value), {} }); + + jassert (mapIteratorPair.second); + + mapIteratorPair.first->second.listIterator = list.insert (list.end(), mapIteratorPair.first); + return mapIteratorPair.first->second.value; + } + +private: + struct Pair + { + using Map = std::map; + using MapIterator = typename Map::const_iterator; + using List = std::list; + using ListIterator = typename List::const_iterator; + + Value value; + ListIterator listIterator; + }; + + typename Pair::Map map; + typename Pair::List list; +}; + +} // namespace juce diff --git a/modules/juce_graphics/juce_graphics.cpp b/modules/juce_graphics/juce_graphics.cpp index 681f339844..d0e103765e 100644 --- a/modules/juce_graphics/juce_graphics.cpp +++ b/modules/juce_graphics/juce_graphics.cpp @@ -105,6 +105,7 @@ //============================================================================== #include "fonts/juce_FunctionPointerDestructor.h" +#include "fonts/juce_LruCache.h" #include "colour/juce_Colour.cpp" #include "colour/juce_ColourGradient.cpp"