-#include <config.h>
-
#ifdef __GNUG__
#pragma implementation
#endif
#include "math_sqrtinset.h"
-#include "math_iter.h"
#include "LColor.h"
#include "Painter.h"
-#include "support.h"
#include "support/LOstream.h"
-using std::ostream;
-
-MathSqrtInset::MathSqrtInset(short st)
- : MathParInset(st, "sqrt", LM_OT_SQRT) {}
+MathSqrtInset::MathSqrtInset()
+ : MathNestInset(1)
+{}
-MathedInset * MathSqrtInset::Clone()
+MathInset * MathSqrtInset::clone() const
{
return new MathSqrtInset(*this);
}
-void MathSqrtInset::draw(Painter & pain, int x, int y)
+void MathSqrtInset::metrics(MathMetricsInfo const & st) const
+{
+ xcell(0).metrics(st);
+ size_ = st;
+ ascent_ = xcell(0).ascent() + 4;
+ descent_ = xcell(0).descent() + 2;
+ width_ = xcell(0).width() + 12;
+}
+
+
+void MathSqrtInset::draw(Painter & pain, int x, int y) const
{
- MathParInset::draw(pain, x + hmax_ + 2, y);
- int const h = ascent;
- int const d = descent;
- int const h2 = Height() / 2;
- int const w2 = (Height() > 4 * hmax_) ? hmax_ : hmax_ / 2;
+ xo(x);
+ yo(y);
+ xcell(0).draw(pain, x + 10, y);
+ int const a = ascent_;
+ int const d = descent_;
int xp[4];
int yp[4];
- xp[0] = x + hmax_ + wbody_; yp[0] = y - h;
- xp[1] = x + hmax_; yp[1] = y - h;
- xp[2] = x + w2; yp[2] = y + d;
- xp[3] = x; yp[3] = y + d - h2;
+ xp[0] = x + 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;
pain.lines(xp, yp, 4, LColor::mathline);
}
-void MathSqrtInset::Write(ostream & os, bool fragile)
-{
- os << '\\' << name << '{';
- MathParInset::Write(os, fragile);
- os << '}';
-}
-
-
-void MathSqrtInset::Metrics()
+void MathSqrtInset::write(MathWriteInfo & os) const
{
- MathParInset::Metrics();
- ascent += 4;
- descent += 2;
- int a;
- int b;
- hmax_ = mathed_char_height(LM_TC_VAR, size(), 'I', a, b);
- if (hmax_ < 10)
- hmax_ = 10;
- wbody_ = width + 4;
- width += hmax_ + 4;
+ os << "\\sqrt{" << cell(0) << '}';
}
-bool MathSqrtInset::Inside(int x, int y)
+void MathSqrtInset::writeNormal(std::ostream & os) const
{
- return x >= xo() - hmax_
- && x <= xo() + width - hmax_
- && y <= yo() + descent
- && y >= yo() - ascent;
+ os << "[sqrt ";
+ cell(0).writeNormal(os);
+ os << "] ";
}