Inherit outer font in text-in-math environments

Some text-in-math environments such as \text, \mbox, \fbox, and
\makebox, inherit the outer text font. This commit reflects this
in the on-screen representation.

Fixes #12950.
This commit is contained in:
Enrico Forestieri 2023-11-02 17:54:02 +01:00
parent 5d193c7b62
commit 75a08df529
5 changed files with 11 additions and 7 deletions

View File

@ -61,7 +61,7 @@ Changer MetricsBase::changeFontSet(string const & name)
string const oldname = fontname;
fontname = name;
if (isMathFont(name) || isMathFont(oldname))
font = sane_font;
font = isTextFont(name) ? outer_font : sane_font;
augmentFont(font, name);
font.setSize(rc->old.font.size());
font.setStyle(rc->old.font.style());

View File

@ -47,6 +47,8 @@ public:
BufferView * bv;
/// current font
FontInfo font;
/// font of the containing inset
FontInfo outer_font;
/// name of current font - mathed specific
std::string fontname;
/// This is the width available in pixels

View File

@ -104,6 +104,7 @@ void RowPainter::paintInset(Row::Element const & e) const
pi_.base.font = e.inset->inheritFont() ? e.font.fontInfo() :
pi_.base.bv->buffer().params().getFont().fontInfo();
pi_.base.outer_font = e.font.fontInfo();
pi_.ltr_pos = !e.font.isVisibleRightToLeft();
pi_.change = pi_.change.changed() ? pi_.change : e.change;
pi_.do_spellcheck &= e.inset->allowSpellCheck();

View File

@ -520,6 +520,7 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows)
displayFont(pit, e.pos) : bufferfont;
MacroContext mc(&buffer, parPos);
MetricsInfo mi(bv_, font.fontInfo(), w, mc, e.pos == 0, tight_);
mi.base.outer_font = displayFont(pit, e.pos).fontInfo();
e.inset->metrics(mi, dim);
/* FIXME: This is a kind of hack. This allows InsetMathHull to
* state that it needs some elbow room beyond its width, in

View File

@ -146,14 +146,14 @@ void InsetMathBox::htmlize(HtmlStream & ms) const
void InsetMathBox::metrics(MetricsInfo & mi, Dimension & dim) const
{
Changer dummy = mi.base.changeFontSet("textnormal");
Changer dummy = mi.base.changeFontSet("text");
cell(0).metrics(mi, dim);
}
void InsetMathBox::draw(PainterInfo & pi, int x, int y) const
{
Changer dummy = pi.base.changeFontSet("textnormal");
Changer dummy = pi.base.changeFontSet("text");
cell(0).draw(pi, x, y);
}
@ -196,7 +196,7 @@ InsetMathFBox::InsetMathFBox(Buffer * buf)
void InsetMathFBox::metrics(MetricsInfo & mi, Dimension & dim) const
{
Changer dummy = mi.base.changeFontSet("textnormal");
Changer dummy = mi.base.changeFontSet("text");
cell(0).metrics(mi, dim);
// 1 pixel space, 1 frame, 1 space
dim.wid += 2 * 3;
@ -210,7 +210,7 @@ void InsetMathFBox::draw(PainterInfo & pi, int x, int y) const
Dimension const dim = dimension(*pi.base.bv);
pi.pain.rectangle(x + 1, y - dim.ascent() + 1,
dim.width() - 2, dim.height() - 2, Color_foreground);
Changer dummy = pi.base.changeFontSet("textnormal");
Changer dummy = pi.base.changeFontSet("text");
cell(0).draw(pi, x + 3, y);
}
@ -281,7 +281,7 @@ InsetMathMakebox::InsetMathMakebox(Buffer * buf, bool framebox)
void InsetMathMakebox::metrics(MetricsInfo & mi, Dimension & dim) const
{
Changer dummy = mi.base.changeFontSet("textnormal");
Changer dummy = mi.base.changeFontSet("text");
Dimension wdim;
static docstring bracket = from_ascii("[");
@ -312,7 +312,7 @@ void InsetMathMakebox::metrics(MetricsInfo & mi, Dimension & dim) const
void InsetMathMakebox::draw(PainterInfo & pi, int x, int y) const
{
Changer dummy = pi.base.changeFontSet("textnormal");
Changer dummy = pi.base.changeFontSet("text");
BufferView const & bv = *pi.base.bv;
int w = mathed_char_width(pi.base.font, '[');