]> git.lyx.org Git - features.git/commitdiff
Makes caret height adapt to context in mathed.
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Tue, 20 Mar 2018 15:41:59 +0000 (16:41 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 4 Apr 2018 13:11:13 +0000 (15:11 +0200)
Set current cursor font in MathData::metrics()

Also make sure that caret dimension in mathed is not larger than inset
height.

src/BufferView.cpp
src/mathed/MathData.cpp

index 0e30cc795c4f88219a5f4fa74119159562ce0f51..dafcc9d19428517e227a238a8f2e8219b103b847 100644 (file)
@@ -2965,8 +2965,16 @@ void BufferView::caretPosAndHeight(Point & p, int & h) const
        Cursor const & cur = cursor();
        Font const font = cur.real_current_font;
        frontend::FontMetrics const & fm = theFontMetrics(font);
-       int const asc = fm.maxAscent();
-       int const des = fm.maxDescent();
+       int asc = fm.maxAscent();
+       int des = fm.maxDescent();
+       // If the cursor is in mathed and it has cached metrics, reduce
+       // the height to fit the inner cell (mathed cells are tight
+       // vertically).
+       if (cur.inMathed() && coordCache().getArrays().hasDim(&cur.cell())) {
+               Dimension const dim = cur.cell().dimension(*this);
+               asc = min(asc, dim.asc);
+               des = min(des, dim.des);
+       }
        h = asc + des;
        p = getPos(cur);
        p.y_ -= asc;
index d242a86f72c2d228c16a6a98b399e9457d4251a9..96aef294918da19d5978cc72541cbb21676ec753 100644 (file)
@@ -261,6 +261,15 @@ bool isInside(DocIterator const & it, MathData const & ar,
 
 void MathData::metrics(MetricsInfo & mi, Dimension & dim) const
 {
+       // This is the only point where the drawing font is known.
+       // We set cursor current font so that the blinking caret height
+       // adapts to math font.
+       Cursor & cur = mi.base.bv->cursor();
+       if (cur.inMathed() && &cur.cell() == this) {
+               cur.current_font.fontInfo() = mi.base.font;
+               cur.real_current_font.fontInfo() = mi.base.font;
+       }
+
        frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
        dim = fm.dimension('I');
        int xascent = fm.dimension('x').ascent();