X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathSqrt.cpp;h=1f58dce4dbf979f595412bcc9a080f81a3a74260;hb=02e82157ec583c3900e359de86be79fac6512387;hp=55d773c946df7648f34703ff8615e240e4b8f2c7;hpb=31059d1741933d95403e7f07ed033cae482f778b;p=lyx.git diff --git a/src/mathed/InsetMathSqrt.cpp b/src/mathed/InsetMathSqrt.cpp index 55d773c946..1f58dce4db 100644 --- a/src/mathed/InsetMathSqrt.cpp +++ b/src/mathed/InsetMathSqrt.cpp @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -11,55 +11,56 @@ #include #include "InsetMathSqrt.h" + #include "MathData.h" #include "MathStream.h" + +#include "LaTeXFeatures.h" +#include "MetricsInfo.h" #include "TextPainter.h" -#include "LColor.h" + #include "frontends/Painter.h" namespace lyx { -using std::auto_ptr; - - -InsetMathSqrt::InsetMathSqrt() - : InsetMathNest(1) +InsetMathSqrt::InsetMathSqrt(Buffer * buf) + : InsetMathNest(buf, 1) {} -auto_ptr InsetMathSqrt::doClone() const +Inset * InsetMathSqrt::clone() const { - return auto_ptr(new InsetMathSqrt(*this)); + return new InsetMathSqrt(*this); } -bool InsetMathSqrt::metrics(MetricsInfo & mi, Dimension & dim) const +void InsetMathSqrt::metrics(MetricsInfo & mi, Dimension & dim) const { + Changer dummy = mi.base.changeEnsureMath(); cell(0).metrics(mi, dim); dim.asc += 4; dim.des += 2; dim.wid += 12; - metricsMarkers(dim); - if (dim_ == dim) - return false; - dim_ = dim; - return true; + metricsMarkers(mi, dim); } void InsetMathSqrt::draw(PainterInfo & pi, int x, int y) const { + Changer dummy = pi.base.changeEnsureMath(); cell(0).draw(pi, x + 10, y); - int const a = dim_.ascent(); - int const d = dim_.descent(); - int xp[4]; - int yp[4]; - xp[0] = x + dim_.width(); yp[0] = y - a + 1; - xp[1] = x + 8; yp[1] = y - a + 1; - xp[2] = x + 5; yp[2] = y + d - 1; - xp[3] = x; yp[3] = y + (d - a)/2; - pi.pain.lines(xp, yp, 4, LColor::math); + Dimension const dim = dimension(*pi.base.bv); + int const a = dim.ascent(); + int const d = dim.descent(); + int xp[3]; + int yp[3]; + pi.pain.line(x + dim.width(), y - a + 1, + x + 8, y - a + 1, pi.base.font.color()); + xp[0] = x + 8; yp[0] = y - a + 1; + xp[1] = x + 5; yp[1] = y + d - 1; + xp[2] = x; yp[2] = y + (d - a)/2; + pi.pain.lines(xp, yp, 3, pi.base.font.color()); drawMarkers(pi, x, y); } @@ -72,17 +73,21 @@ void InsetMathSqrt::metricsT(TextMetricsInfo const & mi, Dimension & dim) const } -void InsetMathSqrt::drawT(TextPainter & pain, int x, int y) const +void InsetMathSqrt::drawT(TextPainter & /*pain*/, int /*x*/, int /*y*/) const { + /* cell(0).drawT(pain, x + 2, y); - pain.horizontalLine(x + 2, y - cell(0).ascent(), cell(0).width(), '_'); - pain.verticalLine (x + 1, y - cell(0).ascent() + 1, cell(0).height()); - pain.draw(x, y + cell(0).descent(), '\\'); + Dimension const & dim0 = cell(0).dimension(*pi.base.bv); + pain.horizontalLine(x + 2, y - dim0.ascent(), dim0.width(), '_'); + pain.verticalLine (x + 1, y - dim0.ascent() + 1, dim0.height()); + pain.draw(x, y + dim0.descent(), '\\'); + */ } void InsetMathSqrt::write(WriteStream & os) const { + MathEnsurer ensurer(os); os << "\\sqrt{" << cell(0) << '}'; } @@ -115,4 +120,20 @@ void InsetMathSqrt::mathmlize(MathStream & os) const } +void InsetMathSqrt::htmlize(HtmlStream & os) const +{ + os << MTag("span", "class='sqrt'") + << from_ascii("√") + << MTag("span", "class='sqrtof'") << cell(0) << ETag("span") + << ETag("span"); +} + + +void InsetMathSqrt::validate(LaTeXFeatures & features) const +{ + if (features.runparams().math_flavor == OutputParams::MathAsHTML) + features.addCSSSnippet("span.sqrtof{border-top: thin solid black;}"); + InsetMathNest::validate(features); +} + } // namespace lyx