commit eb92f74d1f7ae63112b9439058d746f7ff93e8f4
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Tue Mar 24 12:01:43 2020 +0100

    Avoid bleeding of inset background outside of inset
    
    As a consequence of fix e64ea357 to ticket #10797, we draw a bit too
    much of the inset background outside of the inset (visible for insets
    with colored background). #10797 is a ticket that triggers when the
    cursor has a width larger than 1.
    
    This patch limits the problems in two respects
    
    * nothing is done on the left, since the cursor width only expands on
      the right.
    
    * on the right, the extra width is limited to cursor width.
    
    Fixes bug #11786.
---
 src/TextMetrics.cpp |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 796e1bd..c92af02 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -1927,15 +1927,15 @@ void TextMetrics::drawParagraph(PainterInfo & pi, 
pit_type const pit, int const
                        LYXERR(Debug::PAINTING, "Clear rect@("
                               << max(row_x, 0) << ", " << y - row.ascent() << 
")="
                               << width() << " x " << row.height());
-                       // FIXME: this is a hack. We know that at least this
-                       // amount of pixels can be cleared on right and left.
-                       // Doing so gets rid of caret ghosts when the cursor is 
at
-                       // the begining/end of row. However, it will not work if
-                       // the caret has a ridiculous width like 6. (see ticket
-                       // #10797)
-                       pi.pain.fillRectangle(max(row_x, 0) - 
Inset::textOffset(pi.base.bv),
-                                             y - row.ascent(),
-                                             width() + 2 * 
Inset::textOffset(pi.base.bv),
+                       // FIXME: this is a hack. We clear an amount equal to
+                       // cursor width. This will not work if the caret has a
+                       // ridiculous width like 6. (see ticket #10797)
+                       // This is the same formula as in GuiWorkArea.
+                       int const caret_width = lyxrc.cursor_width
+                               ? lyxrc.cursor_width
+                               : 1 + int((lyxrc.currentZoom + 50) / 200.0);
+                       pi.pain.fillRectangle(max(row_x, 0), y - row.ascent(),
+                                             width() + caret_width,
                                              row.height(), 
pi.background_color);
                }
 
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to