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
parent 06a62c4894
commit 1adb4efe60
6 changed files with 70 additions and 14 deletions

View File

@ -486,7 +486,7 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & dim) const
colinfo_[col].offset_ = colinfo_[col].offset_ =
colinfo_[col - 1].offset_ + colinfo_[col - 1].offset_ +
colinfo_[col - 1].width_ + colinfo_[col - 1].width_ +
colinfo_[col - 1].skip_ + displayColSpace(col - 1) +
colsep() + colsep() +
colinfo_[col].lines_ * vlinesep(); colinfo_[col].lines_ * vlinesep();
} }
@ -508,7 +508,7 @@ void InsetMathGrid::metrics(MetricsInfo & mi, Dimension & dim) const
int const nextoffset = int const nextoffset =
colinfo_[first].offset_ + colinfo_[first].offset_ +
wid + wid +
colinfo_[last].skip_ + displayColSpace(last) +
colsep() + colsep() +
colinfo_[last+1].lines_ * vlinesep(); colinfo_[last+1].lines_ * vlinesep();
int const dx = nextoffset - colinfo_[last+1].offset_; 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].offset_ =
colinfo_[col - 1].offset_ + colinfo_[col - 1].offset_ +
colinfo_[col - 1].width_ + colinfo_[col - 1].width_ +
colinfo_[col - 1].skip_ + displayColSpace(col - 1) +
1 ; //colsep() + 1 ; //colsep() +
//colinfo_[col].lines_ * vlinesep(); //colinfo_[col].lines_ * vlinesep();
} }
@ -953,7 +953,7 @@ int InsetMathGrid::cellWidth(idx_type idx) const
col_type c2 = c1 + ncellcols(idx); col_type c2 = c1 + ncellcols(idx);
return colinfo_[c2].offset_ return colinfo_[c2].offset_
- colinfo_[c1].offset_ - colinfo_[c1].offset_
- colinfo_[c2].skip_ - displayColSpace(c2)
- colsep() - colsep()
- colinfo_[c2].lines_ * vlinesep(); - 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) void InsetMathGrid::doDispatch(Cursor & cur, FuncRequest & cmd)
{ {
//lyxerr << "*** InsetMathGrid: request: " << cmd << endl; //lyxerr << "*** InsetMathGrid: request: " << cmd << endl;
@ -1851,5 +1856,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 } // namespace lyx

View File

@ -261,8 +261,16 @@ protected:
/// Column alignment for display of cell \p idx. /// Column alignment for display of cell \p idx.
/// Must not be written to file! /// Must not be written to file!
virtual char displayColAlign(idx_type idx) const; 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 /// The value of a fixed col align for a certain hull type
static char colAlign(HullType type, col_type col); 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. /// row info.
/// rowinfo_[nrows()] is a dummy row used only for hlines. /// rowinfo_[nrows()] is a dummy row used only for hlines.

View File

@ -351,9 +351,9 @@ bool InsetMathHull::idxLast(Cursor & cur) const
// FIXME: InsetMathGrid should be changed to let the real column alignment be // FIXME: InsetMathGrid should be changed to let the real column alignment be
// given by a virtual method like displayColAlign, because the values produced // given by a virtual method like displayColAlign, because the values produced
// by defaultColAlign can be invalidated by lfuns such as add-column. I suspect // by defaultColAlign can be invalidated by lfuns such as add-column. For the
// that for the moment the values produced by defaultColAlign are not used, // moment the values produced by defaultColAlign are not used, notably because
// notably because alignment is not implemented in the LyXHTML output. // alignment is not implemented in the LyXHTML output.
char InsetMathHull::defaultColAlign(col_type col) char InsetMathHull::defaultColAlign(col_type col)
{ {
return colAlign(type_, col); return colAlign(type_, col);
@ -386,15 +386,16 @@ char InsetMathHull::displayColAlign(idx_type idx) const
} }
int InsetMathHull::displayColSpace(col_type col) const
{
return colSpace(type_, col);
}
// FIXME: same comment as for defaultColAlign applies.
int InsetMathHull::defaultColSpace(col_type col) int InsetMathHull::defaultColSpace(col_type col)
{ {
if (type_ == hullAlign || type_ == hullAlignAt) return colSpace(type_, col);
return 0;
if (type_ == hullXAlignAt)
return (col & 1) ? 20 : 0;
if (type_ == hullXXAlignAt || type_ == hullFlAlign)
return (col & 1) ? 40 : 0;
return 0;
} }

View File

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

View File

@ -87,6 +87,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 void InsetMathSplit::draw(PainterInfo & pi, int x, int y) const
{ {
InsetMathGrid::draw(pi, x, y); InsetMathGrid::draw(pi, x, y);

View File

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