commit 463bd17d755820966e97f474f617cf585079968e
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Tue Jul 14 17:42:45 2015 +0200

    Use integer line thickness in painter
    
    There is no need for real-valued line width in painters. Actually, this 
even leads to uneven dashes for continuous spell checker.
    
    The new code is supposed to be equivalent to the old one, just more 
readable. From this, we can try to see whether some lines need to be made 
thicker on HiDPI screens.

diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index 641eae2..8d574ad 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -61,8 +61,8 @@ RowPainter::RowPainter(PainterInfo & pi,
          row_(row), pit_(pit), par_(text.paragraphs()[pit]),
          pm_(text_metrics_.parMetrics(pit)), change_(pi_.change_),
          xo_(x), yo_(y), width_(text_metrics_.width()),
-         solid_line_thickness_(1.0), solid_line_offset_(1),
-         dotted_line_thickness_(1.0), dotted_line_offset_(2)
+         solid_line_thickness_(1), solid_line_offset_(1),
+         dotted_line_thickness_(1), dotted_line_offset_(2)
 {
        bidi_.computeTables(par_, pi_.base.bv->buffer(), row_);
 
@@ -70,17 +70,17 @@ RowPainter::RowPainter(PainterInfo & pi,
                // derive the line thickness from zoom factor
                // the zoom is given in percent
                // (increase thickness at 250%, 450% etc.)
-               solid_line_thickness_ = (float)(int((lyxrc.zoom + 50) / 200.0));
+               solid_line_thickness_ = (lyxrc.zoom + 50) / 200;
                // adjust line_offset_ too
-               solid_line_offset_ = 1 + int(0.5 * solid_line_thickness_);
+               solid_line_offset_ = 1 + solid_line_thickness_ / 2;
        }
        if (lyxrc.zoom >= 100) {
                // derive the line thickness from zoom factor
                // the zoom is given in percent
                // (increase thickness at 150%, 250% etc.)
-               dotted_line_thickness_ = (float)(int((lyxrc.zoom + 50) / 
100.0));
+               dotted_line_thickness_ = (lyxrc.zoom + 50) / 100;
                // adjust line_offset_ too
-               dotted_line_offset_ = int(0.5 * dotted_line_thickness_) + 1;
+               dotted_line_offset_ = 1 + dotted_line_thickness_ / 2;
        }
 
        x_ = row_.left_margin + xo_;
@@ -286,7 +286,7 @@ void RowPainter::paintForeignMark(double orig_x, Language 
const * lang, int desc
        if (lang == pi_.base.bv->buffer().params().language)
                return;
 
-       int const y = yo_ + solid_line_offset_ + desc + 
int(solid_line_thickness_/2);
+       int const y = yo_ + solid_line_offset_ + desc + solid_line_thickness_ / 
2;
        pi_.pain.line(int(orig_x), y, int(x_), y, Color_language,
                Painter::line_solid, solid_line_thickness_);
 }
@@ -444,12 +444,12 @@ int RowPainter::paintAppendixStart(int y) const
 void RowPainter::paintTooLargeMarks(bool const left, bool const right) const
 {
        if (left)
-               pi_.pain.line(int(dotted_line_thickness_), yo_ - row_.ascent(),
-                                         int(dotted_line_thickness_), yo_ + 
row_.descent(),
+               pi_.pain.line(dotted_line_thickness_, yo_ - row_.ascent(),
+                                         dotted_line_thickness_, yo_ + 
row_.descent(),
                                          Color_scroll,
                                          Painter::line_onoffdash, 
dotted_line_thickness_);
        if (right) {
-               int const wwidth = pi_.base.bv->workWidth() - 
int(dotted_line_thickness_);
+               int const wwidth = pi_.base.bv->workWidth() - 
dotted_line_thickness_;
                pi_.pain.line(wwidth, yo_ - row_.ascent(),
                                          wwidth, yo_ + row_.descent(),
                                          Color_scroll,
diff --git a/src/RowPainter.h b/src/RowPainter.h
index 9a615f9..5e714ce 100644
--- a/src/RowPainter.h
+++ b/src/RowPainter.h
@@ -122,9 +122,9 @@ private:
        int const yo_;    // current baseline
        double x_;
        int width_;
-       float solid_line_thickness_;
+       int solid_line_thickness_;
        int solid_line_offset_;
-       float dotted_line_thickness_;
+       int dotted_line_thickness_;
        int dotted_line_offset_;
 };
 
diff --git a/src/frontends/Painter.h b/src/frontends/Painter.h
index 7906aa9..0a499f5 100644
--- a/src/frontends/Painter.h
+++ b/src/frontends/Painter.h
@@ -56,7 +56,7 @@ class Painter {
 public:
        Painter(double pixel_ratio) : drawing_enabled_(true), 
pixel_ratio_(pixel_ratio) {}
 
-       static const float thin_line;
+       static const int thin_line;
 
        /// possible line styles
        enum line_style {
@@ -83,7 +83,7 @@ public:
 
        /// draw a line from point to point
        virtual void line(int x1, int y1, int x2, int y2, Color,
-               line_style = line_solid, float line_width = thin_line) = 0;
+               line_style = line_solid, int line_width = thin_line) = 0;
 
        /**
         * lines -  draw a set of lines
@@ -93,11 +93,11 @@ public:
         */
        virtual void lines(int const * xp, int const * yp, int np, Color,
                fill_style = fill_none, line_style = line_solid,
-               float line_width = thin_line) = 0;
+               int line_width = thin_line) = 0;
 
        /// draw a rectangle
        virtual void rectangle(int x, int y, int w, int h, Color,
-               line_style = line_solid, float line_width = thin_line) = 0;
+               line_style = line_solid, int line_width = thin_line) = 0;
 
        /// draw a filled rectangle
        virtual void fillRectangle(int x, int y, int w, int h, Color) = 0;
diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp
index ce0290c..8898daf 100644
--- a/src/frontends/qt4/GuiPainter.cpp
+++ b/src/frontends/qt4/GuiPainter.cpp
@@ -49,8 +49,8 @@ using namespace lyx::support;
 
 namespace lyx {
 namespace frontend {
-  
-const float Painter::thin_line = 0.0;
+
+const int Painter::thin_line = 0;
 
 GuiPainter::GuiPainter(QPaintDevice * device, double pixel_ratio)
        : QPainter(device), Painter(pixel_ratio),
@@ -71,7 +71,7 @@ GuiPainter::~GuiPainter()
 
 
 void GuiPainter::setQPainterPen(QColor const & col,
-       Painter::line_style ls, float lw)
+       Painter::line_style ls, int lw)
 {
        if (col == current_color_ && ls == current_ls_ && lw == current_lw_)
                return;
@@ -88,7 +88,7 @@ void GuiPainter::setQPainterPen(QColor const & col,
                case line_onoffdash: pen.setStyle(Qt::DotLine); break;
        }
 
-       pen.setWidthF(lw);
+       pen.setWidth(lw);
 
        setPen(pen);
 }
@@ -180,7 +180,7 @@ void GuiPainter::point(int x, int y, Color col)
 void GuiPainter::line(int x1, int y1, int x2, int y2,
        Color col,
        line_style ls,
-       float lw)
+       int lw)
 {
        if (!isDrawingEnabled())
                return;
@@ -198,7 +198,7 @@ void GuiPainter::lines(int const * xp, int const * yp, int 
np,
        Color col,
        fill_style fs,
        line_style ls,
-       float lw)
+       int lw)
 {
        if (!isDrawingEnabled())
                return;
@@ -236,7 +236,7 @@ void GuiPainter::lines(int const * xp, int const * yp, int 
np,
 void GuiPainter::rectangle(int x, int y, int w, int h,
        Color col,
        line_style ls,
-       float lw)
+       int lw)
 {
        if (!isDrawingEnabled())
                return;
diff --git a/src/frontends/qt4/GuiPainter.h b/src/frontends/qt4/GuiPainter.h
index 9cbb29a..5afe5a5 100644
--- a/src/frontends/qt4/GuiPainter.h
+++ b/src/frontends/qt4/GuiPainter.h
@@ -42,7 +42,7 @@ public:
                int x2, int y2,
                Color,
                line_style ls = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
 
        /**
         * lines -  draw a set of lines
@@ -57,7 +57,7 @@ public:
                Color,
                fill_style fs = fill_none,
                line_style ls = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
 
        /// draw a rectangle
        virtual void rectangle(
@@ -65,7 +65,7 @@ public:
                int w, int h,
                Color,
                line_style = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
 
        /// draw a filled rectangle
        virtual void fillRectangle(
@@ -163,11 +163,11 @@ private:
 
        /// set pen parameters
        void setQPainterPen(QColor const & col,
-               line_style ls = line_solid, float lw = thin_line);
+               line_style ls = line_solid, int lw = thin_line);
 
        QColor current_color_;
        Painter::line_style current_ls_;
-       float current_lw_;
+       int current_lw_;
        ///
        bool const use_pixmap_cache_;
        ///
diff --git a/src/insets/InsetLine.cpp b/src/insets/InsetLine.cpp
index 8b80f0d..95cd089 100644
--- a/src/insets/InsetLine.cpp
+++ b/src/insets/InsetLine.cpp
@@ -159,7 +159,7 @@ void InsetLine::draw(PainterInfo & pi, int x, int y) const
                     y - offset_ - height_/2,
                     x + dim.wid - height_/2 - 2,
                     y - offset_ - height_/2,
-                    Line_color, Painter::line_solid, float(height_));
+                    Line_color, Painter::line_solid, height_);
 }
 
 

Reply via email to