From 9754d5e2cd296e5f416d4055b1bf1c316feb96a7 Mon Sep 17 00:00:00 2001 From: Stephan Witt Date: Sun, 20 Feb 2011 07:50:28 +0000 Subject: [PATCH] #7120 use separate line thickness for solid and dotted lines to mark foreign, changed and misspelled text parts git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37735 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/rowpainter.cpp | 33 ++++++++++++++++++++++----------- src/rowpainter.h | 6 ++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index 47ab84d3a2..21c1d9d3fc 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -63,17 +63,26 @@ RowPainter::RowPainter(PainterInfo & pi, pm_(text_metrics_.parMetrics(pit)), bidi_(bidi), change_(pi_.change_), xo_(x), yo_(y), width_(text_metrics_.width()), - line_thickness_(1.0), line_offset_(2) + solid_line_thickness_(1.0), solid_line_offset_(1), + dotted_line_thickness_(1.0), dotted_line_offset_(2) { bidi_.computeTables(par_, pi_.base.bv->buffer(), row_); + if (lyxrc.zoom >= 200) { + // 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)); + // adjust line_offset_ too + solid_line_offset_ = 1 + int(0.5 * solid_line_thickness_); + } if (lyxrc.zoom >= 100) { // derive the line thickness from zoom factor // the zoom is given in percent // (increase thickness at 150%, 250% etc.) - line_thickness_ = (float)(int((lyxrc.zoom + 50) / 100.0)); + dotted_line_thickness_ = (float)(int((lyxrc.zoom + 50) / 100.0)); // adjust line_offset_ too - line_offset_ = int(2 * line_thickness_) + 1; + dotted_line_offset_ = int(0.5 * dotted_line_thickness_) + 1; } x_ = row_.x + xo_; @@ -362,9 +371,9 @@ void RowPainter::paintForeignMark(double orig_x, Language const * lang, if (lang == pi_.base.bv->buffer().params().language) return; - int const y = yo_ + 1 + desc + int(line_thickness_/2); + int const y = yo_ + solid_line_offset_ + desc + int(solid_line_thickness_/2); pi_.pain.line(int(orig_x), y, int(x_), y, Color_language, - Painter::line_solid, line_thickness_); + Painter::line_solid, solid_line_thickness_); } @@ -372,9 +381,11 @@ void RowPainter::paintMisspelledMark(double orig_x, bool changed) { // if changed the misspelled marker gets placed slightly lower than normal // to avoid drawing at the same vertical offset - int const y = yo_ + (changed ? int(line_thickness_ + 1.0) : 0) + line_offset_; + int const y = yo_ + solid_line_offset_ + solid_line_thickness_ + + (changed ? solid_line_thickness_ + 1 : 0) + + dotted_line_offset_; pi_.pain.line(int(orig_x), y, int(x_), y, Color_error, - Painter::line_onoffdash, line_thickness_); + Painter::line_onoffdash, dotted_line_thickness_); } @@ -886,9 +897,9 @@ void RowPainter::paintText() FontMetrics const & fm = theFontMetrics(pi_.base.bv->buffer().params().getFont()); int const y_bar = change_running.deleted() ? - yo_ - fm.maxAscent() / 3 : yo_ + line_offset_; + yo_ - fm.maxAscent() / 3 : yo_ + 2 * solid_line_offset_ + solid_line_thickness_; pi_.pain.line(change_last_x, y_bar, int(x_), y_bar, - change_running.color(), Painter::line_solid, line_thickness_); + change_running.color(), Painter::line_solid, solid_line_thickness_); // Change might continue with a different author or type if (change.changed() && !highly_editable_inset) { @@ -946,9 +957,9 @@ void RowPainter::paintText() FontMetrics const & fm = theFontMetrics(pi_.base.bv->buffer().params().getFont()); int const y_bar = change_running.deleted() ? - yo_ - fm.maxAscent() / 3 : yo_ + line_offset_; + yo_ - fm.maxAscent() / 3 : yo_ + 2 * solid_line_offset_ + solid_line_thickness_; pi_.pain.line(change_last_x, y_bar, int(x_), y_bar, - change_running.color(), Painter::line_solid, line_thickness_); + change_running.color(), Painter::line_solid, solid_line_thickness_); change_running.setUnchanged(); } } diff --git a/src/rowpainter.h b/src/rowpainter.h index 1ea10d4849..6408fdc73f 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -104,8 +104,10 @@ private: int const yo_; // current baseline double x_; int width_; - float line_thickness_; - int line_offset_; + float solid_line_thickness_; + int solid_line_offset_; + float dotted_line_thickness_; + int dotted_line_offset_; }; } // namespace lyx