From bb5470b5d1ec1b2f7394164686d6035a0c4bce0f 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 | 7 ++++++ src/mathed/InsetMathHull.h | 2 ++ src/mathed/InsetMathSplit.cpp | 11 ++++++++++ src/mathed/InsetMathSplit.h | 2 ++ 6 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 00d9a6f20f..d8e5925b62 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; @@ -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 diff --git a/src/mathed/InsetMathGrid.h b/src/mathed/InsetMathGrid.h index 6199b7dafc..e99431083e 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 cce029f6ce..b6cf474d30 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -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) diff --git a/src/mathed/InsetMathHull.h b/src/mathed/InsetMathHull.h index 9598ad4281..084fff67c0 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 f85e664eef..07e78f41a2 100644 --- a/src/mathed/InsetMathSplit.cpp +++ b/src/mathed/InsetMathSplit.cpp @@ -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); diff --git a/src/mathed/InsetMathSplit.h b/src/mathed/InsetMathSplit.h index 6136b6faf6..0f47e38bf3 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;