]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetSpecialChar.cpp
Make sure we center displayed equations.
[lyx.git] / src / insets / InsetSpecialChar.cpp
index 8a52f166fc011cac31b0f2c34324c572cc23df76..8671d2b7d01ba16dcfe29002e7885b2e5b35818a 100644 (file)
@@ -47,7 +47,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) {
@@ -135,21 +135,28 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
 
 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)
+{
+       pi.pain.text(x, y, ch, pi.base.font);
+       x += theFontMetrics(pi.base.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 +164,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 +177,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 +196,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 +278,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 +551,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));