commit 097ab41c49d6f8c6e4d2519663e118a3f2667b4f
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Mon Jul 18 12:37:14 2016 +0200

    Remove mutable variable InsetTabular::offset_valign_
    
    Introduce instead a function Tabular::offsetVAlignment() that does the
    same thing.
---
 src/insets/InsetTabular.cpp |   54 +++++++++++++++++++++++-------------------
 src/insets/InsetTabular.h   |    6 ++--
 2 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp
index aa7b01b..2f2c372 100644
--- a/src/insets/InsetTabular.cpp
+++ b/src/insets/InsetTabular.cpp
@@ -1322,6 +1322,27 @@ Tabular::getVAlignment(idx_type cell, bool onlycolumn) 
const
 }
 
 
+int Tabular::offsetVAlignment() const
+{
+       // for top-alignment the first horizontal table line must be exactly at
+       // the position of the base line of the surrounding text line
+       // for bottom alignment, the same is for the last table line
+       int offset_valign = 0;
+       switch (tabular_valignment) {
+       case Tabular::LYX_VALIGN_BOTTOM:
+               offset_valign = rowAscent(0) - height();
+               break;
+       case Tabular::LYX_VALIGN_MIDDLE:
+               offset_valign = (- height()) / 2 + rowAscent(0);
+               break;
+       case Tabular::LYX_VALIGN_TOP:
+               offset_valign = rowAscent(0);
+               break;
+       }
+       return offset_valign;
+}
+
+
 Length const Tabular::getPWidth(idx_type cell) const
 {
        if (isMultiColumn(cell))
@@ -3487,14 +3508,14 @@ docstring InsetTableCell::xhtml(XHTMLStream & xs, 
OutputParams const & rp) const
 InsetTabular::InsetTabular(Buffer * buf, row_type rows,
                           col_type columns)
        : Inset(buf), tabular(buf, max(rows, row_type(1)), max(columns, 
col_type(1))),
-         offset_valign_(0), rowselect_(false), colselect_(false)
+         rowselect_(false), colselect_(false)
 {
 }
 
 
 InsetTabular::InsetTabular(InsetTabular const & tab)
        : Inset(tab), tabular(tab.tabular),
-         offset_valign_(0), rowselect_(false), colselect_(false)
+         rowselect_(false), colselect_(false)
 {
 }
 
@@ -3581,7 +3602,7 @@ void InsetTabular::read(Lexer & lex)
 int InsetTabular::rowFromY(Cursor & cur, int y) const
 {
        // top y coordinate of tabular
-       int h = yo(cur.bv()) - tabular.rowAscent(0) + offset_valign_;
+       int h = yo(cur.bv()) - tabular.rowAscent(0) + 
tabular.offsetVAlignment();
        row_type r = 0;
        for (; r < tabular.nrows() && y > h; ++r)
                h += tabular.rowAscent(r) + tabular.rowDescent(r)
@@ -3690,23 +3711,8 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & 
dim) const
                tabular.setRowDescent(r, maxdes + ADD_TO_HEIGHT + bottom_space);
        }
 
-       // for top-alignment the first horizontal table line must be exactly at
-       // the position of the base line of the surrounding text line
-       // for bottom alignment, the same is for the last table line
-       switch (tabular.tabular_valignment) {
-       case Tabular::LYX_VALIGN_BOTTOM:
-               offset_valign_ = tabular.rowAscent(0) - tabular.height();
-               break;
-       case Tabular::LYX_VALIGN_MIDDLE:
-               offset_valign_ = (- tabular.height()) / 2 + 
tabular.rowAscent(0);
-               break;
-       case Tabular::LYX_VALIGN_TOP:
-               offset_valign_ = tabular.rowAscent(0);
-               break;
-       }
-
        tabular.updateColumnWidths();
-       dim.asc = tabular.rowAscent(0) - offset_valign_;
+       dim.asc = tabular.rowAscent(0) - tabular.offsetVAlignment();
        dim.des = tabular.height() - dim.asc;
        dim.wid = tabular.width() + 2 * ADD_TO_TABULAR_WIDTH;
 }
@@ -3758,7 +3764,7 @@ void InsetTabular::draw(PainterInfo & pi, int x, int y) 
const
 
        idx_type idx = 0;
 
-       int yy = y + offset_valign_;
+       int yy = y + tabular.offsetVAlignment();
        for (row_type r = 0; r < tabular.nrows(); ++r) {
                int nx = x;
                for (col_type c = 0; c < tabular.ncols(); ++c) {
@@ -3793,7 +3799,7 @@ void InsetTabular::draw(PainterInfo & pi, int x, int y) 
const
 void InsetTabular::drawBackground(PainterInfo & pi, int x, int y) const
 {
        x += ADD_TO_TABULAR_WIDTH;
-       y += offset_valign_ - tabular.rowAscent(0);
+       y += tabular.offsetVAlignment() - tabular.rowAscent(0);
        pi.pain.fillRectangle(x, y, tabular.width(), tabular.height(),
                pi.backgroundColor(this));
 }
@@ -3830,7 +3836,7 @@ void InsetTabular::drawSelection(PainterInfo & pi, int x, 
int y) const
                                }
                                int const w = tabular.cellWidth(cell);
                                int const h = tabular.cellHeight(cell);
-                               int const yy = y - tabular.rowAscent(r) + 
offset_valign_;
+                               int const yy = y - tabular.rowAscent(r) + 
tabular.offsetVAlignment();
                                if (isCellSelected(cur, r, c))
                                        pi.pain.fillRectangle(xx, yy, w, h, 
Color_selection);
                                xx += w;
@@ -3968,7 +3974,7 @@ bool InsetTabular::hitSelectRow(BufferView const & bv, 
int x) const
 
 bool InsetTabular::hitSelectColumn(BufferView const & bv, int y) const
 {
-       int const y0 = yo(bv) - tabular.rowAscent(0) + offset_valign_;
+       int const y0 = yo(bv) - tabular.rowAscent(0) + 
tabular.offsetVAlignment();
        // FIXME: using ADD_TO_TABULAR_WIDTH is not really correct since
        // there is no margin added vertically to tabular insets.
        // However, it works for now.
@@ -5116,7 +5122,7 @@ void InsetTabular::cursorPos(BufferView const & bv,
        // y offset     correction
        y += cellYPos(sl.idx());
        y += tabular.textVOffset(sl.idx());
-       y += offset_valign_;
+       y += tabular.offsetVAlignment();
 
        // x offset correction
        x += cellXPos(sl.idx());
diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h
index bc0d203..9e0c41e 100644
--- a/src/insets/InsetTabular.h
+++ b/src/insets/InsetTabular.h
@@ -470,6 +470,9 @@ public:
        ///
        VAlignment getVAlignment(idx_type cell,
                                 bool onlycolumn = false) const;
+       /// The vertical offset of the table due to the vertical
+       /// alignment with respect to the baseline.
+       int offsetVAlignment() const;
        ///
        Length const getPWidth(idx_type cell) const;
        ///
@@ -1055,9 +1058,6 @@ private:
        bool oneCellHasRotationState(bool rotated,
                                row_type row_start, row_type row_end,
                                col_type col_start, col_type col_end) const;
-       /// The vertical offset of the table due to the vertical
-       /// alignment with respect to the baseline.
-       mutable int offset_valign_;
        /// true when selecting rows with the mouse
        bool rowselect_;
        /// true when selecting columns with the mouse

Reply via email to