Add possibility for command inset to inherit enclosing font

The RenderButton object now has this property. It is set depending on
the value of inheritFont() method that is currently only set for
InsetRef, InsetBibtex and InsetCitation.

Fixes bug #10258
This commit is contained in:
Jean-Marc Lasgouttes 2016-06-23 19:45:10 +02:00
parent a5377ead20
commit 555338048d
10 changed files with 23 additions and 11 deletions

View File

@ -48,6 +48,8 @@ public:
///
bool hasSettings() const { return true; }
///
bool inheritFont() const { return true; }
///
InsetCode lyxCode() const { return BIBTEX_CODE; }
///
DisplayType display() const { return AlignCenter; }

View File

@ -43,6 +43,8 @@ public:
///
bool hasSettings() const { return true; }
///
bool inheritFont() const { return true; }
///
docstring toolTip(BufferView const & bv, int x, int y) const;
///
void doDispatch(Cursor & cur, FuncRequest & cmd);

View File

@ -96,7 +96,8 @@ InsetCommand::~InsetCommand()
void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
{
button_.update(screenLabel(), editable() || clickable(*mi.base.bv, 0, 0));
button_.update(screenLabel(), editable() || clickable(*mi.base.bv, 0, 0),
inheritFont());
button_.metrics(mi, dim);
}

View File

@ -125,6 +125,8 @@ private:
RenderButton & button() const { return button_; }
/// This should provide the text for the button
virtual docstring screenLabel() const = 0;
/// This should return true when font is inherited from text
virtual bool inheritFont() const { return false; }
/// \name Static public methods obligated for InsetCommand derived classes
//@{

View File

@ -623,7 +623,7 @@ void InsetExternal::setParams(InsetExternalParams const & p)
renderer_.reset(new RenderButton);
button_ptr = renderer_->asButton();
}
button_ptr->update(screenLabel(params_, buffer()), true);
button_ptr->update(screenLabel(params_, buffer()), true, false);
return;
}

View File

@ -1019,7 +1019,7 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const
} else {
if (!set_label_) {
set_label_ = true;
button_.update(screenLabel(), true);
button_.update(screenLabel(), true, false);
}
button_.metrics(mi, dim);
}
@ -1201,7 +1201,7 @@ void InsetInclude::updateCommand()
void InsetInclude::updateBuffer(ParIterator const & it, UpdateType utype)
{
button_.update(screenLabel(), true);
button_.update(screenLabel(), true, false);
Buffer const * const childbuffer = getChildBuffer();
if (childbuffer) {

View File

@ -49,6 +49,8 @@ public:
///
bool hasSettings() const { return true; }
///
bool inheritFont() const { return true; }
///
InsetCode lyxCode() const { return REF_CODE; }
///
DisplayType display() const { return Inline; }

View File

@ -32,16 +32,18 @@ RenderBase * RenderButton::clone(Inset const *) const
}
void RenderButton::update(docstring const & text, bool editable)
void RenderButton::update(docstring const & text, bool editable,
bool inherit_font)
{
text_ = text;
editable_ = editable;
inherit_font_ = inherit_font;
}
void RenderButton::metrics(MetricsInfo &, Dimension & dim) const
void RenderButton::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontInfo font = sane_font;
FontInfo font = inherit_font_ ? mi.base.font : sane_font;
font.decSize();
frontend::FontMetrics const & fm =
theFontMetrics(font);
@ -58,7 +60,7 @@ void RenderButton::metrics(MetricsInfo &, Dimension & dim) const
void RenderButton::draw(PainterInfo & pi, int x, int y) const
{
// Draw it as a box with the LaTeX text
FontInfo font = sane_font;
FontInfo font = inherit_font_ ? pi.base.font : sane_font;
font.setColor(Color_command);
font.decSize();

View File

@ -33,7 +33,7 @@ public:
virtual void draw(PainterInfo & pi, int x, int y) const;
/// Provide the text for the button
void update(docstring const &, bool editable);
void update(docstring const &, bool editable, bool inherit_font);
/// The "sensitive area" box, i.e., the button area
Box box() const { return button_box_; }
@ -47,6 +47,7 @@ private:
/// The stored data.
docstring text_;
bool editable_;
bool inherit_font_;
Box button_box_;
};

View File

@ -40,7 +40,7 @@ void CommandInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (!set_label_) {
set_label_ = true;
button_.update(screenLabel(), true);
button_.update(screenLabel(), true, false);
}
button_.metrics(mi, dim);
}