]> git.lyx.org Git - features.git/commitdiff
Fix the display of column spacing in AMS environments
authorGuillaume Munch <gm@lyx.org>
Sun, 20 Dec 2015 20:56:34 +0000 (20:56 +0000)
committerRichard Heck <rgheck@lyx.org>
Sat, 28 May 2016 21:42:31 +0000 (17:42 -0400)
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
src/mathed/InsetMathGrid.h
src/mathed/InsetMathHull.cpp
src/mathed/InsetMathHull.h
src/mathed/InsetMathSplit.cpp
src/mathed/InsetMathSplit.h

index 2ee5ece9f44fd9b00049d4d921210b4b9fe5e7f6..1ff65b2c6de3c15d92957af77c6108ccbb297b15 100644 (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;
@@ -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
index 709f492b379b602a1f8197cd50978d582ea30f2b..7faf938818cb8227a02428b970c57e3c8d7f17db 100644 (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.
index 9a5864f314a0b0bc43e3cf01d147b3712afe474e..be10783b7aec07f2aab0715f85ced72e3172006b 100644 (file)
@@ -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);
 }
 
 
index 3b447c38bd918655295a2148fcdafc28767e2ea4..6578fd3e87ed0dabbd6a27234249afaed2dccfcc 100644 (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;
index 5929e273030d69c4689a9a195d0afd0788f585d3..515dcb04591f6490a95d962c029ea9ffbf9cdbd5 100644 (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
 {
        InsetMathGrid::draw(pi, x, y);
index 1b2aa239e4b55bb1b65902bab9b394dc24e88c89..122653459fd5134049a5c6f3c61441c9a3228e61 100644 (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;