The branch, master, has been updated. - Log -----------------------------------------------------------------
commit c671703f05a74e5b005666c29aff2626931cb239 Author: Vincent van Ravesteijn <[email protected]> Date: Wed May 2 18:02:52 2012 +0200 Fix bug #953: Paint text decorations for spaces diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index a9f8352..c33bd79 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -360,6 +360,14 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font, } +void RowPainter::paintSeparator(double orig_x, double width, + FontInfo const & font) +{ + pi_.pain.textDecoration(font, int(orig_x), yo_, int(width)); + x_ += width; +} + + void RowPainter::paintForeignMark(double orig_x, Language const * lang, int desc) { @@ -937,9 +945,10 @@ void RowPainter::paintText() if (par_.isSeparator(pos)) { Font const orig_font = text_metrics_.displayFont(pit_, pos); double const orig_x = x_; - x_ += width_pos; + double separator_width = width_pos; if (pos >= body_pos) - x_ += row_.separator; + separator_width += row_.separator; + paintSeparator(orig_x, separator_width, orig_font.fontInfo()); paintForeignMark(orig_x, orig_font.language()); ++vpos; diff --git a/src/rowpainter.h b/src/rowpainter.h index 7a43ef7..480a2dd 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -58,6 +58,7 @@ public: void paintSelection(); private: + void paintSeparator(double orig_x, double width, FontInfo const & font); void paintForeignMark(double orig_x, Language const * lang, int desc = 0); void paintMisspelledMark(double orig_x, bool changed); void paintHebrewComposeChar(pos_type & vpos, FontInfo const & font); commit 53b75399e75f4895880861908d05eed119dca3a8 Author: Vincent van Ravesteijn <[email protected]> Date: Wed May 2 18:02:17 2012 +0200 Factor out painting of text decorations diff --git a/src/frontends/Painter.h b/src/frontends/Painter.h index 8bbda37..d219b1b 100644 --- a/src/frontends/Painter.h +++ b/src/frontends/Painter.h @@ -127,6 +127,9 @@ public: */ virtual int text(int x, int y, char_type c, FontInfo const & f) = 0; + /// draw the underbar, strikeout, uuline and uwave font attributes + virtual void textDecoration(FontInfo const & f, int x, int y, int width) = 0; + /** * Draw a string and enclose it inside a rectangle. If * back color is specified, the background is cleared with diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index 5cb43a0..db18858 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -335,14 +335,7 @@ int GuiPainter::text(int x, int y, docstring const & s, if (f.realShape() == SMALLCAPS_SHAPE) { textwidth = smallCapsText(x, y, str, f); - if (f.underbar() == FONT_ON) - underline(f, x, y, textwidth); - if (f.strikeout() == FONT_ON) - strikeoutLine(f, x, y, textwidth); - if (f.uuline() == FONT_ON) - doubleUnderline(f, x, y, textwidth); - if (f.uwave() == FONT_ON) - wavyHorizontalLine(x, y, textwidth, f.realColor().baseColor); + textDecoration(f, x, y, textwidth); return textwidth; } @@ -350,15 +343,7 @@ int GuiPainter::text(int x, int y, docstring const & s, // textwidth = fontMetrics().width(str); // because the above is awfully expensive on MacOSX textwidth = fm.width(s); - if (f.underbar() == FONT_ON) - underline(f, x, y, textwidth); - if (f.strikeout() == FONT_ON) - strikeoutLine(f, x, y, textwidth); - if (f.uuline() == FONT_ON) - doubleUnderline(f, x, y, textwidth); - if (f.uwave() == FONT_ON) - // f.color() doesn't work on some circumstances - wavyHorizontalLine(x, y, textwidth, f.realColor().baseColor); + textDecoration(f, x, y, textwidth); if (!isDrawingEnabled()) return textwidth; @@ -441,6 +426,20 @@ int GuiPainter::text(int x, int y, docstring const & s, } +void GuiPainter::textDecoration(FontInfo const & f, int x, int y, int width) +{ + if (f.underbar() == FONT_ON) + underline(f, x, y, width); + if (f.strikeout() == FONT_ON) + strikeoutLine(f, x, y, width); + if (f.uuline() == FONT_ON) + doubleUnderline(f, x, y, width); + if (f.uwave() == FONT_ON) + // f.color() doesn't work on some circumstances + wavyHorizontalLine(x, y, width, f.realColor().baseColor); +} + + static int max(int a, int b) { return a > b ? a : b; } diff --git a/src/frontends/qt4/GuiPainter.h b/src/frontends/qt4/GuiPainter.h index a3849bb..a295078 100644 --- a/src/frontends/qt4/GuiPainter.h +++ b/src/frontends/qt4/GuiPainter.h @@ -93,6 +93,9 @@ public: /// draw a char at position x, y (y is the baseline) virtual int text(int x, int y, char_type c, FontInfo const & f); + /// + virtual void textDecoration(FontInfo const & f, int x, int y, int width); + /// draw a string and enclose it inside a button frame virtual void buttonText(int x, int baseline, docstring const & s, FontInfo const & font, bool mouseHover); ----------------------------------------------------------------------- Summary of changes: src/frontends/Painter.h | 3 +++ src/frontends/qt4/GuiPainter.cpp | 33 ++++++++++++++++----------------- src/frontends/qt4/GuiPainter.h | 3 +++ src/rowpainter.cpp | 13 +++++++++++-- src/rowpainter.h | 1 + 5 files changed, 34 insertions(+), 19 deletions(-) hooks/post-receive -- The LyX Source Repository
