]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathData.cpp
de.po
[lyx.git] / src / mathed / MathData.cpp
index 482d50636c0143f862f1ddfe6c6975bd7174d291..c3b3faa2395f38731b74031ca11dc9be3929047f 100644 (file)
@@ -52,6 +52,14 @@ MathData::MathData(Buffer * buf, const_iterator from, const_iterator to)
 {}
 
 
+void MathData::setBuffer(Buffer & b)
+{
+       buffer_ = &b;
+       for (MathAtom & at : *this)
+               at.nucleus()->setBuffer(b);
+}
+
+
 MathAtom & MathData::operator[](pos_type pos)
 {
        LBUFERR(pos < size());
@@ -259,12 +267,24 @@ bool isInside(DocIterator const & it, MathData const & ar,
 #endif
 
 
+int MathData::caretAscent(BufferView const * bv) const
+{
+       return mrow_cache_[bv].caret_ascent;
+}
+
+
+int MathData::caretDescent(BufferView const * bv) const
+{
+       return mrow_cache_[bv].caret_descent;
+}
+
+
 void MathData::metrics(MetricsInfo & mi, Dimension & dim, bool tight) const
 {
        frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
        BufferView * bv = mi.base.bv;
        int const Iascent = fm.dimension('I').ascent();
-       int xascent = fm.dimension('x').ascent();
+       int xascent = fm.xHeight();
        if (xascent >= Iascent)
                xascent = (2 * Iascent) / 3;
        minasc_ = xascent;
@@ -274,14 +294,13 @@ void MathData::metrics(MetricsInfo & mi, Dimension & dim, bool tight) const
 
        MathRow mrow(mi, this);
        mrow.metrics(mi, dim);
-       mrow_cache_[bv] = mrow;
        kerning_ = mrow.kerning(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'));
+               dim.asc = max(dim.asc, fm.xHeight());
        else {
                dim.asc = max(dim.asc, fm.maxAscent());
                dim.des = max(dim.des, fm.maxDescent());
@@ -289,12 +308,11 @@ void MathData::metrics(MetricsInfo & mi, Dimension & dim, bool tight) const
 
        // This is one of the the few points where the drawing font is known,
        // so that we can set the caret vertical dimensions.
-       Cursor & cur = bv->cursor();
-       if (cur.inMathed() && &cur.cell() == this)
-               bv->setCaretAscentDescent(min(dim.asc, fm.maxAscent()),
-                                         min(dim.des, fm.maxDescent()));
+       mrow.caret_ascent = min(dim.asc, fm.maxAscent());
+       mrow.caret_descent = min(dim.des, fm.maxDescent());
 
-       // Cache the dimension.
+       // Cache row and dimension.
+       mrow_cache_[bv] = mrow;
        bv->coordCache().arrays().add(this, dim);
 }