Fix #27317: color inversion incorrectly affecting palettes #27642
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves: #27317
Addresses certain elements of the palettes rendering in an incorrect color when score inversion is enabled.
Root cause of the issue
Items drawn under the palettes should not be inverted, as the palettes are drawn according to the overall app theme (light, dark, high contrast) and the appearance of palettes isn't meant to be affected by the invert score setting. To accomplish this,
EngravingItemPreviewPainterhas some code that overrides the color inversion flag right before it draws an element, then restores the original flag value after.The problem was in two cases (that I know of), the inversion flag wasn't being propagated to related elements:
SingleDraw::drawmethods).Approaches to fix
In this PR I did a "minimally invasive" fix, by adding logic to
EngravingItemPreviewPainterto detect text line and spanner segments, and explicitly set (and restore) the flag override on the related elements.However, I can also see an argument for making
setColorsInversionEnableda virtual method, and having each engraving item handle it similarly tosetVisible,setColor, etc. That would be a much bigger fix, but maybe is more the "right" way to do it.