From 1adb4efe60ef3123efbeaf9d9e9bce4a22e1abad Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Sun, 20 Dec 2015 20:56:34 +0000 Subject: [PATCH] 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. --- src/mathed/InsetMathGrid.cpp | 40 +++++++++++++++++++++++++++++++---- src/mathed/InsetMathGrid.h | 8 +++++++ src/mathed/InsetMathHull.cpp | 21 +++++++++--------- src/mathed/InsetMathHull.h | 2 ++ src/mathed/InsetMathSplit.cpp | 11 ++++++++++ src/mathed/InsetMathSplit.h | 2 ++ 6 files changed, 70 insertions(+), 14 deletions(-) diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 2ee5ece9f4..1ff65b2c6d 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -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 diff --git a/src/mathed/InsetMathGrid.h b/src/mathed/InsetMathGrid.h index 709f492b37..7faf938818 100644 --- a/src/mathed/InsetMathGrid.h +++ b/src/mathed/InsetMathGrid.h @@ -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. diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp index 9a5864f314..be10783b7a 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -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); } diff --git a/src/mathed/InsetMathHull.h b/src/mathed/InsetMathHull.h index 3b447c38bd..6578fd3e87 100644 --- a/src/mathed/InsetMathHull.h +++ b/src/mathed/InsetMathHull.h @@ -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; diff --git a/src/mathed/InsetMathSplit.cpp b/src/mathed/InsetMathSplit.cpp index 5929e27303..515dcb0459 100644 --- a/src/mathed/InsetMathSplit.cpp +++ b/src/mathed/InsetMathSplit.cpp @@ -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); diff --git a/src/mathed/InsetMathSplit.h b/src/mathed/InsetMathSplit.h index 1b2aa239e4..122653459f 100644 --- a/src/mathed/InsetMathSplit.h +++ b/src/mathed/InsetMathSplit.h @@ -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;