A bit more re-organization.
[lyx.git] / src / mathed / InsetMathUnderset.cpp
blob92688bc99c11fe3cc3c5dbf330262e3baa9e91ba
1 /**
2 * \file InsetMathUnderset.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author André Pönitz
8 * Full author contact details are available in file CREDITS.
9 */
11 #include <config.h>
13 #include "InsetMathUnderset.h"
14 #include "MathData.h"
15 #include "MathStream.h"
17 #include "Cursor.h"
18 #include "LaTeXFeatures.h"
20 using namespace std;
22 namespace lyx {
24 Inset * InsetMathUnderset::clone() const
26 return new InsetMathUnderset(*this);
30 void InsetMathUnderset::metrics(MetricsInfo & mi, Dimension & dim) const
32 Dimension dim1;
33 cell(1).metrics(mi, dim1);
34 FracChanger dummy(mi.base);
35 Dimension dim0;
36 cell(0).metrics(mi, dim0);
37 dim.wid = max(dim0.width(), dim1.width()) + 4;
38 dim.asc = dim1.ascent();
39 dim.des = dim1.descent() + dim0.height() + 4;
40 metricsMarkers(dim);
44 void InsetMathUnderset::draw(PainterInfo & pi, int x, int y) const
46 Dimension const dim = dimension(*pi.base.bv);
47 Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
48 Dimension const & dim1 = cell(1).dimension(*pi.base.bv);
49 int m = x + dim.wid / 2;
50 int yo = y + dim1.descent() + dim0.ascent() + 1;
51 cell(1).draw(pi, m - dim1.width() / 2, y);
52 FracChanger dummy(pi.base);
53 cell(0).draw(pi, m - dim0.width() / 2, yo);
54 drawMarkers(pi, x, y);
58 bool InsetMathUnderset::idxFirst(Cursor & cur) const
60 cur.idx() = 1;
61 cur.pos() = 0;
62 return true;
66 bool InsetMathUnderset::idxLast(Cursor & cur) const
68 cur.idx() = 1;
69 cur.pos() = cur.lastpos();
70 return true;
74 bool InsetMathUnderset::idxUpDown(Cursor & cur, bool up) const
76 idx_type target = up; // up ? 1 : 0, since upper cell has idx 1
77 if (cur.idx() == target)
78 return false;
79 cur.idx() = target;
80 cur.pos() = cur.cell().x2pos(&cur.bv(), cur.x_target());
81 return true;
85 void InsetMathUnderset::write(WriteStream & os) const
87 MathEnsurer ensurer(os);
88 os << "\\underset{" << cell(0) << "}{" << cell(1) << '}';
92 void InsetMathUnderset::normalize(NormalStream & os) const
94 os << "[underset " << cell(0) << ' ' << cell(1) << ']';
98 void InsetMathUnderset::validate(LaTeXFeatures & features) const
100 features.require("amsmath");
101 InsetMathNest::validate(features);
105 } // namespace lyx