Include mirrored state in text render cache key
The render cache for text glyphs was validated based on font, text, angle, and offset, but not the mirrored state. This caused incorrect rendering when text items had their mirrored state changed Add m_render_cache_mirrored to the cache key so the cache is properly invalidated when the mirrored state changes. This ensures dimension text and other text items render correctly on back layers in the 3D viewer. Fixes https://gitlab.com/kicad/code/kicad/-/issues/19291
This commit is contained in:
+8
-1
@@ -99,6 +99,7 @@ EDA_TEXT::EDA_TEXT( const EDA_IU_SCALE& aIuScale, const wxString& aText ) :
|
||||
m_text( aText ),
|
||||
m_IuScale( aIuScale ),
|
||||
m_render_cache_font( nullptr ),
|
||||
m_render_cache_mirrored( false ),
|
||||
m_visible( true )
|
||||
{
|
||||
SetTextSize( VECTOR2I( EDA_UNIT_UTILS::Mils2IU( m_IuScale, DEFAULT_SIZE_TEXT ),
|
||||
@@ -132,6 +133,7 @@ EDA_TEXT::EDA_TEXT( const EDA_TEXT& aText ) :
|
||||
m_render_cache_text = aText.m_render_cache_text;
|
||||
m_render_cache_angle = aText.m_render_cache_angle;
|
||||
m_render_cache_offset = aText.m_render_cache_offset;
|
||||
m_render_cache_mirrored = aText.m_render_cache_mirrored;
|
||||
|
||||
m_render_cache.clear();
|
||||
|
||||
@@ -174,6 +176,7 @@ EDA_TEXT& EDA_TEXT::operator=( const EDA_TEXT& aText )
|
||||
m_render_cache_text = aText.m_render_cache_text;
|
||||
m_render_cache_angle = aText.m_render_cache_angle;
|
||||
m_render_cache_offset = aText.m_render_cache_offset;
|
||||
m_render_cache_mirrored = aText.m_render_cache_mirrored;
|
||||
|
||||
m_render_cache.clear();
|
||||
|
||||
@@ -694,9 +697,11 @@ EDA_TEXT::GetRenderCache( const KIFONT::FONT* aFont, const wxString& forResolved
|
||||
if( aFont->IsOutline() )
|
||||
{
|
||||
EDA_ANGLE resolvedAngle = GetDrawRotation();
|
||||
bool mirrored = IsMirrored();
|
||||
|
||||
if( m_render_cache.empty() || m_render_cache_font != aFont || m_render_cache_text != forResolvedText
|
||||
|| m_render_cache_angle != resolvedAngle || m_render_cache_offset != aOffset )
|
||||
|| m_render_cache_angle != resolvedAngle || m_render_cache_offset != aOffset
|
||||
|| m_render_cache_mirrored != mirrored )
|
||||
{
|
||||
m_render_cache.clear();
|
||||
|
||||
@@ -710,6 +715,7 @@ EDA_TEXT::GetRenderCache( const KIFONT::FONT* aFont, const wxString& forResolved
|
||||
m_render_cache_angle = resolvedAngle;
|
||||
m_render_cache_text = forResolvedText;
|
||||
m_render_cache_offset = aOffset;
|
||||
m_render_cache_mirrored = mirrored;
|
||||
}
|
||||
|
||||
return &m_render_cache;
|
||||
@@ -726,6 +732,7 @@ void EDA_TEXT::SetupRenderCache( const wxString& aResolvedText, const KIFONT::FO
|
||||
m_render_cache_font = aFont;
|
||||
m_render_cache_angle = aAngle;
|
||||
m_render_cache_offset = aOffset;
|
||||
m_render_cache_mirrored = IsMirrored();
|
||||
m_render_cache.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -467,6 +467,7 @@ private:
|
||||
mutable const KIFONT::FONT* m_render_cache_font;
|
||||
mutable EDA_ANGLE m_render_cache_angle;
|
||||
mutable VECTOR2I m_render_cache_offset;
|
||||
mutable bool m_render_cache_mirrored;
|
||||
mutable std::vector<std::unique_ptr<KIFONT::GLYPH>> m_render_cache;
|
||||
|
||||
struct BBOX_CACHE_ENTRY
|
||||
|
||||
Reference in New Issue
Block a user