mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
str_metrics: Prevent clipping of chars with negative bearing
This happens when part of the word is selected. To reproduce: 1. Start a new document 2. Type "af" 3. Select 'a' 4. Observe that the right part of the 'f' is clipped away. This patch uses QRegion to set a clip region that is everything except the part that is drawn in another color. Fixes: #9223.
This commit is contained in:
parent
be22665ceb
commit
c313b1c8eb
@ -465,15 +465,16 @@ int GuiPainter::text(int x, int y, docstring const & str, Font const & f,
|
||||
// First the part in other color
|
||||
Color const orig = fi.realColor();
|
||||
fi.setPaintColor(other);
|
||||
setClipRect(QRect(x + xmin, y - ascent, xmax - xmin, height));
|
||||
QRegion const clip(x + xmin, y - ascent, xmax - xmin, height);
|
||||
setClipRegion(clip);
|
||||
int const textwidth = text(x, y, str, fi, rtl);
|
||||
|
||||
// Then the part in normal color
|
||||
// Note that in Qt5, it is not possible to use Qt::UniteClip
|
||||
// Note that in Qt5, it is not possible to use Qt::UniteClip,
|
||||
// therefore QRegion is used.
|
||||
fi.setPaintColor(orig);
|
||||
setClipRect(QRect(x, y - ascent, xmin, height));
|
||||
text(x, y, str, fi, rtl);
|
||||
setClipRect(QRect(x + xmax, y - ascent, textwidth - xmax, height));
|
||||
QRegion region(viewport());
|
||||
setClipRegion(region - clip);
|
||||
text(x, y, str, fi, rtl);
|
||||
setClipping(false);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user