mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Re-implement math markers logic.
The goal of this patch is to be able to properly remove the space
needed for markers in the case of insets that are inside macros and do
not need these markers. This was attempted at 9a9a6a8
, but did not
work reliably.
To this end, the following simplifications are made:
* instead of drawing its own markers, each inset has a virtual method
marker() which prescribes either NO_MARKER, MARKER (normal bottom
marker) or MARKER2 (top and bottom marker). All explicit calls to
(draw|metrics)Markers(|2) are removed.
* the space necessary for the markers is now counted in the
before/above margins in the row structure. Therefore painting will
not happen at (x + 1, y), but just (x,y).
* the methods drawDecoration are removed.
* the helper methods InsetMath::(draw|metrics)Markers(|2) are removed
and replaced by a new function drawMarkers in MathRow.cpp.
Now the marker type is kept in the MathRow::Element object (and set to
NO_MARKER in not editable context) and the marker is accounted for in
MathRow::(metrics|draw).
Moreover, the extra pixel for the marker is taken on the before/After
space if possible. The marker will only require extra space when
before/after is 0.
See comment 168 of #8883 to understand what issues are fixed.
This commit is contained in:
parent
605438f26d
commit
89662a6852
@ -198,17 +198,19 @@ public:
|
|||||||
///
|
///
|
||||||
virtual bool showInsetDialog(BufferView *) const;
|
virtual bool showInsetDialog(BufferView *) const;
|
||||||
|
|
||||||
/// draw inset decoration if necessary.
|
// The possible marker types for insets
|
||||||
/// This can use \c drawMarkers() for example.
|
enum marker_type { NO_MARKER, MARKER2, MARKER };
|
||||||
virtual void drawDecoration(PainterInfo &, int, int) const {}
|
|
||||||
/// draw four angular markers
|
|
||||||
void drawMarkers(PainterInfo & pi, int x, int y) const;
|
|
||||||
/// draw two angular markers
|
/// draw two angular markers
|
||||||
|
void drawMarkers(PainterInfo & pi, int x, int y) const;
|
||||||
|
/// draw four angular markers
|
||||||
void drawMarkers2(PainterInfo & pi, int x, int y) const;
|
void drawMarkers2(PainterInfo & pi, int x, int y) const;
|
||||||
/// add space for markers
|
/// add space for markers
|
||||||
void metricsMarkers(Dimension & dim, int framesize = 1) const;
|
void metricsMarkers(Dimension & dim, int framesize = 1) const;
|
||||||
/// add space for markers
|
/// add space for markers
|
||||||
void metricsMarkers2(Dimension & dim, int framesize = 1) const;
|
void metricsMarkers2(Dimension & dim, int framesize = 1) const;
|
||||||
|
/// draw inset decoration if necessary.
|
||||||
|
/// This can use \c drawMarkers() for example.
|
||||||
|
virtual void drawDecoration(PainterInfo &, int, int) const {}
|
||||||
|
|
||||||
/// last metrics computed for the inset
|
/// last metrics computed for the inset
|
||||||
Dimension const dimension(BufferView const &) const;
|
Dimension const dimension(BufferView const &) const;
|
||||||
|
@ -58,44 +58,21 @@ MathClass InsetMath::mathClass() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InsetMath::marker_type InsetMath::marker() const
|
||||||
|
{
|
||||||
|
return nargs() > 0 ? MARKER : NO_MARKER;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool InsetMath::addToMathRow(MathRow & mrow, MetricsInfo & mi) const
|
bool InsetMath::addToMathRow(MathRow & mrow, MetricsInfo & mi) const
|
||||||
{
|
{
|
||||||
MathRow::Element e(mi, MathRow::INSET, mathClass());
|
MathRow::Element e(mi, MathRow::INSET, mathClass());
|
||||||
e.inset = this;
|
e.inset = this;
|
||||||
|
e.marker = mi.base.macro_nesting ? NO_MARKER : marker();
|
||||||
mrow.push_back(e);
|
mrow.push_back(e);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InsetMath::metricsMarkers(MetricsInfo & mi, Dimension & dim,
|
|
||||||
int framesize) const
|
|
||||||
{
|
|
||||||
if (!mi.base.macro_nesting)
|
|
||||||
Inset::metricsMarkers(dim, framesize);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void InsetMath::metricsMarkers2(MetricsInfo & mi, Dimension & dim,
|
|
||||||
int framesize) const
|
|
||||||
{
|
|
||||||
if (!mi.base.macro_nesting)
|
|
||||||
Inset::metricsMarkers2(dim, framesize);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void InsetMath::drawMarkers(PainterInfo & pi, int x, int y) const
|
|
||||||
{
|
|
||||||
if (!pi.base.macro_nesting)
|
|
||||||
Inset::drawMarkers(pi, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void InsetMath::drawMarkers2(PainterInfo & pi, int x, int y) const
|
|
||||||
{
|
|
||||||
if (!pi.base.macro_nesting)
|
|
||||||
Inset::drawMarkers2(pi, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void InsetMath::dump() const
|
void InsetMath::dump() const
|
||||||
{
|
{
|
||||||
|
@ -114,6 +114,9 @@ public:
|
|||||||
/// this is overridden by specific insets
|
/// this is overridden by specific insets
|
||||||
virtual mode_type currentMode() const { return MATH_MODE; }
|
virtual mode_type currentMode() const { return MATH_MODE; }
|
||||||
|
|
||||||
|
/// this is overridden by insets with specific edit marker type
|
||||||
|
virtual marker_type marker() const;
|
||||||
|
|
||||||
/// the ascent of the inset above the baseline
|
/// the ascent of the inset above the baseline
|
||||||
/// compute the size of the object for text based drawing
|
/// compute the size of the object for text based drawing
|
||||||
virtual void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
|
virtual void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
|
||||||
@ -169,15 +172,6 @@ public:
|
|||||||
/// Add this inset to a math row. Return true if contents got added
|
/// Add this inset to a math row. Return true if contents got added
|
||||||
virtual bool addToMathRow(MathRow &, MetricsInfo & mi) const;
|
virtual bool addToMathRow(MathRow &, MetricsInfo & mi) const;
|
||||||
|
|
||||||
/// draw four angular markers
|
|
||||||
void drawMarkers(PainterInfo & pi, int x, int y) const;
|
|
||||||
/// draw two angular markers
|
|
||||||
void drawMarkers2(PainterInfo & pi, int x, int y) const;
|
|
||||||
/// add space for markers
|
|
||||||
void metricsMarkers(MetricsInfo & mi, Dimension & dim, int framesize = 1) const;
|
|
||||||
/// add space for markers
|
|
||||||
void metricsMarkers2(MetricsInfo & mi, Dimension & dim, int framesize = 1) const;
|
|
||||||
|
|
||||||
/// identifies things that can get scripts
|
/// identifies things that can get scripts
|
||||||
virtual bool isScriptable() const { return false; }
|
virtual bool isScriptable() const { return false; }
|
||||||
/// will this get written as a single block in {..}
|
/// will this get written as a single block in {..}
|
||||||
|
@ -53,7 +53,6 @@ void InsetMathBoldSymbol::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
Changer dummy = mi.base.changeEnsureMath();
|
Changer dummy = mi.base.changeEnsureMath();
|
||||||
//Changer dummy = mi.base.changeFontSet("mathbf");
|
//Changer dummy = mi.base.changeFontSet("mathbf");
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
++dim.wid; // for 'double stroke'
|
++dim.wid; // for 'double stroke'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,9 +61,8 @@ void InsetMathBoldSymbol::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeEnsureMath();
|
Changer dummy = pi.base.changeEnsureMath();
|
||||||
//Changer dummy = pi.base.changeFontSet("mathbf");
|
//Changer dummy = pi.base.changeFontSet("mathbf");
|
||||||
|
cell(0).draw(pi, x, y);
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x + 1, y);
|
||||||
cell(0).draw(pi, x + 2, y);
|
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +83,6 @@ void InsetMathBox::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeFontSet("textnormal");
|
Changer dummy = mi.base.changeFontSet("textnormal");
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -91,12 +90,11 @@ void InsetMathBox::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeFontSet("textnormal");
|
Changer dummy = pi.base.changeFontSet("textnormal");
|
||||||
cell(0).draw(pi, x, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathBox::infoize(odocstream & os) const
|
void InsetMathBox::infoize(odocstream & os) const
|
||||||
{
|
{
|
||||||
os << bformat(_("Box: %1$s"), name_);
|
os << bformat(_("Box: %1$s"), name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +133,10 @@ void InsetMathFBox::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeFontSet("textnormal");
|
Changer dummy = mi.base.changeFontSet("textnormal");
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers2(mi, dim, 3); // 1 pixel space, 1 frame, 1 space
|
// 1 pixel space, 1 frame, 1 space
|
||||||
|
dim.wid += 2 * 3;
|
||||||
|
dim.asc += 3;
|
||||||
|
dim.des += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -219,23 +220,23 @@ InsetMathMakebox::InsetMathMakebox(Buffer * buf, bool framebox)
|
|||||||
void InsetMathMakebox::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathMakebox::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeFontSet("textnormal");
|
Changer dummy = mi.base.changeFontSet("textnormal");
|
||||||
|
|
||||||
Dimension wdim;
|
Dimension wdim;
|
||||||
static docstring bracket = from_ascii("[");
|
static docstring bracket = from_ascii("[");
|
||||||
metricsStrRedBlack(mi, wdim, bracket);
|
metricsStrRedBlack(mi, wdim, bracket);
|
||||||
int w = wdim.wid;
|
int w = wdim.wid;
|
||||||
|
|
||||||
Dimension dim0;
|
Dimension dim0;
|
||||||
Dimension dim1;
|
Dimension dim1;
|
||||||
Dimension dim2;
|
Dimension dim2;
|
||||||
cell(0).metrics(mi, dim0);
|
cell(0).metrics(mi, dim0);
|
||||||
cell(1).metrics(mi, dim1);
|
cell(1).metrics(mi, dim1);
|
||||||
cell(2).metrics(mi, dim2);
|
cell(2).metrics(mi, dim2);
|
||||||
|
|
||||||
dim.wid = w + dim0.wid + w + w + dim1.wid + w + 2 + dim2.wid;
|
dim.wid = w + dim0.wid + w + w + dim1.wid + w + 2 + dim2.wid;
|
||||||
dim.asc = std::max(std::max(wdim.asc, dim0.asc), std::max(dim1.asc, dim2.asc));
|
dim.asc = std::max(std::max(wdim.asc, dim0.asc), std::max(dim1.asc, dim2.asc));
|
||||||
dim.des = std::max(std::max(wdim.des, dim0.des), std::max(dim1.des, dim2.des));
|
dim.des = std::max(std::max(wdim.des, dim0.des), std::max(dim1.des, dim2.des));
|
||||||
|
|
||||||
if (framebox_) {
|
if (framebox_) {
|
||||||
dim.wid += 4;
|
dim.wid += 4;
|
||||||
dim.asc += 3;
|
dim.asc += 3;
|
||||||
@ -244,26 +245,22 @@ void InsetMathMakebox::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc += 1;
|
dim.asc += 1;
|
||||||
dim.des += 1;
|
dim.des += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathMakebox::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathMakebox::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
|
|
||||||
Changer dummy = pi.base.changeFontSet("textnormal");
|
Changer dummy = pi.base.changeFontSet("textnormal");
|
||||||
BufferView const & bv = *pi.base.bv;
|
BufferView const & bv = *pi.base.bv;
|
||||||
int w = mathed_char_width(pi.base.font, '[');
|
int w = mathed_char_width(pi.base.font, '[');
|
||||||
|
|
||||||
if (framebox_) {
|
if (framebox_) {
|
||||||
Dimension const dim = dimension(*pi.base.bv);
|
Dimension const dim = dimension(*pi.base.bv);
|
||||||
pi.pain.rectangle(x + 1, y - dim.ascent() + 1,
|
pi.pain.rectangle(x + 1, y - dim.ascent() + 1,
|
||||||
dim.width() - 2, dim.height() - 2, Color_foreground);
|
dim.width() - 2, dim.height() - 2, Color_foreground);
|
||||||
x += 2;
|
x += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
drawStrBlack(pi, x, y, from_ascii("["));
|
drawStrBlack(pi, x, y, from_ascii("["));
|
||||||
x += w;
|
x += w;
|
||||||
cell(0).draw(pi, x, y);
|
cell(0).draw(pi, x, y);
|
||||||
@ -359,7 +356,10 @@ InsetMathBoxed::InsetMathBoxed(Buffer * buf)
|
|||||||
void InsetMathBoxed::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathBoxed::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers2(mi, dim, 3); // 1 pixel space, 1 frame, 1 space
|
// 1 pixel space, 1 frame, 1 space
|
||||||
|
dim.wid += 2 * 3;
|
||||||
|
dim.asc += 3;
|
||||||
|
dim.des += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ public:
|
|||||||
///
|
///
|
||||||
mode_type currentMode() const { return TEXT_MODE; }
|
mode_type currentMode() const { return TEXT_MODE; }
|
||||||
///
|
///
|
||||||
|
marker_type marker() const { return NO_MARKER; }
|
||||||
|
///
|
||||||
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
||||||
///
|
///
|
||||||
void draw(PainterInfo & pi, int x, int y) const;
|
void draw(PainterInfo & pi, int x, int y) const;
|
||||||
@ -116,6 +118,8 @@ public:
|
|||||||
///
|
///
|
||||||
InsetMathBoxed(Buffer * buf);
|
InsetMathBoxed(Buffer * buf);
|
||||||
///
|
///
|
||||||
|
marker_type marker() const { return NO_MARKER; }
|
||||||
|
///
|
||||||
void validate(LaTeXFeatures & features) const;
|
void validate(LaTeXFeatures & features) const;
|
||||||
///
|
///
|
||||||
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
||||||
|
@ -55,7 +55,6 @@ void InsetMathBrace::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc = max(dim0.asc, t.asc);
|
dim.asc = max(dim0.asc, t.asc);
|
||||||
dim.des = max(dim0.des, t.des);
|
dim.des = max(dim0.des, t.des);
|
||||||
dim.wid = dim0.width() + 2 * t.wid;
|
dim.wid = dim0.width() + 2 * t.wid;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -70,7 +69,6 @@ void InsetMathBrace::draw(PainterInfo & pi, int x, int y) const
|
|||||||
cell(0).draw(pi, x + t.wid, y);
|
cell(0).draw(pi, x + t.wid, y);
|
||||||
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
||||||
pi.pain.text(x + t.wid + dim0.width(), y, '}', font);
|
pi.pain.text(x + t.wid + dim0.width(), y, '}', font);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,6 @@ void InsetMathCancel::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeEnsureMath();
|
Changer dummy = mi.base.changeEnsureMath();
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ void InsetMathCancel::draw(PainterInfo & pi, int x, int y) const
|
|||||||
Changer dummy = pi.base.changeEnsureMath();
|
Changer dummy = pi.base.changeEnsureMath();
|
||||||
// We first draw the text and then an arrow
|
// We first draw the text and then an arrow
|
||||||
ColorCode const origcol = pi.base.font.color();
|
ColorCode const origcol = pi.base.font.color();
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
Dimension const dim = dimension(*pi.base.bv);
|
Dimension const dim = dimension(*pi.base.bv);
|
||||||
int const t = pi.base.solidLineThickness();
|
int const t = pi.base.solidLineThickness();
|
||||||
|
|
||||||
@ -75,8 +74,6 @@ void InsetMathCancel::draw(PainterInfo & pi, int x, int y) const
|
|||||||
pi.pain.line(x2, y1, x1, y2, origcol, pi.pain.line_solid, t);
|
pi.pain.line(x2, y1, x1, y2, origcol, pi.pain.line_solid, t);
|
||||||
pi.pain.line(x2, y2, x1, y1, origcol, pi.pain.line_solid, t);
|
pi.pain.line(x2, y2, x1, y1, origcol, pi.pain.line_solid, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ void InsetMathCancelto::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc = max(dim0.ascent() + 2, dim0.ascent() + dim1.ascent()) + 2 + 8;
|
dim.asc = max(dim0.ascent() + 2, dim0.ascent() + dim1.ascent()) + 2 + 8;
|
||||||
dim.des = max(dim0.descent() - 2, dim1.descent()) + 2;
|
dim.des = max(dim0.descent() - 2, dim1.descent()) + 2;
|
||||||
dim.wid = dim0.width() + dim1.width() + 10;
|
dim.wid = dim0.width() + dim1.width() + 10;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -59,11 +58,11 @@ void InsetMathCancelto::draw(PainterInfo & pi, int x, int y) const
|
|||||||
|
|
||||||
// We first draw the text and then an arrow
|
// We first draw the text and then an arrow
|
||||||
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
cell(1).draw(pi, x + dim0.wid + 2 + 8, y - dim0.asc - 8);
|
cell(1).draw(pi, x + dim0.wid + 1 + 8, y - dim0.asc - 8);
|
||||||
|
|
||||||
//Dimension const dim = dimension(*pi.base.bv);
|
//Dimension const dim = dimension(*pi.base.bv);
|
||||||
|
|
||||||
// y3____ ___
|
// y3____ ___
|
||||||
// /|
|
// /|
|
||||||
// y2_ / |
|
// y2_ / |
|
||||||
@ -86,8 +85,6 @@ void InsetMathCancelto::draw(PainterInfo & pi, int x, int y) const
|
|||||||
// the arrow bars
|
// the arrow bars
|
||||||
pi.pain.line(x3, y3, x2 + 2, y3, origcol);
|
pi.pain.line(x3, y3, x2 + 2, y3, origcol);
|
||||||
pi.pain.line(x3, y3, x3 - 2, y2 - 2, origcol);
|
pi.pain.line(x3, y3, x3 - 2, y2 - 2, origcol);
|
||||||
|
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,14 +31,12 @@ Inset * InsetMathClass::clone() const
|
|||||||
void InsetMathClass::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathClass::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathClass::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathClass::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@ Inset * InsetMathColor::clone() const
|
|||||||
void InsetMathColor::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathColor::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -57,9 +56,8 @@ void InsetMathColor::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
ColorCode origcol = pi.base.font.color();
|
ColorCode origcol = pi.base.font.color();
|
||||||
pi.base.font.setColor(lcolor.getFromLaTeXName(to_utf8(color_)));
|
pi.base.font.setColor(lcolor.getFromLaTeXName(to_utf8(color_)));
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
pi.base.font.setColor(origcol);
|
pi.base.font.setColor(origcol);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,14 +50,12 @@ Inset * InsetMathComment::clone() const
|
|||||||
void InsetMathComment::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathComment::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathComment::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathComment::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,8 +119,6 @@ void InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dy_ = dim.des + 1;
|
dy_ = dim.des + 1;
|
||||||
dim.des += dh_ + 2;
|
dim.des += dh_ + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,14 +126,13 @@ void InsetMathDecoration::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeEnsureMath(currentMode());
|
Changer dummy = pi.base.changeEnsureMath(currentMode());
|
||||||
|
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
Dimension const & dim0 = cell(0).dimension(*pi.base.bv);
|
||||||
if (wide())
|
if (wide())
|
||||||
mathed_draw_deco(pi, x + 1, y + dy_, dim0.wid, dh_, key_->name);
|
mathed_draw_deco(pi, x + 1, y + dy_, dim0.wid, dh_, key_->name);
|
||||||
else
|
else
|
||||||
mathed_draw_deco(pi, x + 1 + (dim0.wid - dw_) / 2,
|
mathed_draw_deco(pi, x + 1 + (dim0.wid - dw_) / 2,
|
||||||
y + dy_, dw_, dh_, key_->name);
|
y + dy_, dw_, dh_, key_->name);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ void InsetMathEnsureMath::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeEnsureMath();
|
Changer dummy = mi.base.changeEnsureMath();
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +47,6 @@ void InsetMathEnsureMath::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeEnsureMath();
|
Changer dummy = pi.base.changeEnsureMath();
|
||||||
cell(0).draw(pi, x, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,15 +42,13 @@ void InsetMathEnv::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeEnsureMath();
|
Changer dummy = mi.base.changeEnsureMath();
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathEnv::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathEnv::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeEnsureMath();
|
Changer dummy = pi.base.changeEnsureMath();
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,15 +86,13 @@ void InsetMathFont::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeFontSet(font());
|
Changer dummy = mi.base.changeFontSet(font());
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathFont::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathFont::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeFontSet(font());
|
Changer dummy = pi.base.changeFontSet(font());
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ void InsetMathFontOld::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
Changer dummy = really_change_font ? mi.base.changeFontSet(fontname)
|
Changer dummy = really_change_font ? mi.base.changeFontSet(fontname)
|
||||||
: Changer();
|
: Changer();
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -79,8 +78,7 @@ void InsetMathFontOld::draw(PainterInfo & pi, int x, int y) const
|
|||||||
|
|
||||||
Changer dummy = really_change_font ? pi.base.changeFontSet(fontname)
|
Changer dummy = really_change_font ? pi.base.changeFontSet(fontname)
|
||||||
: Changer();
|
: Changer();
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -261,7 +261,6 @@ void InsetMathFrac::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.des = max(0, dim1.height() + dy/2 - dy + t);
|
dim.des = max(0, dim1.height() + dy/2 - dy + t);
|
||||||
}
|
}
|
||||||
} //switch (kind_)
|
} //switch (kind_)
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -278,12 +277,12 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const
|
|||||||
// is there an extra cell holding the value being given a dimension?
|
// is there an extra cell holding the value being given a dimension?
|
||||||
// (this is \unittwo)
|
// (this is \unittwo)
|
||||||
if (nargs() == 2) {
|
if (nargs() == 2) {
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
xx += dim0.wid + 4;
|
xx += dim0.wid + 4;
|
||||||
unit_cell = 1;
|
unit_cell = 1;
|
||||||
}
|
}
|
||||||
Changer dummy = pi.base.font.changeShape(UP_SHAPE);
|
Changer dummy = pi.base.font.changeShape(UP_SHAPE);
|
||||||
cell(unit_cell).draw(pi, xx + 1, y);
|
cell(unit_cell).draw(pi, xx, y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -295,24 +294,24 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const
|
|||||||
// is there an extra cell holding the value being given a dimension?
|
// is there an extra cell holding the value being given a dimension?
|
||||||
// (this is \unitfracthree)
|
// (this is \unitfracthree)
|
||||||
if (kind_ == UNITFRAC && nargs() == 3) {
|
if (kind_ == UNITFRAC && nargs() == 3) {
|
||||||
cell(2).draw(pi, x + 1, y);
|
cell(2).draw(pi, x, y);
|
||||||
xx += cell(2).dimension(*pi.base.bv).wid + 4;
|
xx += cell(2).dimension(*pi.base.bv).wid + 4;
|
||||||
}
|
}
|
||||||
Changer dummy = (kind_ == UNITFRAC) ? pi.base.font.changeShape(UP_SHAPE)
|
Changer dummy = (kind_ == UNITFRAC) ? pi.base.font.changeShape(UP_SHAPE)
|
||||||
: Changer();
|
: Changer();
|
||||||
// nice fraction
|
// nice fraction
|
||||||
Changer dummy2 = pi.base.changeScript();
|
Changer dummy2 = pi.base.changeScript();
|
||||||
cell(0).draw(pi, xx + 2, y - dy);
|
cell(0).draw(pi, xx, y - dy);
|
||||||
// reference LaTeX code from nicefrac.sty:
|
// reference LaTeX code from nicefrac.sty:
|
||||||
// \mkern-2mu/\mkern-1mu
|
// \mkern-2mu/\mkern-1mu
|
||||||
if (latexkeys const * slash = slash_symbol()) {
|
if (latexkeys const * slash = slash_symbol()) {
|
||||||
int mkern = mathed_mu(pi.base.font, 2.0);
|
int mkern = mathed_mu(pi.base.font, 2.0);
|
||||||
mathedSymbolDraw(pi, xx + 2 + dim0.wid - mkern, y, slash);
|
mathedSymbolDraw(pi, xx + 1 + dim0.wid - mkern, y, slash);
|
||||||
Dimension dimslash;
|
Dimension dimslash;
|
||||||
mathedSymbolDim(pi.base, dimslash, slash);
|
mathedSymbolDim(pi.base, dimslash, slash);
|
||||||
xx += dimslash.wid - mathed_mu(pi.base.font, 3.0);
|
xx += dimslash.wid - mathed_mu(pi.base.font, 3.0);
|
||||||
}
|
}
|
||||||
cell(1).draw(pi, xx + 2 + dim0.wid, y);
|
cell(1).draw(pi, xx + 1 + dim0.wid, y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -339,7 +338,7 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const
|
|||||||
int const m = x + dim.wid / 2;
|
int const m = x + dim.wid / 2;
|
||||||
int const xx =
|
int const xx =
|
||||||
// align left
|
// align left
|
||||||
(kind_ == CFRACLEFT) ? x + 2 :
|
(kind_ == CFRACLEFT) ? x + 1 :
|
||||||
// align right
|
// align right
|
||||||
(kind_ == CFRACRIGHT) ? x + dim.wid - dim0.wid - 2 :
|
(kind_ == CFRACRIGHT) ? x + dim.wid - dim0.wid - 2 :
|
||||||
// center
|
// center
|
||||||
@ -355,11 +354,10 @@ void InsetMathFrac::draw(PainterInfo & pi, int x, int y) const
|
|||||||
cell(1).draw(pi, m - dim1.wid / 2, y + dim1.asc + dy/2 - dy + t);
|
cell(1).draw(pi, m - dim1.wid / 2, y + dim1.asc + dy/2 - dy + t);
|
||||||
// horizontal line
|
// horizontal line
|
||||||
if (kind_ != ATOP)
|
if (kind_ != ATOP)
|
||||||
pi.pain.line(x + 1, y - dy, x + dim.wid - 2, y - dy,
|
pi.pain.line(x, y - dy, x + dim.wid - 2, y - dy,
|
||||||
pi.base.font.color(), pi.pain.line_solid, t);
|
pi.base.font.color(), pi.pain.line_solid, t);
|
||||||
}
|
}
|
||||||
} //switch (kind_)
|
} //switch (kind_)
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -660,7 +658,6 @@ void InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc = dim0.height() + 1 + dy/2 + dy;
|
dim.asc = dim0.height() + 1 + dy/2 + dy;
|
||||||
dim.des = max(0, dim1.height() + 1 + dy/2 - dy);
|
dim.des = max(0, dim1.height() + 1 + dy/2 - dy);
|
||||||
dim.wid = max(dim0.wid, dim1.wid) + 2 * dw(dim.height()) + 4;
|
dim.wid = max(dim0.wid, dim1.wid) + 2 * dw(dim.height()) + 4;
|
||||||
metricsMarkers2(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -693,7 +690,6 @@ void InsetMathBinom::draw(PainterInfo & pi, int x, int y) const
|
|||||||
dim.height(), bra);
|
dim.height(), bra);
|
||||||
mathed_draw_deco(pi, x + dim.width() - dw(dim.height()),
|
mathed_draw_deco(pi, x + dim.width() - dw(dim.height()),
|
||||||
y - dim.ascent(), dw(dim.height()), dim.height(), ket);
|
y - dim.ascent(), dw(dim.height()), dim.height(), ket);
|
||||||
drawMarkers2(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,12 +125,11 @@ public:
|
|||||||
/// Generalized fractions are of inner class (see The TeXbook, p.292)
|
/// Generalized fractions are of inner class (see The TeXbook, p.292)
|
||||||
MathClass mathClass() const { return MC_INNER; }
|
MathClass mathClass() const { return MC_INNER; }
|
||||||
///
|
///
|
||||||
|
marker_type marker() const { return MARKER2; }
|
||||||
|
///
|
||||||
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
||||||
///
|
///
|
||||||
void draw(PainterInfo &, int x, int y) const;
|
void draw(PainterInfo &, int x, int y) const;
|
||||||
/// draw decorations.
|
|
||||||
void drawDecoration(PainterInfo & pi, int x, int y) const
|
|
||||||
{ drawMarkers2(pi, x, y); }
|
|
||||||
///
|
///
|
||||||
bool extraBraces() const;
|
bool extraBraces() const;
|
||||||
///
|
///
|
||||||
|
@ -588,7 +588,6 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
dim.wid += leftMargin() + rightMargin();
|
dim.wid += leftMargin() + rightMargin();
|
||||||
metricsMarkers2(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -653,8 +652,6 @@ void InsetMathGrid::draw(PainterInfo & pi, int x, int y) const
|
|||||||
pi.pain.line(xx1, yy, xx2, yy, Color_foreground);
|
pi.pain.line(xx1, yy, xx2, yy, Color_foreground);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drawMarkers2(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,9 +103,6 @@ public:
|
|||||||
void metrics(MetricsInfo & mi, Dimension &) const;
|
void metrics(MetricsInfo & mi, Dimension &) const;
|
||||||
///
|
///
|
||||||
void draw(PainterInfo & pi, int x, int y) const;
|
void draw(PainterInfo & pi, int x, int y) const;
|
||||||
/// draw decorations.
|
|
||||||
void drawDecoration(PainterInfo & pi, int x, int y) const
|
|
||||||
{ drawMarkers2(pi, x, y); }
|
|
||||||
///
|
///
|
||||||
void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
|
void metricsT(TextMetricsInfo const & mi, Dimension & dim) const;
|
||||||
///
|
///
|
||||||
@ -248,9 +245,9 @@ protected:
|
|||||||
/// Width of cell, taking combined columns into account
|
/// Width of cell, taking combined columns into account
|
||||||
int cellWidth(idx_type idx) const;
|
int cellWidth(idx_type idx) const;
|
||||||
///
|
///
|
||||||
virtual int leftMargin() const { return 1; }
|
virtual int leftMargin() const { return 0; }
|
||||||
///
|
///
|
||||||
virtual int rightMargin() const { return 1; }
|
virtual int rightMargin() const { return 0; }
|
||||||
|
|
||||||
/// returns proper 'end of line' code for LaTeX
|
/// returns proper 'end of line' code for LaTeX
|
||||||
virtual docstring eolString(row_type row, bool fragile, bool latex,
|
virtual docstring eolString(row_type row, bool fragile, bool latex,
|
||||||
|
@ -567,8 +567,9 @@ void InsetMathHull::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.wid += 30 + l;
|
dim.wid += 30 + l;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type_ == hullRegexp)
|
// reserve some space for marker.
|
||||||
dim.wid += 2;
|
dim.wid += 2;
|
||||||
|
|
||||||
// make it at least as high as the current font
|
// make it at least as high as the current font
|
||||||
int asc = 0;
|
int asc = 0;
|
||||||
int des = 0;
|
int des = 0;
|
||||||
@ -644,6 +645,7 @@ void InsetMathHull::draw(PainterInfo & pi, int x, int y) const
|
|||||||
: LM_ST_TEXT);
|
: LM_ST_TEXT);
|
||||||
|
|
||||||
InsetMathGrid::draw(pi, x + 1, y);
|
InsetMathGrid::draw(pi, x + 1, y);
|
||||||
|
drawMarkers2(pi, x, y);
|
||||||
|
|
||||||
if (numberedType()) {
|
if (numberedType()) {
|
||||||
int const xx = x + colinfo_.back().offset_ + colinfo_.back().width_ + 20;
|
int const xx = x + colinfo_.back().offset_ + colinfo_.back().width_ + 20;
|
||||||
|
@ -34,14 +34,12 @@ void InsetMathLefteqn::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc += 2;
|
dim.asc += 2;
|
||||||
dim.des += 2;
|
dim.des += 2;
|
||||||
dim.wid = 4;
|
dim.wid = 4;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathLefteqn::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathLefteqn::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
cell(0).draw(pi, x + 2, y);
|
cell(0).draw(pi, x + 1, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,9 +48,6 @@ public:
|
|||||||
void draw(PainterInfo & pi, int x, int y) const;
|
void draw(PainterInfo & pi, int x, int y) const;
|
||||||
/// draw selection background
|
/// draw selection background
|
||||||
void drawSelection(PainterInfo & pi, int x, int y) const;
|
void drawSelection(PainterInfo & pi, int x, int y) const;
|
||||||
/// draw decorations.
|
|
||||||
void drawDecoration(PainterInfo & pi, int x, int y) const
|
|
||||||
{ drawMarkers(pi, x, y); }
|
|
||||||
///
|
///
|
||||||
void updateBuffer(ParIterator const &, UpdateType);
|
void updateBuffer(ParIterator const &, UpdateType);
|
||||||
/// identifies NestInsets
|
/// identifies NestInsets
|
||||||
|
@ -40,7 +40,6 @@ void InsetMathOverset::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.wid = max(dim0.width(), dim1.wid) + 4;
|
dim.wid = max(dim0.width(), dim1.wid) + 4;
|
||||||
dim.asc = dim1.asc + dim0.height() + 4;
|
dim.asc = dim1.asc + dim0.height() + 4;
|
||||||
dim.des = dim1.des;
|
dim.des = dim1.des;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -55,7 +54,6 @@ void InsetMathOverset::draw(PainterInfo & pi, int x, int y) const
|
|||||||
cell(1).draw(pi, m - dim1.wid / 2, y);
|
cell(1).draw(pi, m - dim1.wid / 2, y);
|
||||||
Changer dummy = pi.base.changeFrac();
|
Changer dummy = pi.base.changeFrac();
|
||||||
cell(0).draw(pi, m - dim0.width() / 2, yo);
|
cell(0).draw(pi, m - dim0.width() / 2, yo);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ void InsetMathPhantom::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
{
|
{
|
||||||
Changer dummy = mi.base.changeEnsureMath();
|
Changer dummy = mi.base.changeEnsureMath();
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -53,7 +52,7 @@ void InsetMathPhantom::draw(PainterInfo & pi, int x, int y) const
|
|||||||
ColorCode const origcol = pi.base.font.color();
|
ColorCode const origcol = pi.base.font.color();
|
||||||
if (visibleContents())
|
if (visibleContents())
|
||||||
pi.base.font.setColor(Color_special);
|
pi.base.font.setColor(Color_special);
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
if (visibleContents())
|
if (visibleContents())
|
||||||
pi.base.font.setColor(origcol);
|
pi.base.font.setColor(origcol);
|
||||||
Dimension const dim = dimension(*pi.base.bv);
|
Dimension const dim = dimension(*pi.base.bv);
|
||||||
@ -247,8 +246,6 @@ void InsetMathPhantom::draw(PainterInfo & pi, int x, int y) const
|
|||||||
else
|
else
|
||||||
pi.pain.line(x2, y1, x2, y5, Color_added_space);
|
pi.pain.line(x2, y1, x2, y5, Color_added_space);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ void InsetMathRoot::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc = max(dim0.ascent() + 5, dim1.ascent()) + 2;
|
dim.asc = max(dim0.ascent() + 5, dim1.ascent()) + 2;
|
||||||
dim.des = max(dim0.descent() - 5, dim1.descent()) + 2;
|
dim.des = max(dim0.descent() - 5, dim1.descent()) + 2;
|
||||||
dim.wid = dim0.width() + dim1.width() + 10;
|
dim.wid = dim0.width() + dim1.width() + 10;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -73,7 +72,6 @@ void InsetMathRoot::draw(PainterInfo & pi, int x, int y) const
|
|||||||
xp[2] = x + w - 2; yp[2] = y + (d - a)/2 + 2;
|
xp[2] = x + w - 2; yp[2] = y + (d - a)/2 + 2;
|
||||||
xp[3] = x + w - 5; yp[3] = y + (d - a)/2 + 4;
|
xp[3] = x + w - 5; yp[3] = y + (d - a)/2 + 4;
|
||||||
pi.pain.lines(xp, yp, 4, pi.base.font.color());
|
pi.pain.lines(xp, yp, 4, pi.base.font.color());
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -337,7 +337,6 @@ void InsetMathScript::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.des = max(nd, des);
|
dim.des = max(nd, des);
|
||||||
} else
|
} else
|
||||||
dim.des = nd;
|
dim.des = nd;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -357,7 +356,6 @@ void InsetMathScript::draw(PainterInfo & pi, int x, int y) const
|
|||||||
up().draw(pi, x + dx1(bv), y - dy1(bv));
|
up().draw(pi, x + dx1(bv), y - dy1(bv));
|
||||||
if (hasDown())
|
if (hasDown())
|
||||||
down().draw(pi, x + dx0(bv), y + dy0(bv));
|
down().draw(pi, x + dx0(bv), y + dy0(bv));
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -222,7 +222,6 @@ void InsetMathSideset::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
int nd = ndes(bv);
|
int nd = ndes(bv);
|
||||||
int des = dyb(bv) + max(dimbl.descent(), dimbr.descent());
|
int des = dyb(bv) + max(dimbl.descent(), dimbr.descent());
|
||||||
dim.des = max(nd, des);
|
dim.des = max(nd, des);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -244,7 +243,6 @@ void InsetMathSideset::draw(PainterInfo & pi, int x, int y) const
|
|||||||
br().draw(pi, x + dxr(bv), y + dyb(bv));
|
br().draw(pi, x + dxr(bv), y + dyb(bv));
|
||||||
tr().draw(pi, x + dxr(bv), y - dyt(bv));
|
tr().draw(pi, x + dxr(bv), y - dyt(bv));
|
||||||
}
|
}
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +47,6 @@ void InsetMathSize::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
Changer dummy2 = mi.base.changeEnsureMath();
|
Changer dummy2 = mi.base.changeEnsureMath();
|
||||||
Changer dummy = mi.base.font.changeStyle(style_);
|
Changer dummy = mi.base.font.changeStyle(style_);
|
||||||
cell(0).metrics(mi, dim);
|
cell(0).metrics(mi, dim);
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -55,8 +54,7 @@ void InsetMathSize::draw(PainterInfo & pi, int x, int y) const
|
|||||||
{
|
{
|
||||||
Changer dummy2 = pi.base.changeEnsureMath();
|
Changer dummy2 = pi.base.changeEnsureMath();
|
||||||
Changer dummy = pi.base.font.changeStyle(style_);
|
Changer dummy = pi.base.font.changeStyle(style_);
|
||||||
cell(0).draw(pi, x + 1, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,26 +42,24 @@ void InsetMathSqrt::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc += 4;
|
dim.asc += 4;
|
||||||
dim.des += 2;
|
dim.des += 2;
|
||||||
dim.wid += 12;
|
dim.wid += 12;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathSqrt::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathSqrt::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
Changer dummy = pi.base.changeEnsureMath();
|
Changer dummy = pi.base.changeEnsureMath();
|
||||||
cell(0).draw(pi, x + 10, y);
|
cell(0).draw(pi, x + 9, y);
|
||||||
Dimension const dim = dimension(*pi.base.bv);
|
Dimension const dim = dimension(*pi.base.bv);
|
||||||
int const a = dim.ascent();
|
int const a = dim.ascent();
|
||||||
int const d = dim.descent();
|
int const d = dim.descent();
|
||||||
int xp[3];
|
int xp[3];
|
||||||
int yp[3];
|
int yp[3];
|
||||||
pi.pain.line(x + dim.width(), y - a + 1,
|
pi.pain.line(x + dim.width(), y - a + 1,
|
||||||
x + 8, y - a + 1, pi.base.font.color());
|
x + 7, y - a + 1, pi.base.font.color());
|
||||||
xp[0] = x + 8; yp[0] = y - a + 1;
|
xp[0] = x + 7; yp[0] = y - a + 1;
|
||||||
xp[1] = x + 5; yp[1] = y + d - 1;
|
xp[1] = x + 4; yp[1] = y + d - 1;
|
||||||
xp[2] = x; yp[2] = y + (d - a)/2;
|
xp[2] = x; yp[2] = y + (d - a)/2;
|
||||||
pi.pain.lines(xp, yp, 3, pi.base.font.color());
|
pi.pain.lines(xp, yp, 3, pi.base.font.color());
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,7 +78,6 @@ void InsetMathStackrel::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc = dim1.ascent() + dim0.height() + 4;
|
dim.asc = dim1.ascent() + dim0.height() + 4;
|
||||||
dim.des = dim1.descent();
|
dim.des = dim1.descent();
|
||||||
}
|
}
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +97,6 @@ void InsetMathStackrel::draw(PainterInfo & pi, int x, int y) const
|
|||||||
int y2 = y + dim1.descent() + dim2.ascent() + 1;
|
int y2 = y + dim1.descent() + dim2.ascent() + 1;
|
||||||
cell(2).draw(pi, m - dim2.width() / 2, y2);
|
cell(2).draw(pi, m - dim2.width() / 2, y2);
|
||||||
}
|
}
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,6 @@ void InsetMathUnderset::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.wid = max(dim0.width(), dim1.width()) + 4;
|
dim.wid = max(dim0.width(), dim1.width()) + 4;
|
||||||
dim.asc = dim1.ascent();
|
dim.asc = dim1.ascent();
|
||||||
dim.des = dim1.descent() + dim0.height() + 4;
|
dim.des = dim1.descent() + dim0.height() + 4;
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,7 +55,6 @@ void InsetMathUnderset::draw(PainterInfo & pi, int x, int y) const
|
|||||||
cell(1).draw(pi, m - dim1.width() / 2, y);
|
cell(1).draw(pi, m - dim1.width() / 2, y);
|
||||||
Changer dummy = pi.base.changeFrac();
|
Changer dummy = pi.base.changeFrac();
|
||||||
cell(0).draw(pi, m - dim0.width() / 2, yo);
|
cell(0).draw(pi, m - dim0.width() / 2, yo);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +52,6 @@ void InsetMathXArrow::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.wid = max(dim0.width(), dim1.width()) + 10;
|
dim.wid = max(dim0.width(), dim1.width()) + 10;
|
||||||
dim.asc = dim0.height() + 10;
|
dim.asc = dim0.height() + 10;
|
||||||
dim.des = dim1.height();
|
dim.des = dim1.height();
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -66,8 +65,7 @@ void InsetMathXArrow::draw(PainterInfo & pi, int x, int y) const
|
|||||||
cell(0).draw(pi, x + dim.width()/2 - dim0.width()/2, y - 10);
|
cell(0).draw(pi, x + dim.width()/2 - dim0.width()/2, y - 10);
|
||||||
Dimension const & dim1 = cell(1).dimension(*pi.base.bv);
|
Dimension const & dim1 = cell(1).dimension(*pi.base.bv);
|
||||||
cell(1).draw(pi, x + dim.width()/2 - dim1.width()/2, y + dim1.height());
|
cell(1).draw(pi, x + dim.width()/2 - dim1.width()/2, y + dim1.height());
|
||||||
mathed_draw_deco(pi, x + 1, y - 7, dim.wid - 2, 5, name_);
|
mathed_draw_deco(pi, x, y - 7, dim.wid, 5, name_);
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,6 +67,8 @@ public:
|
|||||||
///
|
///
|
||||||
MathMacro const * owner() { return mathMacro_; }
|
MathMacro const * owner() { return mathMacro_; }
|
||||||
///
|
///
|
||||||
|
marker_type marker() const { return NO_MARKER; }
|
||||||
|
///
|
||||||
InsetCode lyxCode() const { return ARGUMENT_PROXY_CODE; }
|
InsetCode lyxCode() const { return ARGUMENT_PROXY_CODE; }
|
||||||
/// The math data to use for display
|
/// The math data to use for display
|
||||||
MathData const & displayCell(BufferView const * bv) const
|
MathData const & displayCell(BufferView const * bv) const
|
||||||
@ -301,15 +303,17 @@ bool MathMacro::addToMathRow(MathRow & mrow, MetricsInfo & mi) const
|
|||||||
// This is the same as what is done in metrics().
|
// This is the same as what is done in metrics().
|
||||||
d->editing_[mi.base.bv] = editMode(mi.base.bv);
|
d->editing_[mi.base.bv] = editMode(mi.base.bv);
|
||||||
|
|
||||||
/// The macro nesting can change display of insets. Change it locally.
|
|
||||||
Changer chg = make_change(mi.base.macro_nesting, d->nesting_);
|
|
||||||
|
|
||||||
if (displayMode() != MathMacro::DISPLAY_NORMAL
|
if (displayMode() != MathMacro::DISPLAY_NORMAL
|
||||||
|| d->editing_[mi.base.bv])
|
|| d->editing_[mi.base.bv])
|
||||||
return InsetMath::addToMathRow(mrow, mi);
|
return InsetMath::addToMathRow(mrow, mi);
|
||||||
|
|
||||||
|
/// The macro nesting can change display of insets. Change it locally.
|
||||||
|
Changer chg = make_change(mi.base.macro_nesting, d->nesting_);
|
||||||
|
|
||||||
MathRow::Element e_beg(mi, MathRow::BEG_MACRO);
|
MathRow::Element e_beg(mi, MathRow::BEG_MACRO);
|
||||||
|
e_beg.inset = this;
|
||||||
e_beg.macro = this;
|
e_beg.macro = this;
|
||||||
|
e_beg.marker = d->nesting_ == 1 ? marker() : NO_MARKER;
|
||||||
mrow.push_back(e_beg);
|
mrow.push_back(e_beg);
|
||||||
|
|
||||||
d->macro_->lock();
|
d->macro_->lock();
|
||||||
@ -430,6 +434,27 @@ bool MathMacro::editMetrics(BufferView const * bv) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Inset::marker_type MathMacro::marker() const
|
||||||
|
{
|
||||||
|
switch (d->displayMode_) {
|
||||||
|
case DISPLAY_INIT:
|
||||||
|
case DISPLAY_INTERACTIVE_INIT:
|
||||||
|
return NO_MARKER;
|
||||||
|
case DISPLAY_UNFOLDED:
|
||||||
|
return MARKER;
|
||||||
|
default:
|
||||||
|
switch (lyxrc.macro_edit_style) {
|
||||||
|
case LyXRC::MACRO_EDIT_LIST:
|
||||||
|
return MARKER2;
|
||||||
|
case LyXRC::MACRO_EDIT_INLINE_BOX:
|
||||||
|
return NO_MARKER;
|
||||||
|
default:
|
||||||
|
return MARKER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void MathMacro::metrics(MetricsInfo & mi, Dimension & dim) const
|
void MathMacro::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
/// The macro nesting can change display of insets. Change it locally.
|
/// The macro nesting can change display of insets. Change it locally.
|
||||||
@ -450,7 +475,6 @@ void MathMacro::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.wid += bsdim.width() + 1;
|
dim.wid += bsdim.width() + 1;
|
||||||
dim.asc = max(bsdim.ascent(), dim.ascent());
|
dim.asc = max(bsdim.ascent(), dim.ascent());
|
||||||
dim.des = max(bsdim.descent(), dim.descent());
|
dim.des = max(bsdim.descent(), dim.descent());
|
||||||
metricsMarkers(mi, dim);
|
|
||||||
} else if (lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_LIST
|
} else if (lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_LIST
|
||||||
&& d->editing_[mi.base.bv]) {
|
&& d->editing_[mi.base.bv]) {
|
||||||
// Macro will be edited in a old-style list mode here:
|
// Macro will be edited in a old-style list mode here:
|
||||||
@ -490,7 +514,6 @@ void MathMacro::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
dim.asc += 1;
|
dim.asc += 1;
|
||||||
dim.des += 1;
|
dim.des += 1;
|
||||||
dim.wid += 2;
|
dim.wid += 2;
|
||||||
metricsMarkers2(mi, dim);
|
|
||||||
} else {
|
} else {
|
||||||
LBUFERR(d->macro_);
|
LBUFERR(d->macro_);
|
||||||
|
|
||||||
@ -641,16 +664,15 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const
|
|||||||
pi.pain.text(x, y, from_ascii("\\"), pi.base.font);
|
pi.pain.text(x, y, from_ascii("\\"), pi.base.font);
|
||||||
x += mathed_string_width(pi.base.font, from_ascii("\\")) + 1;
|
x += mathed_string_width(pi.base.font, from_ascii("\\")) + 1;
|
||||||
cell(0).draw(pi, x, y);
|
cell(0).draw(pi, x, y);
|
||||||
drawMarkers(pi, expx, expy);
|
|
||||||
} else if (lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_LIST
|
} else if (lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_LIST
|
||||||
&& d->editing_[pi.base.bv]) {
|
&& d->editing_[pi.base.bv]) {
|
||||||
// Macro will be edited in a old-style list mode here:
|
// Macro will be edited in a old-style list mode here:
|
||||||
|
|
||||||
CoordCache const & coords = pi.base.bv->coordCache();
|
CoordCache const & coords = pi.base.bv->coordCache();
|
||||||
FontInfo const & labelFont = sane_font;
|
FontInfo const & labelFont = sane_font;
|
||||||
|
|
||||||
// markers and box needs two pixels
|
// box needs one pixel
|
||||||
x += 2;
|
x += 1;
|
||||||
|
|
||||||
// get maximal font height
|
// get maximal font height
|
||||||
Dimension fontDim;
|
Dimension fontDim;
|
||||||
@ -674,7 +696,7 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const
|
|||||||
for (idx_type i = 0; i < nargs(); ++i) {
|
for (idx_type i = 0; i < nargs(); ++i) {
|
||||||
// position of label
|
// position of label
|
||||||
Dimension const & cdim = coords.getArrays().dim(&cell(i));
|
Dimension const & cdim = coords.getArrays().dim(&cell(i));
|
||||||
x = expx + 2;
|
x = expx + 1;
|
||||||
y += max(fontDim.asc, cdim.asc) + 1;
|
y += max(fontDim.asc, cdim.asc) + 1;
|
||||||
|
|
||||||
// draw label
|
// draw label
|
||||||
@ -691,9 +713,8 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const
|
|||||||
y += max(fontDim.des, cdim.des);
|
y += max(fontDim.des, cdim.des);
|
||||||
}
|
}
|
||||||
|
|
||||||
pi.pain.rectangle(expx + 1, expy - dim.asc + 1, dim.wid - 3,
|
pi.pain.rectangle(expx, expy - dim.asc + 1, dim.wid - 3,
|
||||||
dim.height() - 2, Color_mathmacroframe);
|
dim.height() - 2, Color_mathmacroframe);
|
||||||
drawMarkers2(pi, expx, expy);
|
|
||||||
} else {
|
} else {
|
||||||
bool drawBox = lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_INLINE_BOX;
|
bool drawBox = lyxrc.macro_edit_style == LyXRC::MACRO_EDIT_INLINE_BOX;
|
||||||
|
|
||||||
@ -725,10 +746,6 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const
|
|||||||
dim.height(), Color_mathmacroframe);
|
dim.height(), Color_mathmacroframe);
|
||||||
} else
|
} else
|
||||||
d->expanded_.draw(pi, expx, expy);
|
d->expanded_.draw(pi, expx, expy);
|
||||||
|
|
||||||
if (!drawBox)
|
|
||||||
drawMarkers(pi, x, y);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// edit mode changed?
|
// edit mode changed?
|
||||||
|
@ -37,6 +37,7 @@ public:
|
|||||||
///
|
///
|
||||||
virtual MathMacro const * asMacro() const { return this; }
|
virtual MathMacro const * asMacro() const { return this; }
|
||||||
///
|
///
|
||||||
|
marker_type marker() const;
|
||||||
/// If the macro is in normal edit mode, dissolve its contents in
|
/// If the macro is in normal edit mode, dissolve its contents in
|
||||||
/// the row. Otherwise, just insert the inset.
|
/// the row. Otherwise, just insert the inset.
|
||||||
bool addToMathRow(MathRow &, MetricsInfo & mi) const;
|
bool addToMathRow(MathRow &, MetricsInfo & mi) const;
|
||||||
@ -44,9 +45,6 @@ public:
|
|||||||
void draw(PainterInfo & pi, int x, int y) const;
|
void draw(PainterInfo & pi, int x, int y) const;
|
||||||
/// draw selection background
|
/// draw selection background
|
||||||
void drawSelection(PainterInfo & pi, int x, int y) const;
|
void drawSelection(PainterInfo & pi, int x, int y) const;
|
||||||
/// draw decorations.
|
|
||||||
void drawDecoration(PainterInfo & pi, int x, int y) const
|
|
||||||
{ drawMarkers2(pi, x, y); }
|
|
||||||
///
|
///
|
||||||
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
void metrics(MetricsInfo & mi, Dimension & dim) const;
|
||||||
/// was the macro in edit mode when computing metrics?
|
/// was the macro in edit mode when computing metrics?
|
||||||
|
@ -269,14 +269,12 @@ Inset * InsetMathWrapper::clone() const
|
|||||||
void InsetMathWrapper::metrics(MetricsInfo & mi, Dimension & dim) const
|
void InsetMathWrapper::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||||
{
|
{
|
||||||
value_->metrics(mi, dim);
|
value_->metrics(mi, dim);
|
||||||
//metricsMarkers2(mi, dim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetMathWrapper::draw(PainterInfo & pi, int x, int y) const
|
void InsetMathWrapper::draw(PainterInfo & pi, int x, int y) const
|
||||||
{
|
{
|
||||||
value_->draw(pi, x, y);
|
value_->draw(pi, x, y);
|
||||||
//drawMarkers(pi, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,8 @@ namespace lyx {
|
|||||||
|
|
||||||
MathRow::Element::Element(MetricsInfo const & mi, Type t, MathClass mc)
|
MathRow::Element::Element(MetricsInfo const & mi, Type t, MathClass mc)
|
||||||
: type(t), mclass(mc), before(0), after(0), macro_nesting(mi.base.macro_nesting),
|
: type(t), mclass(mc), before(0), after(0), macro_nesting(mi.base.macro_nesting),
|
||||||
inset(0), compl_unique_to(0), macro(0), color(Color_red)
|
marker(InsetMath::NO_MARKER), inset(0), compl_unique_to(0),
|
||||||
|
macro(0), color(Color_red)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -64,28 +65,40 @@ MathRow::MathRow(MetricsInfo & mi, MathData const * ar)
|
|||||||
/* Do spacing only in math mode. This test is a bit clumsy,
|
/* Do spacing only in math mode. This test is a bit clumsy,
|
||||||
* but it is used in other places for guessing the current mode.
|
* but it is used in other places for guessing the current mode.
|
||||||
*/
|
*/
|
||||||
if (!isMathFont(mi.base.fontname))
|
bool const dospacing = isMathFont(mi.base.fontname);
|
||||||
return;
|
|
||||||
|
|
||||||
// update classes
|
// update classes
|
||||||
for (int i = 1 ; i != static_cast<int>(elements_.size()) - 1 ; ++i) {
|
if (dospacing) {
|
||||||
if (elements_[i].mclass == MC_UNKNOWN)
|
for (int i = 1 ; i != static_cast<int>(elements_.size()) - 1 ; ++i) {
|
||||||
continue;
|
if (elements_[i].mclass != MC_UNKNOWN)
|
||||||
update_class(elements_[i].mclass, elements_[before(i)].mclass,
|
update_class(elements_[i].mclass, elements_[before(i)].mclass,
|
||||||
elements_[after(i)].mclass);
|
elements_[after(i)].mclass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set spacing
|
// set spacing
|
||||||
// We go to the end to handle spacing at the end of equation
|
// We go to the end to handle spacing at the end of equation
|
||||||
for (int i = 1 ; i != static_cast<int>(elements_.size()) ; ++i) {
|
for (int i = 1 ; i != static_cast<int>(elements_.size()) ; ++i) {
|
||||||
if (elements_[i].mclass == MC_UNKNOWN)
|
Element & e = elements_[i];
|
||||||
|
|
||||||
|
if (e.mclass == MC_UNKNOWN)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Element & bef = elements_[before(i)];
|
Element & bef = elements_[before(i)];
|
||||||
int spc = class_spacing(bef.mclass, elements_[i].mclass, mi.base);
|
if (dospacing) {
|
||||||
bef.after = spc / 2;
|
int spc = class_spacing(bef.mclass, e.mclass, mi.base);
|
||||||
// this is better than spc / 2 to avoid rounding problems
|
bef.after += spc / 2;
|
||||||
elements_[i].before = spc - spc / 2;
|
// this is better than spc / 2 to avoid rounding problems
|
||||||
|
e.before += spc - spc / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally reserve space for markers
|
||||||
|
if (bef.marker != Inset::NO_MARKER)
|
||||||
|
bef.after = max(bef.after, 1);
|
||||||
|
if (e.marker != Inset::NO_MARKER)
|
||||||
|
e.before = max(e.before, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not lose spacing allocated to extremities
|
// Do not lose spacing allocated to extremities
|
||||||
if (!elements_.empty()) {
|
if (!elements_.empty()) {
|
||||||
elements_[after(0)].before += elements_.front().after;
|
elements_[after(0)].before += elements_.front().after;
|
||||||
@ -166,6 +179,18 @@ void MathRow::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handle vertical space for markers
|
||||||
|
switch(e.marker) {
|
||||||
|
case InsetMath::NO_MARKER:
|
||||||
|
break;
|
||||||
|
case InsetMath::MARKER:
|
||||||
|
++d.des;
|
||||||
|
break;
|
||||||
|
case InsetMath::MARKER2:
|
||||||
|
++d.asc;
|
||||||
|
++d.des;
|
||||||
|
}
|
||||||
|
|
||||||
if (!d.empty()) {
|
if (!d.empty()) {
|
||||||
dim += d;
|
dim += d;
|
||||||
// Now add the dimension to current macros and arguments.
|
// Now add the dimension to current macros and arguments.
|
||||||
@ -185,6 +210,43 @@ void MathRow::metrics(MetricsInfo & mi, Dimension & dim) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
void drawMarkers(PainterInfo const & pi, MathRow::Element const & e, int const x, int const y)
|
||||||
|
{
|
||||||
|
if (e.marker == InsetMath::NO_MARKER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CoordCache const & coords = pi.base.bv->coordCache();
|
||||||
|
Dimension const dim = coords.getInsets().dim(e.inset);
|
||||||
|
|
||||||
|
// the marker is before/after the inset. Normally some space has been reserved already.
|
||||||
|
int const l = x + e.before - 1;
|
||||||
|
int const r = x + dim.width() - e.after;
|
||||||
|
|
||||||
|
// Duplicated from Inset.cpp and adapted. It is believed that the
|
||||||
|
// Inset version should die eventually
|
||||||
|
ColorCode pen_color = e.inset->mouseHovered(pi.base.bv) || e.inset->editing(pi.base.bv)?
|
||||||
|
Color_mathframe : Color_mathcorners;
|
||||||
|
|
||||||
|
int const d = y + dim.descent();
|
||||||
|
pi.pain.line(l, d - 3, l, d, pen_color);
|
||||||
|
pi.pain.line(r, d - 3, r, d, pen_color);
|
||||||
|
pi.pain.line(l, d, l + 3, d, pen_color);
|
||||||
|
pi.pain.line(r - 3, d, r, d, pen_color);
|
||||||
|
|
||||||
|
if (e.marker == InsetMath::MARKER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int const a = y - dim.ascent();
|
||||||
|
pi.pain.line(l, a + 3, l, a, pen_color);
|
||||||
|
pi.pain.line(r, a + 3, r, a, pen_color);
|
||||||
|
pi.pain.line(l, a, l + 3, a, pen_color);
|
||||||
|
pi.pain.line(r - 3, a, r, a, pen_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void MathRow::draw(PainterInfo & pi, int x, int const y) const
|
void MathRow::draw(PainterInfo & pi, int x, int const y) const
|
||||||
{
|
{
|
||||||
CoordCache & coords = pi.base.bv->coordCache();
|
CoordCache & coords = pi.base.bv->coordCache();
|
||||||
@ -202,11 +264,14 @@ void MathRow::draw(PainterInfo & pi, int x, int const y) const
|
|||||||
e.inset->draw(pi, x + e.before, y);
|
e.inset->draw(pi, x + e.before, y);
|
||||||
coords.insets().add(e.inset, x, y);
|
coords.insets().add(e.inset, x, y);
|
||||||
coords.insets().add(e.inset, d);
|
coords.insets().add(e.inset, d);
|
||||||
|
drawMarkers(pi, e, x, y);
|
||||||
x += d.wid;
|
x += d.wid;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case BEG_MACRO:
|
case BEG_MACRO:
|
||||||
coords.insets().add(e.macro, x, y);
|
coords.insets().add(e.macro, x, y);
|
||||||
|
|
||||||
|
drawMarkers(pi, e, x, y);
|
||||||
break;
|
break;
|
||||||
case BEG_ARG:
|
case BEG_ARG:
|
||||||
coords.arrays().add(e.ar, x, y);
|
coords.arrays().add(e.ar, x, y);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#ifndef MATH_ROW_H
|
#ifndef MATH_ROW_H
|
||||||
#define MATH_ROW_H
|
#define MATH_ROW_H
|
||||||
|
|
||||||
|
#include "InsetMath.h"
|
||||||
#include "MathClass.h"
|
#include "MathClass.h"
|
||||||
|
|
||||||
#include "ColorCode.h"
|
#include "ColorCode.h"
|
||||||
@ -69,6 +70,8 @@ public:
|
|||||||
int before, after;
|
int before, after;
|
||||||
/// count wether the current mathdata is nested in macro(s)
|
/// count wether the current mathdata is nested in macro(s)
|
||||||
int macro_nesting;
|
int macro_nesting;
|
||||||
|
/// Marker type
|
||||||
|
InsetMath::marker_type marker;
|
||||||
|
|
||||||
/// When type is INSET
|
/// When type is INSET
|
||||||
/// the math inset
|
/// the math inset
|
||||||
|
Loading…
Reference in New Issue
Block a user