X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_dotsinset.C;h=8ab3afe6feec3c4f4b2d737091087297c96cef60;hb=3e93baac3cd18e27db3eb2a1fcaf90b25e0918a6;hp=6bca4d1e191299644efe29b7841382cd48a499dc;hpb=7f6bd7f12d1f084a3b7435b811ceb0020309c3cd;p=lyx.git diff --git a/src/mathed/math_dotsinset.C b/src/mathed/math_dotsinset.C index 6bca4d1e19..8ab3afe6fe 100644 --- a/src/mathed/math_dotsinset.C +++ b/src/mathed/math_dotsinset.C @@ -1,52 +1,71 @@ -#include +/** + * \file math_dotsinset.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Alejandro Aguilar Sierra + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. + */ -#ifdef __GNUG__ -#pragma implementation -#endif +#include #include "math_dotsinset.h" -#include "mathed/support.h" -#include "support/LOstream.h" +#include "math_mathmlstream.h" +#include "math_support.h" +#include "math_parser.h" -using std::ostream; +using std::string; +using std::auto_ptr; -MathDotsInset::MathDotsInset(string const & nam, int id, short st) - : MathedInset(nam, LM_OT_DOTS, st), code_(id) {} +MathDotsInset::MathDotsInset(latexkeys const * key) + : key_(key) +{} -MathedInset * MathDotsInset::Clone() + +auto_ptr MathDotsInset::clone() const { - return new MathDotsInset(name, code_, GetStyle()); -} + return auto_ptr(new MathDotsInset(*this)); +} -void -MathDotsInset::draw(Painter & pain, int x, int y) +void MathDotsInset::metrics(MetricsInfo & mi, Dimension & dim) const { - mathed_draw_deco(pain, x + 2, y - dh_, width - 2, ascent, code_); - if (code_ == LM_vdots || code_ == LM_ddots) ++x; - if (code_ != LM_vdots) --y; - mathed_draw_deco(pain, x + 2, y - dh_, width - 2, ascent, code_); + mathed_char_dim(mi.base.font, 'M', dim); + dh_ = 0; + if (key_->name == "cdots" || key_->name == "dotsb" + || key_->name == "dotsm" || key_->name == "dotsi") + dh_ = dim.asc / 2; + else if (key_->name == "dotsc") + dh_ = dim.asc / 4; + else if (key_->name == "vdots") { + dim.wid = (dim.wid / 2) + 1; + dh_ = dim.asc; + } + else if (key_->name == "ddots") + dh_ = dim.asc; + dim_ = dim; } -void -MathDotsInset::Metrics() +void MathDotsInset::draw(PainterInfo & pain, int x, int y) const { - mathed_char_height(LM_TC_VAR, size(), 'M', ascent, descent); - width = mathed_char_width(LM_TC_VAR, size(), 'M'); - switch (code_) { - case LM_ldots: dh_ = 0; break; - case LM_cdots: dh_ = ascent/2; break; - case LM_vdots: width /= 2; - case LM_ddots: dh_ = ascent; break; - } -} + mathed_draw_deco(pain, x + 2, y - dh_, dim_.width() - 2, dim_.ascent(), + key_->name); + if (key_->name == "vdots" || key_->name == "ddots") + ++x; + if (key_->name != "vdots") + --y; + mathed_draw_deco(pain, x + 2, y - dh_, dim_.width() - 2, dim_.ascent(), + key_->name); + setPosCache(pain, x, y); +} -void -MathDotsInset::Write(ostream & os, bool /* fragile */) +string MathDotsInset::name() const { - os << '\\' << name << ' '; + return key_->name; }