#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
This commit is contained in:
Stephan Witt 2011-02-20 07:50:28 +00:00
parent 1b929a0c45
commit 9754d5e2cd
2 changed files with 26 additions and 13 deletions

View File

@ -63,17 +63,26 @@ RowPainter::RowPainter(PainterInfo & pi,
pm_(text_metrics_.parMetrics(pit)), pm_(text_metrics_.parMetrics(pit)),
bidi_(bidi), change_(pi_.change_), bidi_(bidi), change_(pi_.change_),
xo_(x), yo_(y), width_(text_metrics_.width()), 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_); 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) { if (lyxrc.zoom >= 100) {
// derive the line thickness from zoom factor // derive the line thickness from zoom factor
// the zoom is given in percent // the zoom is given in percent
// (increase thickness at 150%, 250% etc.) // (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 // 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_; 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) if (lang == pi_.base.bv->buffer().params().language)
return; 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, 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 // if changed the misspelled marker gets placed slightly lower than normal
// to avoid drawing at the same vertical offset // 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, 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 FontMetrics const & fm
= theFontMetrics(pi_.base.bv->buffer().params().getFont()); = theFontMetrics(pi_.base.bv->buffer().params().getFont());
int const y_bar = change_running.deleted() ? 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, 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 // Change might continue with a different author or type
if (change.changed() && !highly_editable_inset) { if (change.changed() && !highly_editable_inset) {
@ -946,9 +957,9 @@ void RowPainter::paintText()
FontMetrics const & fm FontMetrics const & fm
= theFontMetrics(pi_.base.bv->buffer().params().getFont()); = theFontMetrics(pi_.base.bv->buffer().params().getFont());
int const y_bar = change_running.deleted() ? 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, 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(); change_running.setUnchanged();
} }
} }

View File

@ -104,8 +104,10 @@ private:
int const yo_; // current baseline int const yo_; // current baseline
double x_; double x_;
int width_; int width_;
float line_thickness_; float solid_line_thickness_;
int line_offset_; int solid_line_offset_;
float dotted_line_thickness_;
int dotted_line_offset_;
}; };
} // namespace lyx } // namespace lyx