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_); }