RenderButton::RenderButton()
- : editable_(false), inherit_font_(false)
+ : editable_(false), broken_(false), inherit_font_(false)
{}
}
-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;
}
-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);
+ 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_ = dim;
}
-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
- FontInfo font = sane_font;
+ FontInfo font = inherit_font_ ? pi.base.font : sane_font;
font.setColor(Color_command);
font.decSize();
- if (editable_) {
- pi.pain.buttonText(x, 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, y, text_, font,
- Color_commandbg, Color_commandframe);
+ pi.pain.buttonText(x, y, text_, font,
+ Color_commandbg, Color_commandframe,
+ Inset::textOffset(pi.base.bv));
}
}