X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetSpecialChar.cpp;h=462620532b463b800befefa39e466719f07c5466;hb=d4550b7a4d64e9ff772cf3a7635cb4ca532fb340;hp=8a52f166fc011cac31b0f2c34324c572cc23df76;hpb=49ac79100bc36bcd8e54c0224596ae36af9c3c77;p=lyx.git diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp index 8a52f166fc..462620532b 100644 --- a/src/insets/InsetSpecialChar.cpp +++ b/src/insets/InsetSpecialChar.cpp @@ -20,6 +20,7 @@ #include "Lexer.h" #include "MetricsInfo.h" #include "output_xhtml.h" +#include "texstream.h" #include "frontends/FontMetrics.h" #include "frontends/Painter.h" @@ -47,7 +48,7 @@ namespace { int logoWidth(FontInfo const & font, InsetSpecialChar::Kind kind) { frontend::FontMetrics const & fm = theFontMetrics(font); - int const em = fm.width('M'); + int const em = fm.em(); int width = 0; // See drawlogo() below to understand what this does. switch (kind) { @@ -128,28 +129,35 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const } if (dim.wid == 0) dim.wid = fm.width(s); - - setDimCache(mi, dim); } namespace { -void drawLogo(PainterInfo & pi, InsetSpecialChar::Kind kind, int & x, int & y) { +// helper function: draw text and update x. +void drawChar(PainterInfo & pi, int & x, int const y, char_type ch) +{ + FontInfo font = pi.base.font; + font.setPaintColor(pi.textColor(font.realColor())); + pi.pain.text(x, y, ch, font); + x += theFontMetrics(font).width(ch); +} + + +void drawLogo(PainterInfo & pi, int & x, int const y, InsetSpecialChar::Kind kind) +{ FontInfo const & font = pi.base.font; - // FIXME: this definition of em is bogus, but there is a need - // for a big refactoring of the code around this issue anyway. - int const em = theFontMetrics(font).width('M'); + int const em = theFontMetrics(font).em(); switch (kind) { case InsetSpecialChar::PHRASE_LYX: /** Reference macro: * \providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\\@}; */ - x += pi.pain.text(x, y, from_ascii("L"), font); + drawChar(pi, x, y, 'L'); x -= em / 6; - x += pi.pain.text(x, y + em / 4, from_ascii("Y"), font); + drawChar(pi, x, y + em / 4, 'Y'); x -= em / 8; - x += pi.pain.text(x, y, from_ascii("X"), font); + drawChar(pi, x, y, 'X'); break; case InsetSpecialChar::PHRASE_TEX: { @@ -157,11 +165,11 @@ void drawLogo(PainterInfo & pi, InsetSpecialChar::Kind kind, int & x, int & y) { * \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} */ int const ex = theFontMetrics(font).ascent('x'); - x += pi.pain.text(x, y, from_ascii("T"), font); + drawChar(pi, x, y, 'T'); x -= em / 6; - x += pi.pain.text(x, y + ex / 2, from_ascii("E"), font); + drawChar(pi, x, y + ex / 2, 'E'); x -= em / 8; - x += pi.pain.text(x, y, from_ascii("X"), font); + drawChar(pi, x, y, 'X'); break; } case InsetSpecialChar::PHRASE_LATEX2E: @@ -170,10 +178,10 @@ void drawLogo(PainterInfo & pi, InsetSpecialChar::Kind kind, int & x, int & y) { * \if b\expandafter\@car\f@series\@nil\boldmath\fi * \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}} */ - drawLogo(pi, InsetSpecialChar::PHRASE_LATEX, x, y); + drawLogo(pi, x, y, InsetSpecialChar::PHRASE_LATEX); x += 3 * em / 20; - x += pi.pain.text(x, y, from_ascii("2"), font); - x += pi.pain.text(x, y + em / 4, char_type(0x03b5), font); + drawChar(pi, x, y, '2'); + drawChar(pi, x, y + em / 4, char_type(0x03b5)); break; case InsetSpecialChar::PHRASE_LATEX: { @@ -189,13 +197,13 @@ void drawLogo(PainterInfo & pi, InsetSpecialChar::Kind kind, int & x, int & y) { * \kern-.15em% * \TeX} */ - x += pi.pain.text(x, y, from_ascii("L"), font); + drawChar(pi, x, y, 'L'); x -= 9 * em / 25; - FontInfo smaller = font; - smaller.decSize().decSize(); - x += pi.pain.text(x, y - em / 5, from_ascii("A"), smaller); + PainterInfo pi2 = pi; + pi2.base.font.decSize().decSize(); + drawChar(pi2, x, y - em / 5, 'A'); x -= 3 * em / 20; - drawLogo(pi, InsetSpecialChar::PHRASE_TEX, x, y); + drawLogo(pi, x, y, InsetSpecialChar::PHRASE_TEX); break; } default: @@ -271,7 +279,7 @@ void InsetSpecialChar::draw(PainterInfo & pi, int x, int y) const case PHRASE_TEX: case PHRASE_LATEX2E: case PHRASE_LATEX: - drawLogo(pi, kind_, x, y); + drawLogo(pi, x, y, kind_); break; } } @@ -544,7 +552,8 @@ void InsetSpecialChar::toString(odocstream & os) const } -void InsetSpecialChar::forOutliner(docstring & os, size_t) const +void InsetSpecialChar::forOutliner(docstring & os, size_t const, + bool const) const { odocstringstream ods; plaintext(ods, OutputParams(0));