diff options
Diffstat (limited to 'WebCore/rendering/RenderButton.cpp')
-rw-r--r-- | WebCore/rendering/RenderButton.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/WebCore/rendering/RenderButton.cpp b/WebCore/rendering/RenderButton.cpp index 6a15fdb..cbde565 100644 --- a/WebCore/rendering/RenderButton.cpp +++ b/WebCore/rendering/RenderButton.cpp @@ -28,6 +28,7 @@ #include "HTMLInputElement.h" #include "HTMLNames.h" #include "RenderTextFragment.h" +#include "RenderTheme.h" namespace WebCore { @@ -37,6 +38,7 @@ RenderButton::RenderButton(Node* node) : RenderFlexibleBox(node) , m_buttonText(0) , m_inner(0) + , m_default(false) { } @@ -62,14 +64,37 @@ void RenderButton::removeChild(RenderObject* oldChild) m_inner->removeChild(oldChild); } -void RenderButton::setStyle(RenderStyle* style) +void RenderButton::styleWillChange(RenderStyle::Diff diff, const RenderStyle* newStyle) { - RenderBlock::setStyle(style); + if (m_inner) { + // RenderBlock::setStyle is going to apply a new style to the inner block, which + // will have the initial box flex value, 0. The current value is 1, because we set + // it right below. Here we change it back to 0 to avoid getting a spurious layout hint + // because of the difference. + m_inner->style()->setBoxFlex(0); + } + RenderBlock::styleWillChange(diff, newStyle); +} + +void RenderButton::styleDidChange(RenderStyle::Diff diff, const RenderStyle* oldStyle) +{ + RenderBlock::styleDidChange(diff, oldStyle); + if (m_buttonText) - m_buttonText->setStyle(style); + m_buttonText->setStyle(style()); if (m_inner) // RenderBlock handled updating the anonymous block's style. m_inner->style()->setBoxFlex(1.0f); setReplaced(isInline()); + + if (!m_default && theme()->isDefault(this)) { + if (!m_timer) + m_timer.set(new Timer<RenderButton>(this, &RenderButton::timerFired)); + m_timer->startRepeating(0.03); + m_default = true; + } else if (m_default && !theme()->isDefault(this)) { + m_default = false; + m_timer.clear(); + } } void RenderButton::updateFromElement() @@ -122,5 +147,9 @@ IntRect RenderButton::controlClipRect(int tx, int ty) const return IntRect(tx + borderLeft(), ty + borderTop(), m_width - borderLeft() - borderRight(), m_height - borderTop() - borderBottom()); } +void RenderButton::timerFired(Timer<RenderButton>*) +{ + repaint(); +} } // namespace WebCore |