]> git.lyx.org Git - lyx.git/blobdiff - src/insets/RenderButton.cpp
Strip et al. for citation search
[lyx.git] / src / insets / RenderButton.cpp
index f1ae80043005ca11a6110647fa4bf51169a912a3..c5bc4af87bf1bda2212872d6537d1e3d951048a3 100644 (file)
@@ -12,7 +12,6 @@
 
 #include "RenderButton.h"
 
-#include "Color.h"
 #include "MetricsInfo.h"
 
 #include "frontends/FontMetrics.h"
@@ -23,7 +22,7 @@ namespace lyx {
 
 
 RenderButton::RenderButton()
-       : editable_(false)
+       : editable_(false), broken_(false), inherit_font_(false)
 {}
 
 
@@ -33,45 +32,48 @@ RenderBase * RenderButton::clone(Inset const *) const
 }
 
 
-void RenderButton::update(docstring const & text, bool editable)
+void RenderButton::update(docstring const & text, bool editable,
+                          bool inherit, bool broken)
 {
        text_ = text;
        editable_ = editable;
+       inherit_font_ = inherit;
+       broken_ = broken;
 }
 
 
-bool RenderButton::metrics(MetricsInfo &, Dimension & dim) const
+void RenderButton::metrics(MetricsInfo & mi, Dimension & dim) const
 {
-       Font font(Font::ALL_SANE);
+       FontInfo font = inherit_font_ ? mi.base.font : sane_font;
        font.decSize();
-       frontend::FontMetrics const & fm =
-               theFontMetrics(font);
+       frontend::FontMetrics const & fm = theFontMetrics(font);
 
-       if (editable_)
-               fm.buttonText(text_, dim.wid, dim.asc, dim.des);
-       else
-               fm.rectText(text_, dim.wid, dim.asc, dim.des);
+       fm.buttonText(text_, Inset::textOffset(mi.base.bv), dim.wid, dim.asc, dim.des);
 
-       dim.wid += 4;
-       if (dim_ == dim)
-               return false;
        dim_ = dim;
-       return true;
 }
 
 
-void RenderButton::draw(PainterInfo & pi, int x, int y) const
+void RenderButton::draw(PainterInfo & pi, int x, int y, bool) const
 {
        // Draw it as a box with the LaTeX text
-       Font font(Font::ALL_SANE);
-       font.setColor(Color::command);
+       FontInfo font = inherit_font_ ? pi.base.font : sane_font;
+       font.setColor(Color_command);
        font.decSize();
 
-       if (editable_) {
-               pi.pain.buttonText(x + 2, y, text_, font, renderState());
+       if (broken_) {
+               font.setColor(Color_command_broken);
+               pi.pain.buttonText(x, y, text_, font,
+                                  renderState() ? Color_buttonhoverbg_broken : Color_buttonbg_broken,
+                                  Color_buttonframe_broken, Inset::textOffset(pi.base.bv));
+       } else if (editable_) {
+               pi.pain.buttonText(x, y, text_, font,
+                                  renderState() ? Color_buttonhoverbg : Color_buttonbg,
+                                  Color_buttonframe, Inset::textOffset(pi.base.bv));
        } else {
-               pi.pain.rectText(x + 2, y, text_, font,
-                                Color::commandbg, Color::commandframe);
+               pi.pain.buttonText(x, y, text_, font,
+                                  Color_commandbg, Color_commandframe,
+                                  Inset::textOffset(pi.base.bv));
        }
 }