X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathGrid.cpp;h=291e11de8fcc97d3b56abd4fa7d27564ebcb8514;hb=4c724a6072013247ac178f0acec06825585c6c55;hp=2ee5ece9f44fd9b00049d4d921210b4b9fe5e7f6;hpb=06a62c48941fcfe32f74f629c3f072401efe77b2;p=lyx.git diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index 2ee5ece9f4..291e11de8f 100644 --- a/src/mathed/InsetMathGrid.cpp +++ b/src/mathed/InsetMathGrid.cpp @@ -26,6 +26,7 @@ #include "FuncStatus.h" #include "Cursor.h" #include "FuncRequest.h" +#include "LaTeXFeatures.h" #include "frontends/Clipboard.h" #include "frontends/Painter.h" @@ -486,7 +487,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 +509,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_; @@ -617,7 +618,7 @@ void InsetMathGrid::drawWithMargin(PainterInfo & pi, int x, int y, col_type const c = col(idx); if (r > 0 && r < nrows()) { for (unsigned int i = 0; i < rowinfo_[r].lines_; ++i) { - int yy = y + rowinfo_[r].offset_ + int const yy = y + rowinfo_[r].offset_ - rowinfo_[r].ascent_ - i * hlinesep() - hlinesep()/2 - rowsep()/2; @@ -630,14 +631,17 @@ void InsetMathGrid::drawWithMargin(PainterInfo & pi, int x, int y, } if (c > 0 && c < ncols()) { for (unsigned int i = 0; i < colinfo_[c].lines_; ++i) { - int xx = x + lmargin + int const xx = x + lmargin + colinfo_[c].offset_ - i * vlinesep() - vlinesep()/2 - colsep()/2; - pi.pain.line(xx, - rowinfo_[r].offset_ - rowinfo_[r].ascent_, - xx, - rowinfo_[r].offset_ + rowinfo_[r].descent_, + int top_offset; + if (r > 0) + top_offset = rowinfo_[r - 1].offset_ + rowinfo_[r - 1].descent_; + else + top_offset = rowinfo_[0].offset_- rowinfo_[0].ascent_; + pi.pain.line(xx, y + top_offset, + xx, y + rowinfo_[r].offset_ + rowinfo_[r].descent_, Color_foreground); } } @@ -741,7 +745,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 +957,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(); } @@ -1237,6 +1241,20 @@ void InsetMathGrid::htmlize(HtmlStream & os) const } +void InsetMathGrid::validate(LaTeXFeatures & features) const +{ + if (features.runparams().math_flavor == OutputParams::MathAsHTML + && (nrows() > 1 || ncols() > 1)) { + // CSS taken from InsetMathCases + features.addCSSSnippet( + "table.mathtable{display: inline-block; text-align: center; border: none;" + "border-left: thin solid black; vertical-align: middle; padding-left: 0.5ex;}\n" + "table.mathtable td {text-align: left; border: none;}"); + } + InsetMathNest::validate(features); +} + + void InsetMathGrid::write(WriteStream & os) const { write(os, 0, 0, nrows(), ncols()); @@ -1378,6 +1396,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; @@ -1845,11 +1868,51 @@ char InsetMathGrid::colAlign(HullType type, col_type col) case hullFlAlign: return "rl"[col & 1]; - default: + case hullUnknown: + case hullNone: + case hullSimple: + case hullEquation: + case hullRegexp: return 'c'; } + // avoid warning + return 'c'; } +//static +int InsetMathGrid::colSpace(HullType type, col_type col) +{ + int alignInterSpace = 0; + switch (type) { + case hullUnknown: + case hullNone: + case hullSimple: + case hullEquation: + case hullMultline: + case hullGather: + case hullRegexp: + return 0; + + 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; + } + return (col % 2) ? alignInterSpace : 0; +} + } // namespace lyx