From c5ca503d92a25dc168f84b9d7c008c390f434667 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 20 Mar 2018 16:41:59 +0100 Subject: [PATCH] Makes caret height adapt to context in mathed. Set current cursor font in MathData::metrics() Also make sure that caret dimension in mathed is not larger than inset height. --- src/BufferView.cpp | 12 ++++++++++-- src/mathed/MathData.cpp | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 0e30cc795c..dafcc9d194 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -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; diff --git a/src/mathed/MathData.cpp b/src/mathed/MathData.cpp index d242a86f72..96aef29491 100644 --- a/src/mathed/MathData.cpp +++ b/src/mathed/MathData.cpp @@ -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(); -- 2.39.2