From 498ab8ff238626498e5eb3f9aed1cd1188e727d0 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Sat, 25 Oct 2014 23:38:52 +0200 Subject: [PATCH] Tweak the shape of the parbreak separator. The shape of the parbreak separator is slightly changed in order to better distinguish it from the forced newline. This allows using the same color of the plain version without risk of confusion. --- src/frontends/Painter.h | 10 +++++++++- src/frontends/qt4/GuiPainter.cpp | 14 ++++++++++++-- src/frontends/qt4/GuiPainter.h | 1 + src/insets/InsetSeparator.cpp | 24 ++++++++---------------- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/frontends/Painter.h b/src/frontends/Painter.h index 221da4ada7..7906aa986b 100644 --- a/src/frontends/Painter.h +++ b/src/frontends/Painter.h @@ -64,6 +64,13 @@ public: line_onoffdash //< dashes with spaces }; + /// possible fill styles + enum fill_style { + fill_none, + fill_oddeven, + fill_winding + }; + /// possible character styles of preedit string. /// This is used for CJK input method support. enum preedit_style { @@ -85,7 +92,8 @@ public: * @param np size of the points array */ virtual void lines(int const * xp, int const * yp, int np, Color, - line_style = line_solid, float line_width = thin_line) = 0; + fill_style = fill_none, line_style = line_solid, + float line_width = thin_line) = 0; /// draw a rectangle virtual void rectangle(int x, int y, int w, int h, Color, diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index 0071581a63..5730819a02 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -196,6 +196,7 @@ void GuiPainter::line(int x1, int y1, int x2, int y2, void GuiPainter::lines(int const * xp, int const * yp, int np, Color col, + fill_style fs, line_style ls, float lw) { @@ -215,10 +216,19 @@ void GuiPainter::lines(int const * xp, int const * yp, int np, if (i != 0) antialias |= xp[i-1] != xp[i] && yp[i-1] != yp[i]; } - setQPainterPen(computeColor(col), ls, lw); + QColor const color = computeColor(col); + setQPainterPen(color, ls, lw); bool const text_is_antialiased = renderHints() & TextAntialiasing; setRenderHint(Antialiasing, antialias && text_is_antialiased); - drawPolyline(points.data(), np); + if (fs == fill_none) { + drawPolyline(points.data(), np); + } else { + QBrush const oldbrush = brush(); + setBrush(QBrush(color)); + drawPolygon(points.data(), np, fs == fill_oddeven ? + Qt::OddEvenFill : Qt::WindingFill); + setBrush(oldbrush); + } setRenderHint(Antialiasing, false); } diff --git a/src/frontends/qt4/GuiPainter.h b/src/frontends/qt4/GuiPainter.h index e9c6fdf8b9..9cbb29abf9 100644 --- a/src/frontends/qt4/GuiPainter.h +++ b/src/frontends/qt4/GuiPainter.h @@ -55,6 +55,7 @@ public: int const * yp, int np, Color, + fill_style fs = fill_none, line_style ls = line_solid, float lw = thin_line); diff --git a/src/insets/InsetSeparator.cpp b/src/insets/InsetSeparator.cpp index 05aa45663b..1ec73c26eb 100644 --- a/src/insets/InsetSeparator.cpp +++ b/src/insets/InsetSeparator.cpp @@ -30,6 +30,7 @@ #include "support/docstring.h" using namespace std; +using namespace lyx::frontend; namespace lyx { @@ -126,15 +127,6 @@ bool InsetSeparator::getStatus(Cursor & cur, FuncRequest const & cmd, ColorCode InsetSeparator::ColorName() const { - switch (params_.kind) { - case InsetSeparatorParams::PLAIN: - return Color_latex; - break; - case InsetSeparatorParams::PARBREAK: - return Color_pagebreak; - break; - } - // not really useful, but to avoids gcc complaints return Color_latex; } @@ -212,9 +204,9 @@ void InsetSeparator::draw(PainterInfo & pi, int x, int y) const pi.pain.lines(xp, yp, 2, ColorName()); } else { - yp[0] = int(y - 0.875 * asc * 0.75); - yp[1] = int(y - 0.500 * asc * 0.75); - yp[2] = int(y - 0.125 * asc * 0.75); + yp[0] = int(y - 0.875 * asc * 0.5); + yp[1] = int(y - 0.500 * asc * 0.5); + yp[2] = int(y - 0.125 * asc * 0.5); if (pi.ltr_pos) { xp[0] = int(x + wid * 0.375); @@ -226,11 +218,11 @@ void InsetSeparator::draw(PainterInfo & pi, int x, int y) const xp[2] = int(x + wid * 0.625); } - pi.pain.lines(xp, yp, 3, ColorName()); + pi.pain.lines(xp, yp, 3, ColorName(), Painter::fill_oddeven); - yp[0] = int(y - 0.500 * asc * 0.75); - yp[1] = int(y - 0.500 * asc * 0.75); - yp[2] = int(y - asc * 0.75); + yp[0] = int(y - 0.500 * asc * 0.5); + yp[1] = int(y - 0.500 * asc * 0.5); + yp[2] = int(y - asc * 0.5); if (pi.ltr_pos) { xp[0] = int(x); -- 2.39.5