diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderButton.cpp')
| -rw-r--r-- | Source/WebCore/rendering/RenderButton.cpp | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/Source/WebCore/rendering/RenderButton.cpp b/Source/WebCore/rendering/RenderButton.cpp index 69cef2922..4f655fb43 100644 --- a/Source/WebCore/rendering/RenderButton.cpp +++ b/Source/WebCore/rendering/RenderButton.cpp @@ -33,8 +33,8 @@ namespace WebCore { using namespace HTMLNames; -RenderButton::RenderButton(Node* node) - : RenderDeprecatedFlexibleBox(node) +RenderButton::RenderButton(Element* element) + : RenderFlexibleBox(element) , m_buttonText(0) , m_inner(0) , m_default(false) @@ -52,7 +52,7 @@ void RenderButton::addChild(RenderObject* newChild, RenderObject* beforeChild) ASSERT(!firstChild()); m_inner = createAnonymousBlock(style()->display()); setupInnerStyle(m_inner->style()); - RenderDeprecatedFlexibleBox::addChild(m_inner); + RenderFlexibleBox::addChild(m_inner); } m_inner->addChild(newChild, beforeChild); @@ -65,7 +65,7 @@ void RenderButton::removeChild(RenderObject* oldChild) // violated. if (oldChild == m_inner || !m_inner || oldChild->parent() == this) { ASSERT(oldChild == m_inner || !m_inner); - RenderDeprecatedFlexibleBox::removeChild(oldChild); + RenderFlexibleBox::removeChild(oldChild); m_inner = 0; } else m_inner->removeChild(oldChild); @@ -75,10 +75,13 @@ void RenderButton::styleWillChange(StyleDifference diff, const RenderStyle* newS { 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 + // will have the initial 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); + // 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()); } RenderBlock::styleWillChange(diff, newStyle); } @@ -108,15 +111,19 @@ void RenderButton::setupInnerStyle(RenderStyle* innerStyle) ASSERT(innerStyle->refCount() == 1); // RenderBlock::createAnonymousBlock creates a new RenderStyle, so this is // safe to modify. - innerStyle->setBoxFlex(1.0f); - innerStyle->setBoxOrient(style()->boxOrient()); + 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. + innerStyle->setMarginTop(Length()); + innerStyle->setMarginBottom(Length()); + innerStyle->setFlexDirection(style()->flexDirection()); } void RenderButton::updateFromElement() { // If we're an input element, we may need to change our button text. - if (node()->hasTagName(inputTag)) { - HTMLInputElement* input = static_cast<HTMLInputElement*>(node()); + if (isHTMLInputElement(node())) { + HTMLInputElement* input = toHTMLInputElement(node()); String value = input->valueWithDefault(); setText(value); } @@ -150,15 +157,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 !node()->hasTagName(inputTag); -} - -void RenderButton::updateBeforeAfterContent(PseudoId type) -{ - if (m_inner) - m_inner->children()->updateBeforeAfterContent(m_inner, type, this); - else - children()->updateBeforeAfterContent(this, type); + return !isHTMLInputElement(node()); } LayoutRect RenderButton::controlClipRect(const LayoutPoint& additionalOffset) const |
