X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FMathSupport.cpp;h=55b0822068f1c31f725e45f3308008e76c418d8f;hb=38c2cde0d8695ac5287bae218c4a33a2acf18ef8;hp=086d219c56f95cfc2bdf1e980d47c4bd8f450daf;hpb=66aa52ff20c6e96d679d917bb3d98ff29117ad15;p=lyx.git diff --git a/src/mathed/MathSupport.cpp b/src/mathed/MathSupport.cpp index 086d219c56..55b0822068 100644 --- a/src/mathed/MathSupport.cpp +++ b/src/mathed/MathSupport.cpp @@ -82,6 +82,7 @@ namespace { /* * Internal struct of a drawing: code n x1 y1 ... xn yn, where code is: * 0 = end, 1 = line, 2 = polyline, 3 = square line, 4 = square polyline + * 5 = rounded thick line (i.e. dot for short line) */ @@ -293,9 +294,18 @@ double const hline[] = { }; +double const dot[] = { +// 1, 0.5, 0.2, 0.5, 0.2, +// 1, 0.4, 0.4, 0.6, 0.4, +// 1, 0.5, 0.5, 0.5, 0.5, + 5, 0.4, 0.4, 0.6, 0.4, + 0 +}; + + double const ddot[] = { - 1, 0.2, 0.5, 0.3, 0.5, - 1, 0.7, 0.5, 0.8, 0.5, + 5, 0.0, 0.4, 0.3, 0.4, + 5, 0.6, 0.4, 1.0, 0.4, 0 }; @@ -333,12 +343,6 @@ double const dline3[] = { }; -double const hlinesmall[] = { - 1, 0.4, 0.5, 0.6, 0.5, - 0 -}; - - double const ring[] = { 2, 5, 0.5, 0.8, 0.8, 0.5, 0.5, 0.2, 0.2, 0.5, 0.5, 0.8, @@ -457,7 +461,7 @@ named_deco_struct deco_table[] = { {"acute", slash, 0 }, {"tilde", tilde, 0 }, {"bar", hline, 0 }, - {"dot", hlinesmall, 0 }, + {"dot", dot, 0 }, {"check", angle, 1 }, {"breve", parenth, 1 }, {"vec", arrow, 3 }, @@ -495,7 +499,7 @@ public: } }; -static init_deco_table dummy; +static init_deco_table dummy_deco_table; deco_struct const * search_deco(docstring const & name) @@ -505,7 +509,7 @@ deco_struct const * search_deco(docstring const & name) } -} // namespace anon +} // namespace int mathed_font_em(FontInfo const & font) @@ -513,6 +517,12 @@ int mathed_font_em(FontInfo const & font) return theFontMetrics(font).em(); } + +int mathed_font_x_height(FontInfo const & font) +{ + return theFontMetrics(font).xHeight(); +} + /* The math units. Quoting TeX by Topic, p.205: * * Spacing around mathematical objects is measured in mu units. A mu @@ -539,7 +549,7 @@ int mathed_font_em(FontInfo const & font) int mathed_mu(FontInfo const & font, double mu) { MetricsBase mb(nullptr, font); - return Length(mu, Length::MU).inPixels(mb); + return mb.inPixels(Length(mu, Length::MU)); } int mathed_thinmuskip(FontInfo const & font) { return mathed_mu(font, 3.0); } @@ -617,7 +627,7 @@ void mathed_draw_deco(PainterInfo & pi, int x, int y, int w, int h, for (int i = 0; d[i]; ) { int code = int(d[i++]); - if (code & 1) { // code == 1 || code == 3 + if (code & 1) { // code == 1 || code == 3 || code == 5 double xx = d[i++]; double yy = d[i++]; double x2 = d[i++]; @@ -631,11 +641,21 @@ void mathed_draw_deco(PainterInfo & pi, int x, int y, int w, int h, int(x + xx + 0.5), int(y + yy + 0.5), int(x + x2 + 0.5), int(y + y2 + 0.5), pi.base.font.color()); + if (code == 5) { // thicker, but rounded + pi.pain.line( + int(x + xx + 0.5+1), int(y + yy + 0.5-1), + int(x + x2 + 0.5-1), int(y + y2 + 0.5-1), + pi.base.font.color()); + pi.pain.line( + int(x + xx + 0.5+1), int(y + yy + 0.5+1), + int(x + x2 + 0.5-1), int(y + y2 + 0.5+1), + pi.base.font.color()); + } } else { int xp[32]; int yp[32]; - int const n = int(d[i++]); - for (int j = 0; j < n; ++j) { + int const n2 = int(d[i++]); + for (int j = 0; j < n2; ++j) { double xx = d[i++]; double yy = d[i++]; // lyxerr << ' ' << xx << ' ' << yy << ' '; @@ -647,7 +667,7 @@ void mathed_draw_deco(PainterInfo & pi, int x, int y, int w, int h, yp[j] = int(y + yy + 0.5); // lyxerr << "P[" << j ' ' << xx << ' ' << yy << ' ' << x << ' ' << y << ']'; } - pi.pain.lines(xp, yp, n, pi.base.font.color()); + pi.pain.lines(xp, yp, n2, pi.base.font.color()); } } } @@ -1004,7 +1024,7 @@ void validate_math_word(LaTeXFeatures & features, docstring const & word) MathWordList const & words = mathedWordList(); MathWordList::const_iterator it = words.find(word); if (it != words.end()) { - string const req = it->second.requires; + string const req = it->second.required; if (!req.empty()) features.require(req); }