summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderButton.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderButton.cpp')
-rw-r--r--Source/WebCore/rendering/RenderButton.cpp56
1 files changed, 14 insertions, 42 deletions
diff --git a/Source/WebCore/rendering/RenderButton.cpp b/Source/WebCore/rendering/RenderButton.cpp
index 7756a41b7..484530f01 100644
--- a/Source/WebCore/rendering/RenderButton.cpp
+++ b/Source/WebCore/rendering/RenderButton.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2005 Apple Computer, Inc.
+ * Copyright (C) 2005 Apple Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -37,11 +37,10 @@ namespace WebCore {
using namespace HTMLNames;
-RenderButton::RenderButton(HTMLFormControlElement& element, PassRef<RenderStyle> style)
- : RenderFlexibleBox(element, std::move(style))
+RenderButton::RenderButton(HTMLFormControlElement& element, RenderStyle&& style)
+ : RenderFlexibleBox(element, WTFMove(style))
, m_buttonText(0)
, m_inner(0)
- , m_default(false)
{
}
@@ -51,7 +50,7 @@ RenderButton::~RenderButton()
HTMLFormControlElement& RenderButton::formControlElement() const
{
- return toHTMLFormControlElement(nodeForNonAnonymous());
+ return downcast<HTMLFormControlElement>(nodeForNonAnonymous());
}
bool RenderButton::canBeSelectionLeaf() const
@@ -61,7 +60,7 @@ bool RenderButton::canBeSelectionLeaf() const
bool RenderButton::hasLineIfEmpty() const
{
- return formControlElement().toInputElement();
+ return is<HTMLInputElement>(formControlElement());
}
void RenderButton::addChild(RenderObject* newChild, RenderObject* beforeChild)
@@ -70,7 +69,7 @@ void RenderButton::addChild(RenderObject* newChild, RenderObject* beforeChild)
// Create an anonymous block.
ASSERT(!firstChild());
m_inner = createAnonymousBlock(style().display());
- setupInnerStyle(&m_inner->style());
+ setupInnerStyle(&m_inner->mutableStyle());
RenderFlexibleBox::addChild(m_inner);
}
@@ -98,9 +97,9 @@ void RenderButton::styleWillChange(StyleDifference diff, const RenderStyle& newS
// it right below. Here we change it back to 0 to avoid getting a spurious layout hint
// because of the difference. Same goes for the other properties.
// FIXME: Make this hack unnecessary.
- m_inner->style().setFlexGrow(newStyle.initialFlexGrow());
- m_inner->style().setMarginTop(newStyle.initialMargin());
- m_inner->style().setMarginBottom(newStyle.initialMargin());
+ m_inner->mutableStyle().setFlexGrow(newStyle.initialFlexGrow());
+ m_inner->mutableStyle().setMarginTop(newStyle.initialMargin());
+ m_inner->mutableStyle().setMarginBottom(newStyle.initialMargin());
}
RenderBlock::styleWillChange(diff, newStyle);
}
@@ -110,26 +109,11 @@ void RenderButton::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
RenderBlock::styleDidChange(diff, oldStyle);
if (m_inner) // RenderBlock handled updating the anonymous block's style.
- setupInnerStyle(&m_inner->style());
-
- if (!m_default && theme().isDefault(this)) {
- if (!m_timer)
- m_timer = adoptPtr(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();
- }
+ setupInnerStyle(&m_inner->mutableStyle());
}
void RenderButton::setupInnerStyle(RenderStyle* innerStyle)
{
- ASSERT(innerStyle->refCount() == 1);
- // RenderBlock::createAnonymousBlock creates a new RenderStyle, so this is
- // safe to modify.
- // FIXME: I don't see how the comment above is accurate when this is called
- // from the RenderButton::styleDidChange function.
innerStyle->setFlexGrow(1.0f);
// Use margin:auto instead of align-items:center to get safe centering, i.e.
// when the content overflows, treat it the same as align-items: flex-start.
@@ -141,8 +125,8 @@ void RenderButton::setupInnerStyle(RenderStyle* innerStyle)
void RenderButton::updateFromElement()
{
// If we're an input element, we may need to change our button text.
- if (isHTMLInputElement(formControlElement())) {
- HTMLInputElement& input = toHTMLInputElement(formControlElement());
+ if (is<HTMLInputElement>(formControlElement())) {
+ HTMLInputElement& input = downcast<HTMLInputElement>(formControlElement());
String value = input.valueWithDefault();
setText(value);
}
@@ -175,7 +159,7 @@ bool RenderButton::canHaveGeneratedChildren() const
// Input elements can't have generated children, but button elements can. We'll
// write the code assuming any other button types that might emerge in the future
// can also have children.
- return !isHTMLInputElement(formControlElement());
+ return !is<HTMLInputElement>(formControlElement());
}
LayoutRect RenderButton::controlClipRect(const LayoutPoint& additionalOffset) const
@@ -184,25 +168,13 @@ LayoutRect RenderButton::controlClipRect(const LayoutPoint& additionalOffset) co
return LayoutRect(additionalOffset.x() + borderLeft(), additionalOffset.y() + borderTop(), width() - borderLeft() - borderRight(), height() - borderTop() - borderBottom());
}
-void RenderButton::timerFired(Timer<RenderButton>&)
-{
- // FIXME Bug 25110: Ideally we would stop our timer when our Document
- // enters the page cache. But we currently have no way of being notified
- // when that happens, so we'll just ignore the timer firing as long as
- // we're in the cache.
- if (document().inPageCache())
- return;
-
- repaint();
-}
-
#if PLATFORM(IOS)
void RenderButton::layout()
{
RenderFlexibleBox::layout();
// FIXME: We should not be adjusting styles during layout. See <rdar://problem/7675493>.
- RenderThemeIOS::adjustRoundBorderRadius(style(), this);
+ RenderThemeIOS::adjustRoundBorderRadius(mutableStyle(), *this);
}
#endif