Set current cursor font in MathData::metrics()
Also make sure that caret dimension in mathed is not larger than inset
height.
Cursor const & cur = cursor();
Font const font = cur.real_current_font;
frontend::FontMetrics const & fm = theFontMetrics(font);
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;
h = asc + des;
p = getPos(cur);
p.y_ -= asc;
void MathData::metrics(MetricsInfo & mi, Dimension & dim) const
{
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();
frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
dim = fm.dimension('I');
int xascent = fm.dimension('x').ascent();