From 555338048d417d4532fe954239a0e9e29dd5ee6d Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Thu, 23 Jun 2016 19:45:10 +0200 Subject: [PATCH] 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 --- src/insets/InsetBibtex.h | 2 ++ src/insets/InsetCitation.h | 2 ++ src/insets/InsetCommand.cpp | 3 ++- src/insets/InsetCommand.h | 2 ++ src/insets/InsetExternal.cpp | 2 +- src/insets/InsetInclude.cpp | 4 ++-- src/insets/InsetRef.h | 4 +++- src/insets/RenderButton.cpp | 10 ++++++---- src/insets/RenderButton.h | 3 ++- src/mathed/CommandInset.cpp | 2 +- 10 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/insets/InsetBibtex.h b/src/insets/InsetBibtex.h index 038065ffc0..4f6f68cef2 100644 --- a/src/insets/InsetBibtex.h +++ b/src/insets/InsetBibtex.h @@ -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; } diff --git a/src/insets/InsetCitation.h b/src/insets/InsetCitation.h index 992a85ee21..18a9305a89 100644 --- a/src/insets/InsetCitation.h +++ b/src/insets/InsetCitation.h @@ -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); diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp index f4f169232b..fe10466e23 100644 --- a/src/insets/InsetCommand.cpp +++ b/src/insets/InsetCommand.cpp @@ -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); } diff --git a/src/insets/InsetCommand.h b/src/insets/InsetCommand.h index 0514e09ffe..78e6d7fc5d 100644 --- a/src/insets/InsetCommand.h +++ b/src/insets/InsetCommand.h @@ -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 //@{ diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index a88769b8ee..8efdd3e97e 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -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; } diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 9b5c3f0961..b2eca71505 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -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) { diff --git a/src/insets/InsetRef.h b/src/insets/InsetRef.h index 80b767814c..1af1790bf9 100644 --- a/src/insets/InsetRef.h +++ b/src/insets/InsetRef.h @@ -45,10 +45,12 @@ public: docstring toolTip(BufferView const &, int, int) const { return tooltip_; } /// - docstring getTOCString() const; + docstring getTOCString() const; /// bool hasSettings() const { return true; } /// + bool inheritFont() const { return true; } + /// InsetCode lyxCode() const { return REF_CODE; } /// DisplayType display() const { return Inline; } diff --git a/src/insets/RenderButton.cpp b/src/insets/RenderButton.cpp index ee1b1f44cd..69d28482b9 100644 --- a/src/insets/RenderButton.cpp +++ b/src/insets/RenderButton.cpp @@ -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(); diff --git a/src/insets/RenderButton.h b/src/insets/RenderButton.h index 5e6ad35a08..480effd16a 100644 --- a/src/insets/RenderButton.h +++ b/src/insets/RenderButton.h @@ -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_; }; diff --git a/src/mathed/CommandInset.cpp b/src/mathed/CommandInset.cpp index 0c9e585e1a..344c570323 100644 --- a/src/mathed/CommandInset.cpp +++ b/src/mathed/CommandInset.cpp @@ -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); }