X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathFrac.cpp;h=e9f9f6010b030fec69250554c7b40576cb460f35;hb=67215833a174bfb1db8a259f61ed57ae67e10655;hp=4c7c462fde54e6a5daf1f8fa74cd474d137f71ae;hpb=b5af2292087646f3f7a436b75f0409f2dd9a85af;p=lyx.git diff --git a/src/mathed/InsetMathFrac.cpp b/src/mathed/InsetMathFrac.cpp index 4c7c462fde..e9f9f6010b 100644 --- a/src/mathed/InsetMathFrac.cpp +++ b/src/mathed/InsetMathFrac.cpp @@ -154,14 +154,6 @@ MathClass InsetMathFrac::mathClass() const namespace { -// align frac to minus character -int dy_for_frac(MetricsBase & mb) -{ - Changer dummy = mb.changeFontSet("mathnormal"); - return theFontMetrics(mb.font).ascent('-') - 1; -} - - // align the top of M in the cell with the top of M in the surrounding font int dy_for_nicefrac(MetricsBase & mb) { @@ -179,13 +171,13 @@ latexkeys const * slash_symbol() return in_word_set(from_ascii("slash")); } -} // anon namespace - +} // namespace void InsetMathFrac::metrics(MetricsInfo & mi, Dimension & dim) const { Dimension dim0, dim1, dim2; + Changer dummy3 = mi.base.changeEnsureMath(); switch (kind_) { case UNIT: { @@ -248,17 +240,18 @@ void InsetMathFrac::metrics(MetricsInfo & mi, Dimension & dim) const case TFRAC: case OVER: case ATOP: { - int const dy = dy_for_frac(mi.base); + int const dy = axis_height(mi.base); Changer dummy = // \tfrac is always in text size - (kind_ == TFRAC) ? mi.base.font.changeStyle(LM_ST_SCRIPT) : + (kind_ == TFRAC) ? mi.base.font.changeStyle(FONT_STYLE_SCRIPT) : // \cfrac and \dfrac are always in display size (kind_ == CFRAC || kind_ == CFRACLEFT || kind_ == CFRACRIGHT - || kind_ == DFRAC) ? mi.base.font.changeStyle(LM_ST_DISPLAY) : + || kind_ == DFRAC) ? mi.base.font.changeStyle(FONT_STYLE_DISPLAY) : // all others mi.base.changeFrac(); + Changer dummy2 = mi.base.changeEnsureMath(); cell(0).metrics(mi, dim0); cell(1).metrics(mi, dim1); dim.wid = max(dim0.wid, dim1.wid) + 2; @@ -267,13 +260,12 @@ void InsetMathFrac::metrics(MetricsInfo & mi, Dimension & dim) const dim.des = max(0, dim1.height() + dy/2 - dy + t); } } //switch (kind_) - metricsMarkers(mi, dim); } void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const { - setPosCache(pi, x, y); + Changer dummy3 = pi.base.changeEnsureMath(); Dimension const dim = dimension(*pi.base.bv); Dimension const dim0 = cell(0).dimension(*pi.base.bv); switch (kind_) { @@ -284,12 +276,12 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const // is there an extra cell holding the value being given a dimension? // (this is \unittwo) if (nargs() == 2) { - cell(0).draw(pi, x + 1, y); + cell(0).draw(pi, x, y); xx += dim0.wid + 4; unit_cell = 1; } Changer dummy = pi.base.font.changeShape(UP_SHAPE); - cell(unit_cell).draw(pi, xx + 1, y); + cell(unit_cell).draw(pi, xx, y); } break; @@ -301,24 +293,24 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const // is there an extra cell holding the value being given a dimension? // (this is \unitfracthree) if (kind_ == UNITFRAC && nargs() == 3) { - cell(2).draw(pi, x + 1, y); + cell(2).draw(pi, x, y); xx += cell(2).dimension(*pi.base.bv).wid + 4; } Changer dummy = (kind_ == UNITFRAC) ? pi.base.font.changeShape(UP_SHAPE) : Changer(); // nice fraction Changer dummy2 = pi.base.changeScript(); - cell(0).draw(pi, xx + 2, y - dy); + cell(0).draw(pi, xx + 1, y - dy); // reference LaTeX code from nicefrac.sty: // \mkern-2mu/\mkern-1mu if (latexkeys const * slash = slash_symbol()) { int mkern = mathed_mu(pi.base.font, 2.0); - mathedSymbolDraw(pi, xx + 2 + dim0.wid - mkern, y, slash); + mathedSymbolDraw(pi, xx + 1 + dim0.wid - mkern, y, slash); Dimension dimslash; mathedSymbolDim(pi.base, dimslash, slash); xx += dimslash.wid - mathed_mu(pi.base.font, 3.0); } - cell(1).draw(pi, xx + 2 + dim0.wid, y); + cell(1).draw(pi, xx + 1 + dim0.wid, y); } break; @@ -330,22 +322,22 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const case TFRAC: case OVER: case ATOP: { - int const dy = dy_for_frac(pi.base); + int const dy = axis_height(pi.base); Changer dummy = // \tfrac is always in text size - (kind_ == TFRAC) ? pi.base.font.changeStyle(LM_ST_SCRIPT) : + (kind_ == TFRAC) ? pi.base.font.changeStyle(FONT_STYLE_SCRIPT) : // \cfrac and \dfrac are always in display size (kind_ == CFRAC || kind_ == CFRACLEFT || kind_ == CFRACRIGHT - || kind_ == DFRAC) ? pi.base.font.changeStyle(LM_ST_DISPLAY) : + || kind_ == DFRAC) ? pi.base.font.changeStyle(FONT_STYLE_DISPLAY) : // all others pi.base.changeFrac(); Dimension const dim1 = cell(1).dimension(*pi.base.bv); int const m = x + dim.wid / 2; int const xx = // align left - (kind_ == CFRACLEFT) ? x + 2 : + (kind_ == CFRACLEFT) ? x + 1 : // align right (kind_ == CFRACRIGHT) ? x + dim.wid - dim0.wid - 2 : // center @@ -361,11 +353,10 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const cell(1).draw(pi, m - dim1.wid / 2, y + dim1.asc + dy/2 - dy + t); // horizontal line if (kind_ != ATOP) - pi.pain.line(x + 1, y - dy, x + dim.wid - 2, y - dy, + pi.pain.line(x, y - dy, x + dim.wid, y - dy, pi.base.font.color(), pi.pain.line_solid, t); } } //switch (kind_) - drawMarkers(pi, x, y); } @@ -544,12 +535,12 @@ void InsetMathFrac::mathmlize(MathStream & os) const // FIXME This is not right, because we still output mi, etc, // when we output the cell. So we need to prevent that somehow. if (nargs() == 2) - os << cell(0) - << MTag("mstyle mathvariant='normal'") - << cell(1) + os << cell(0) + << MTag("mstyle mathvariant='normal'") + << cell(1) << ETag("mstyle"); else - os << MTag("mstyle mathvariant='normal'") + os << MTag("mstyle mathvariant='normal'") << cell(0) << ETag("mstyle"); } @@ -594,12 +585,12 @@ void InsetMathFrac::htmlize(HtmlStream & os) const // FIXME This is not right, because we still output i, etc, // when we output the cell. So we need to prevent that somehow. if (nargs() == 2) - os << cell(0) - << MTag("span") - << cell(1) + os << cell(0) + << MTag("span") + << cell(1) << ETag("span"); else - os << MTag("span") + os << MTag("span") << cell(0) << ETag("span"); } @@ -654,27 +645,28 @@ int InsetMathBinom::dw(int height) const void InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const { + Changer dummy2 = mi.base.changeEnsureMath(); Dimension dim0, dim1; - int const dy = dy_for_frac(mi.base); + int const dy = axis_height(mi.base); Changer dummy = - (kind_ == DBINOM) ? mi.base.font.changeStyle(LM_ST_DISPLAY) : - (kind_ == TBINOM) ? mi.base.font.changeStyle(LM_ST_SCRIPT) : + (kind_ == DBINOM) ? mi.base.font.changeStyle(FONT_STYLE_DISPLAY) : + (kind_ == TBINOM) ? mi.base.font.changeStyle(FONT_STYLE_SCRIPT) : mi.base.changeFrac(); cell(0).metrics(mi, dim0); cell(1).metrics(mi, dim1); dim.asc = dim0.height() + 1 + dy/2 + dy; dim.des = max(0, dim1.height() + 1 + dy/2 - dy); dim.wid = max(dim0.wid, dim1.wid) + 2 * dw(dim.height()) + 4; - metricsMarkers2(mi, dim); } void InsetMathBinom::draw(PainterInfo & pi, int x, int y) const { + Changer dummy2 = pi.base.changeEnsureMath(); Dimension const dim = dimension(*pi.base.bv); Dimension const & dim0 = cell(0).dimension(*pi.base.bv); Dimension const & dim1 = cell(1).dimension(*pi.base.bv); - int const dy = dy_for_frac(pi.base); + int const dy = axis_height(pi.base); // define the binom brackets docstring const bra = kind_ == BRACE ? from_ascii("{") : kind_ == BRACK ? from_ascii("[") : from_ascii("("); @@ -684,8 +676,8 @@ void InsetMathBinom::draw(PainterInfo & pi, int x, int y) const int m = x + dim.width() / 2; { Changer dummy = - (kind_ == DBINOM) ? pi.base.font.changeStyle(LM_ST_DISPLAY) : - (kind_ == TBINOM) ? pi.base.font.changeStyle(LM_ST_SCRIPT) : + (kind_ == DBINOM) ? pi.base.font.changeStyle(FONT_STYLE_DISPLAY) : + (kind_ == TBINOM) ? pi.base.font.changeStyle(FONT_STYLE_SCRIPT) : pi.base.changeFrac(); // take dy both for the vertical alignment and for the spacing between // cells @@ -697,7 +689,6 @@ void InsetMathBinom::draw(PainterInfo & pi, int x, int y) const dim.height(), bra); mathed_draw_deco(pi, x + dim.width() - dw(dim.height()), y - dim.ascent(), dw(dim.height()), dim.height(), ket); - drawMarkers2(pi, x, y); }