Fix the display of column spacing in AMS environments

AMS align environment should have some spacing between odd and even columns.

Add a new virtual method displayColSpace() to InsetMathGrid, InsetMathHull and
InsetMathSplit.
This commit is contained in:
Guillaume Munch 2015-12-20 20:56:34 +00:00 committed by Uwe Stöhr
parent 360992cb9f
commit 1676b69cf7
6 changed files with 66 additions and 4 deletions

View File

@ -486,7 +486,7 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & dim) const
colinfo_[col].offset_ =
colinfo_[col - 1].offset_ +
colinfo_[col - 1].width_ +
colinfo_[col - 1].skip_ +
displayColSpace(col - 1) +
colsep() +
colinfo_[col].lines_ * vlinesep();
}
@ -508,7 +508,7 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & dim) const
int const nextoffset =
colinfo_[first].offset_ +
wid +
colinfo_[last].skip_ +
displayColSpace(last) +
colsep() +
colinfo_[last+1].lines_ * vlinesep();
int const dx = nextoffset - colinfo_[last+1].offset_;
@ -741,7 +741,7 @@ void InsetMathGrid::metricsT(TextMetricsInfo const & mi, Dimension & dim) const
colinfo_[col].offset_ =
colinfo_[col - 1].offset_ +
colinfo_[col - 1].width_ +
colinfo_[col - 1].skip_ +
displayColSpace(col - 1) +
1 ; //colsep() +
//colinfo_[col].lines_ * vlinesep();
}
@ -953,7 +953,7 @@ int InsetMathGrid::cellWidth(idx_type idx) const
col_type c2 = c1 + ncellcols(idx);
return colinfo_[c2].offset_
- colinfo_[c1].offset_
- colinfo_[c2].skip_
- displayColSpace(c2)
- colsep()
- colinfo_[c2].lines_ * vlinesep();
}
@ -1378,6 +1378,11 @@ char InsetMathGrid::displayColAlign(idx_type idx) const
}
int InsetMathGrid::displayColSpace(col_type col) const
{
return colinfo_[col].skip_;
}
void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd)
{
//lyxerr << "*** InsetMathGrid: request: " << cmd << endl;
@ -1862,5 +1867,32 @@ char InsetMathGrid::colAlign(HullType type, col_type col)
}
//static
int InsetMathGrid::colSpace(HullType type, col_type col)
{
int alignInterSpace;
switch (type) {
case hullEqnArray:
return 5;
case hullAlign:
alignInterSpace = 20;
break;
case hullAlignAt:
alignInterSpace = 0;
break;
case hullXAlignAt:
alignInterSpace = 40;
break;
case hullXXAlignAt:
case hullFlAlign:
alignInterSpace = 60;
break;
default:
return 0;
}
return (col % 2) ? alignInterSpace : 0;
}
} // namespace lyx

View File

@ -261,8 +261,16 @@ protected:
/// Column alignment for display of cell \p idx.
/// Must not be written to file!
virtual char displayColAlign(idx_type idx) const;
/// Column spacing for display of column \p col.
/// Must not be written to file!
virtual int displayColSpace(col_type col) const;
// The following two functions are used in InsetMathHull and
// InsetMathSplit.
/// The value of a fixed col align for a certain hull type
static char colAlign(HullType type, col_type col);
/// The value of a fixed col spacing for a certain hull type
static int colSpace(HullType type, col_type col);
/// row info.
/// rowinfo_[nrows()] is a dummy row used only for hlines.

View File

@ -382,6 +382,13 @@ char InsetMathHull::displayColAlign(idx_type idx) const
}
int InsetMathHull::displayColSpace(col_type col) const
{
return colSpace(type_, col);
}
//FIXME: This has probably no effect and can be removed.
int InsetMathHull::defaultColSpace(col_type col)
{
if (type_ == hullAlign || type_ == hullAlignAt)

View File

@ -111,6 +111,8 @@ public:
///
int defaultColSpace(col_type col);
///
int displayColSpace(col_type col) const;
///
char defaultColAlign(col_type col);
///
char displayColAlign(idx_type idx) const;

View File

@ -83,6 +83,17 @@ char InsetMathSplit::displayColAlign(idx_type idx) const
}
int InsetMathSplit::displayColSpace(col_type col) const
{
if (name_ == "split" || name_ == "aligned" || name_ == "align")
return colSpace(hullAlign, col);
if (name_ == "alignedat")
return colSpace(hullAlignAt, col);
return 0;
}
void InsetMathSplit::draw(PainterInfo & pi, int x, int y) const
{
InsetMathGrid::draw(pi, x, y);

View File

@ -41,6 +41,8 @@ public:
///
int defaultColSpace(col_type) { return 0; }
///
int displayColSpace(col_type col) const;
///
char defaultColAlign(col_type);
///
char displayColAlign(idx_type idx) const;