Le 23/07/2018 à 17:19, Jean-Marc Lasgouttes a écrit :
commit ad954a32a525828bd03bf2c8241252e60394cbc3
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Jul 23 17:07:48 2018 +0200

     Aesthetics: off-by-one in line drawing
It is a general problem when doing graphics to know where a line
     begins and where it ends pixel-wise. At the instigation of Scott, and
     with the use of the kmag magnifier, this commit corrects 3 areas:
* foreign marks were larger than the row element they were supposed to
       mark. This could lead to moving lines, depending on paint ordering.
* visible spaces were drawn outside of their box (select a single
       space to see this).
* the `L' blinking caret would leave a cursor dropping because the
       horizontal part was too wide.

Scott, would you say it is worth backporting?

JMarc

---
  src/RowPainter.cpp                |    2 +-
  src/frontends/qt4/GuiWorkArea.cpp |    4 ++--
  src/insets/InsetSpace.cpp         |   12 ++++++------
  3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index 16b144e..efc4021 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -159,7 +159,7 @@ void RowPainter::paintForeignMark(Row::Element const & e) 
const
        int const desc = e.inset ? e.dim.descent() : 0;
        int const y = yo_ + min(3 * pi_.base.solidLineOffset() / 2 + desc,
                                row_.descent() - 1);
-       pi_.pain.line(int(x_), y, int(x_ + e.full_width()), y, Color_language,
+       pi_.pain.line(int(x_), y, int(x_ + e.full_width() - 1), y, 
Color_language,
                      Painter::line_solid, pi_.base.solidLineThickness());
  }
diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp
index e6d993c..45c4469 100644
--- a/src/frontends/qt4/GuiWorkArea.cpp
+++ b/src/frontends/qt4/GuiWorkArea.cpp
@@ -150,9 +150,9 @@ public:
                painter.setPen(color_);
                if (l_shape_) {
                        if (rtl_)
-                               painter.drawLine(x_, bot, x_ - l, bot);
+                               painter.drawLine(x_, bot, x_ - l + 1, bot);
                        else
-                               painter.drawLine(x_, bot, x_ + caret_width_ + 
r, bot);
+                               painter.drawLine(x_, bot, x_ + caret_width_ + r 
- 1, bot);
                }
// draw completion triangle
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index fd8c261..ddb85b7 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -355,18 +355,18 @@ void InsetSpace::draw(PainterInfo & pi, int x, int y) 
const
        int const h = theFontMetrics(pi.base.font).xHeight();
        int xp[4], yp[4];
- xp[0] = x;
+       xp[0] = x + 1;
        yp[0] = y - max(h / 4, 1);
        if (params_.kind == InsetSpaceParams::NORMAL ||
            params_.kind == InsetSpaceParams::PROTECTED ||
            params_.kind == InsetSpaceParams::VISIBLE) {
-               xp[1] = x;     yp[1] = y;
-               xp[2] = x + w; yp[2] = y;
+               xp[1] = x + 1;     yp[1] = y;
+               xp[2] = x + w - 2; yp[2] = y;
        } else {
-               xp[1] = x;     yp[1] = y + max(h / 4, 1);
-               xp[2] = x + w; yp[2] = y + max(h / 4, 1);
+               xp[1] = x + 1;     yp[1] = y + max(h / 4, 1);
+               xp[2] = x + w - 2; yp[2] = y + max(h / 4, 1);
        }
-       xp[3] = x + w;
+       xp[3] = x + w - 2;
        yp[3] = y - max(h / 4, 1);
Color col = Color_special;


Reply via email to