]> git.lyx.org Git - features.git/commitdiff
#7120 use separate line thickness for solid and dotted lines to mark foreign, changed...
authorStephan Witt <switt@lyx.org>
Sun, 20 Feb 2011 07:50:28 +0000 (07:50 +0000)
committerStephan Witt <switt@lyx.org>
Sun, 20 Feb 2011 07:50:28 +0000 (07:50 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37735 a592a061-630c-0410-9148-cb99ea01b6c8

src/rowpainter.cpp
src/rowpainter.h

index 47ab84d3a2b5e7130eb47cebc276b3ebc8dae163..21c1d9d3fccb6657b1d59af1c06aa36dfed64a25 100644 (file)
@@ -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();
        }
 }
index 1ea10d48496da610023e3977524179de73ce642a..6408fdc73fb33ac0b9dea21807af71f3686aa27b 100644 (file)
@@ -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