X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_macrotemplate.C;h=22186a52ee52fff2d81898f46f026ba39f9957a9;hb=46880e2b9b49632c56bab2377ce9a3c826cf8d1d;hp=10ffb95ae4a44a7a64ca1055afb3d9727243207e;hpb=c5e13278e7f3ac42d170f44ece3bf2b6f99f6b2f;p=lyx.git diff --git a/src/mathed/math_macrotemplate.C b/src/mathed/math_macrotemplate.C index 10ffb95ae4..22186a52ee 100644 --- a/src/mathed/math_macrotemplate.C +++ b/src/mathed/math_macrotemplate.C @@ -3,28 +3,28 @@ #endif #include "math_macrotemplate.h" -#include "Painter.h" +#include "math_mathmlstream.h" +#include "frontends/Painter.h" #include "debug.h" MathMacroTemplate::MathMacroTemplate() - : MathNestInset(1), numargs_(0), name_() + : MathNestInset(2), numargs_(0), name_() {} MathMacroTemplate::MathMacroTemplate(string const & nm, int numargs) - : MathNestInset(1), numargs_(numargs), name_(nm) + : MathNestInset(2), numargs_(numargs), name_(nm) { - if (numargs_ > 9) { + if (numargs_ > 9) lyxerr << "MathMacroTemplate::MathMacroTemplate: wrong # of arguments: " << numargs_ << std::endl; - } } MathInset * MathMacroTemplate::clone() const { - lyxerr << "cloning MacroTemplate!\n"; + //lyxerr << "cloning MacroTemplate!\n"; return new MathMacroTemplate(*this); } @@ -47,33 +47,44 @@ string const & MathMacroTemplate::name() const } -void MathMacroTemplate::write(std::ostream & os, bool fragile) const +void MathMacroTemplate::metrics(MathMetricsInfo & mi) const { - os << "\n\\newcommand{\\" << name_ << "}"; - - if (numargs_ > 0) - os << "[" << numargs_ << "]"; - - os << "{"; - cell(0).write(os, fragile); - os << "}\n"; + xcell(0).metrics(mi); + xcell(1).metrics(mi); + width_ = xcell(0).width() + xcell(1).width() + 10; + ascent_ = std::max(xcell(0).ascent(), xcell(1).ascent()) + 2; + descent_ = std::max(xcell(0).descent(), xcell(1).descent()) + 2; } -void MathMacroTemplate::metrics(MathStyles st) const +void MathMacroTemplate::draw(MathPainterInfo & pi, int x, int y) const { - xcell(0).metrics(st); - size_ = st; - width_ = xcell(0).width() + 4; - ascent_ = xcell(0).ascent() + 2; - descent_ = xcell(0).descent() + 2; + int const w0 = xcell(0).width(); + int const w1 = xcell(1).width(); + xcell(0).draw(pi, x + 2, y + 1); + pi.pain.rectangle(x, y - ascent() + 1, w0 + 4, height(), + LColor::blue); + xcell(1).draw(pi, x + 8 + w0, y + 1); + pi.pain.rectangle(x + w0 + 6 , y - ascent() + 1, w1 + 4, + height(), LColor::blue); } -void MathMacroTemplate::draw(Painter & pain, int x, int y) const +void MathMacroTemplate::write(WriteStream & os) const { - xo(x); - yo(y); - xcell(0).draw(pain, x + 2, y + 1); - pain.rectangle(x, y - ascent(), width(), height(), LColor::blue); + if (os.latex()) { + os << "\n\\newcommand{\\" << name_.c_str() << '}'; + if (numargs_ > 0) + os << '[' << numargs_ << ']'; + os << '{' << cell(0) << "}\n"; + } else { + // writing .lyx + os << "\n\\newcommand{\\" << name_.c_str() << '}'; + if (numargs_ > 0) + os << '[' << numargs_ << ']'; + os << '{' << cell(0) << '}'; + // write special .tex export only if necessary + if (!cell(1).empty()) + os << "\n{" << cell(1) << '}'; + } }