]> git.lyx.org Git - features.git/blobdiff - src/mathed/MathData.cpp
Better mechanism for setting cell cell height
[features.git] / src / mathed / MathData.cpp
index d242a86f72c2d228c16a6a98b399e9457d4251a9..719065d0cef2198e30f74870a6e10b54226e69c6 100644 (file)
@@ -259,13 +259,13 @@ bool isInside(DocIterator const & it, MathData const & ar,
 #endif
 
 
-void MathData::metrics(MetricsInfo & mi, Dimension & dim) const
+void MathData::metrics(MetricsInfo & mi, Dimension & dim, bool tight) const
 {
        frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
-       dim = fm.dimension('I');
+       int const Iascent = fm.dimension('I').ascent();
        int xascent = fm.dimension('x').ascent();
-       if (xascent >= dim.asc)
-               xascent = (2 * dim.asc) / 3;
+       if (xascent >= Iascent)
+               xascent = (2 * Iascent) / 3;
        minasc_ = xascent;
        mindes_ = (3 * xascent) / 4;
        slevel_ = (4 * xascent) / 5;
@@ -276,6 +276,16 @@ void MathData::metrics(MetricsInfo & mi, Dimension & dim) const
        mrow_cache_[mi.base.bv] = mrow;
        kerning_ = mrow.kerning(mi.base.bv);
 
+       // Set a minimal ascent/descent for the cell
+       if (tight)
+               // FIXME: this is the minimal ascent seen empirically, check
+               // what the TeXbook says.
+               dim.asc = max(dim.asc, fm.ascent('x'));
+       else {
+               dim.asc = max(dim.asc, fm.maxAscent());
+               dim.des = max(dim.des, fm.maxDescent());
+       }
+
        // Cache the dimension.
        mi.base.bv->coordCache().arrays().add(this, dim);
 }