JMarc, The following fixes the clipping of characters with negative bearing, like the "f", at the end of a sentence. 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. Ok ? Vincent src/frontends/qt4/GuiPainter.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index 5730819..95ab52a 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -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); -- 2.1.2