mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
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:
parent
f3b70fd2cd
commit
d4b56646b4
@ -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;
|
||||
@ -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
|
||||
|
@ -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.
|
||||
|
@ -351,9 +351,9 @@ bool InsetMathHull::idxLast(Cursor & cur) const
|
||||
|
||||
// FIXME: InsetMathGrid should be changed to let the real column alignment be
|
||||
// given by a virtual method like displayColAlign, because the values produced
|
||||
// by defaultColAlign can be invalidated by lfuns such as add-column. I suspect
|
||||
// that for the moment the values produced by defaultColAlign are not used,
|
||||
// notably because alignment is not implemented in the LyXHTML output.
|
||||
// by defaultColAlign can be invalidated by lfuns such as add-column. For the
|
||||
// moment the values produced by defaultColAlign are not used, notably because
|
||||
// alignment is not implemented in the LyXHTML output.
|
||||
char InsetMathHull::defaultColAlign(col_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)
|
||||
{
|
||||
if (type_ == hullAlign || type_ == hullAlignAt)
|
||||
return 0;
|
||||
if (type_ == hullXAlignAt)
|
||||
return (col & 1) ? 20 : 0;
|
||||
if (type_ == hullXXAlignAt || type_ == hullFlAlign)
|
||||
return (col & 1) ? 40 : 0;
|
||||
return 0;
|
||||
return colSpace(type_, col);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
{
|
||||
InsetMathGrid::draw(pi, x, y);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user