X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathSupport.cpp;h=222807bba4a40b303d92492a913af6f68932e5df;hb=02e82157ec583c3900e359de86be79fac6512387;hp=0c610b1e69412c202c66505d576d4401870452fc;hpb=be836909c52f8586646fa6360df649288b5e2875;p=lyx.git diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index 0c610b1e69..222807bba4 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -15,6 +15,7 @@ #include "InsetMathFont.h" #include "InsetMathSymbol.h" +#include "Length.h" #include "MathData.h" #include "MathParser.h" #include "MathStream.h" @@ -528,27 +529,20 @@ int mathed_font_em(FontInfo const & font) * punctuation, and is put around inner objects, except where these * are followed by a close or preceded by an open symbol, and except * if the other object is a large operator or a binary relation. + * + * See the file MathClass.cpp for a formal implementation of the rules + * above. */ -int mathed_thinmuskip(FontInfo font) -{ - font.setFamily(SYMBOL_FAMILY); - return support::iround(3.0 / 18 * theFontMetrics(font).em()); -} - - -int mathed_medmuskip(FontInfo font) +int mathed_mu(FontInfo const & font, double mu) { - font.setFamily(SYMBOL_FAMILY); - return support::iround(4.0 / 18 * theFontMetrics(font).em()); + MetricsBase mb(nullptr, font); + return Length(mu, Length::MU).inPixels(mb); } - -int mathed_thickmuskip(FontInfo font) -{ - font.setFamily(SYMBOL_FAMILY); - return support::iround(5.0 / 18 * theFontMetrics(font).em()); -} +int mathed_thinmuskip(FontInfo const & font) { return mathed_mu(font, 3.0); } +int mathed_medmuskip(FontInfo const & font) { return mathed_mu(font, 4.0); } +int mathed_thickmuskip(FontInfo const & font) { return mathed_mu(font, 5.0); } int mathed_char_width(FontInfo const & font, char_type c) @@ -657,7 +651,7 @@ void mathed_draw_deco(PainterInfo & pi, int x, int y, int w, int h, } -void mathedSymbolDim(MetricsInfo & mi, Dimension & dim, latexkeys const * sym) +void mathedSymbolDim(MetricsBase & mb, Dimension & dim, latexkeys const * sym) { LASSERT((bool)sym, return); //lyxerr << "metrics: symbol: '" << sym->name @@ -667,17 +661,10 @@ void mathedSymbolDim(MetricsInfo & mi, Dimension & dim, latexkeys const * sym) bool const italic_upcase_greek = sym->inset == "cmr" && sym->extra == "mathalpha" && - mi.base.fontname == "mathit"; + mb.fontname == "mathit"; std::string const font = italic_upcase_greek ? "cmm" : sym->inset; - Changer dummy = mi.base.changeFontSet(font); - mathed_string_dim(mi.base.font, sym->draw, dim); - // seperate things a bit - if (sym->extra == "mathbin") - dim.wid += 2 * mathed_medmuskip(mi.base.font); - else if (sym->extra == "mathrel") - dim.wid += 2 * mathed_thickmuskip(mi.base.font); - else if (sym->extra == "mathpunct") - dim.wid += mathed_thinmuskip(mi.base.font); + Changer dummy = mb.changeFontSet(font); + mathed_string_dim(mb.font, sym->draw, dim); } @@ -693,10 +680,6 @@ void mathedSymbolDraw(PainterInfo & pi, int x, int y, latexkeys const * sym) sym->extra == "mathalpha" && pi.base.fontname == "mathit"; std::string const font = italic_upcase_greek ? "cmm" : sym->inset; - if (sym->extra == "mathbin") - x += mathed_medmuskip(pi.base.font); - else if (sym->extra == "mathrel") - x += mathed_thickmuskip(pi.base.font); Changer dummy = pi.base.changeFontSet(font); pi.draw(x, y, sym->draw);