Add WTF::move()
[WebKit-https.git] / Source / WebCore / rendering / RenderButton.cpp
index 33068cd..e067884 100644 (file)
@@ -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
 #include "RenderTheme.h"
 #include "StyleInheritedData.h"
 
+#if PLATFORM(IOS)
+#include "RenderThemeIOS.h"
+#endif
+
 namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderButton::RenderButton(HTMLFormControlElement& element)
-    : RenderFlexibleBox(element)
+RenderButton::RenderButton(HTMLFormControlElement& element, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(element, WTF::move(style))
     , m_buttonText(0)
     , m_inner(0)
     , m_default(false)
@@ -52,7 +56,7 @@ HTMLFormControlElement& RenderButton::formControlElement() const
 
 bool RenderButton::canBeSelectionLeaf() const
 {
-    return formControlElement().rendererIsEditable();
+    return formControlElement().hasEditableStyle();
 }
 
 bool RenderButton::hasLineIfEmpty() const
@@ -65,25 +69,26 @@ void RenderButton::addChild(RenderObject* newChild, RenderObject* beforeChild)
     if (!m_inner) {
         // Create an anonymous block.
         ASSERT(!firstChild());
-        m_inner = createAnonymousBlock(style()->display());
-        setupInnerStyle(m_inner->style());
+        m_inner = createAnonymousBlock(style().display());
+        setupInnerStyle(&m_inner->style());
         RenderFlexibleBox::addChild(m_inner);
     }
     
     m_inner->addChild(newChild, beforeChild);
 }
 
-void RenderButton::removeChild(RenderObject& oldChild)
+RenderObject* RenderButton::removeChild(RenderObject& oldChild)
 {
     // m_inner should be the only child, but checking for direct children who
     // are not m_inner prevents security problems when that assumption is
     // violated.
     if (&oldChild == m_inner || !m_inner || oldChild.parent() == this) {
         ASSERT(&oldChild == m_inner || !m_inner);
-        RenderFlexibleBox::removeChild(oldChild);
+        RenderObject* next = RenderFlexibleBox::removeChild(oldChild);
         m_inner = nullptr;
+        return next;
     } else
-        m_inner->removeChild(oldChild);
+        return m_inner->removeChild(oldChild);
 }
 
 void RenderButton::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
@@ -94,9 +99,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->style().setFlexGrow(newStyle.initialFlexGrow());
+        m_inner->style().setMarginTop(newStyle.initialMargin());
+        m_inner->style().setMarginBottom(newStyle.initialMargin());
     }
     RenderBlock::styleWillChange(diff, newStyle);
 }
@@ -106,16 +111,16 @@ 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());
+        setupInnerStyle(&m_inner->style());
 
-    if (!m_default && theme()->isDefault(this)) {
+    if (!m_default && theme().isDefault(*this)) {
         if (!m_timer)
-            m_timer = adoptPtr(new Timer<RenderButton>(this, &RenderButton::timerFired));
+            m_timer = std::make_unique<Timer<RenderButton>>(this, &RenderButton::timerFired);
         m_timer->startRepeating(0.03);
         m_default = true;
-    } else if (m_default && !theme()->isDefault(this)) {
+    } else if (m_default && !theme().isDefault(*this)) {
         m_default = false;
-        m_timer.clear();
+        m_timer = nullptr;
     }
 }
 
@@ -131,7 +136,7 @@ void RenderButton::setupInnerStyle(RenderStyle* innerStyle)
     // when the content overflows, treat it the same as align-items: flex-start.
     innerStyle->setMarginTop(Length());
     innerStyle->setMarginBottom(Length());
-    innerStyle->setFlexDirection(style()->flexDirection());
+    innerStyle->setFlexDirection(style().flexDirection());
 }
 
 void RenderButton::updateFromElement()
@@ -180,7 +185,7 @@ 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>*)
+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
@@ -192,4 +197,14 @@ void RenderButton::timerFired(Timer<RenderButton>*)
     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);
+}
+#endif
+
 } // namespace WebCore