Diff
Modified: trunk/LayoutTests/ChangeLog (213172 => 213173)
--- trunk/LayoutTests/ChangeLog 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/LayoutTests/ChangeLog 2017-02-28 21:47:38 UTC (rev 213173)
@@ -1,3 +1,14 @@
+2017-02-28 Dave Hyatt <hy...@apple.com>
+
+ Centering text inside a button set to display flex and justify-content: center is impossible
+ https://bugs.webkit.org/show_bug.cgi?id=148872
+ <rdar://problem/22590086>
+
+ Reviewed by Simon Fraser.
+
+ * fast/forms/button-set-display-flex-justifyContent-center-expected.html: Added.
+ * fast/forms/button-set-display-flex-justifyContent-center.html: Added.
+
2017-02-28 Chris Dumez <cdu...@apple.com>
[iOS] Throttle requestAnimationFrame to 30fps in low power mode
Added: trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center-expected.html (0 => 213173)
--- trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center-expected.html (rev 0)
+++ trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center-expected.html 2017-02-28 21:47:38 UTC (rev 213173)
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<style>
+div {
+ font-family: sans-serif;
+ font-size: initial;
+ width: 300px;
+ display: flex;
+ justify-content: center;
+}
+</style>
+<h4>Test for centering text inside a button set to display flex and justify-content: center is impossible</h4>
+<div>text with justify-content: center</div>
Added: trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center.html (0 => 213173)
--- trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center.html (rev 0)
+++ trunk/LayoutTests/fast/forms/button-set-display-flex-justifyContent-center.html 2017-02-28 21:47:38 UTC (rev 213173)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<style>
+button {
+ border: 0;
+ padding: 0;
+ background-color: white;
+ font-family: sans-serif;
+ font-size: initial;
+ width: 300px;
+ display: flex;
+ justify-content: center;
+}
+</style>
+<h4>Test for centering text inside a button set to display flex and justify-content: center is impossible</h4>
+<button>text with justify-content: center</button>
Modified: trunk/Source/WebCore/ChangeLog (213172 => 213173)
--- trunk/Source/WebCore/ChangeLog 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/Source/WebCore/ChangeLog 2017-02-28 21:47:38 UTC (rev 213173)
@@ -1,3 +1,25 @@
+2017-02-28 Dave Hyatt <hy...@apple.com>
+
+ Centering text inside a button set to display flex and justify-content: center is impossible
+ https://bugs.webkit.org/show_bug.cgi?id=148872
+ <rdar://problem/22590086>
+
+ Reviewed by Simon Fraser.
+
+ Added new test in fast/forms.
+
+ * rendering/RenderButton.cpp:
+ (WebCore::RenderButton::addChild):
+ (WebCore::RenderButton::updateAnonymousChildStyle):
+ (WebCore::RenderButton::styleDidChange):
+ (WebCore::RenderButton::styleWillChange): Deleted.
+ (WebCore::RenderButton::setupInnerStyle): Deleted.
+ * rendering/RenderButton.h:
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::propagateStyleToAnonymousChildren):
+ * rendering/RenderElement.h:
+ (WebCore::RenderElement::updateAnonymousChildStyle):
+
2017-02-28 Antoine Quint <grao...@apple.com>
[Modern Media Controls] Add missing compact mode assets for macOS
Modified: trunk/Source/WebCore/rendering/RenderButton.cpp (213172 => 213173)
--- trunk/Source/WebCore/rendering/RenderButton.cpp 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/Source/WebCore/rendering/RenderButton.cpp 2017-02-28 21:47:38 UTC (rev 213173)
@@ -69,7 +69,7 @@
// Create an anonymous block.
ASSERT(!firstChild());
m_inner = createAnonymousBlock(style().display());
- setupInnerStyle(&m_inner->mutableStyle());
+ updateAnonymousChildStyle(*m_inner, m_inner->mutableStyle());
RenderFlexibleBox::addChild(m_inner);
}
@@ -88,38 +88,23 @@
} else
m_inner->removeChild(oldChild);
}
-
-void RenderButton::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
+
+void RenderButton::updateAnonymousChildStyle(const RenderObject& child, RenderStyle& childStyle) const
{
- if (m_inner) {
- // RenderBlock::setStyle is going to apply a new style to the inner block, which
- // 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. Same goes for the other properties.
- // FIXME: Make this hack unnecessary.
- m_inner->mutableStyle().setFlexGrow(newStyle.initialFlexGrow());
- m_inner->mutableStyle().setMarginTop(newStyle.initialMargin());
- m_inner->mutableStyle().setMarginBottom(newStyle.initialMargin());
- }
- RenderBlock::styleWillChange(diff, newStyle);
-}
-
-void RenderButton::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
-{
- RenderBlock::styleDidChange(diff, oldStyle);
-
- if (m_inner) // RenderBlock handled updating the anonymous block's style.
- setupInnerStyle(&m_inner->mutableStyle());
-}
-
-void RenderButton::setupInnerStyle(RenderStyle* innerStyle)
-{
- innerStyle->setFlexGrow(1.0f);
+ ASSERT_UNUSED(child, !m_inner || &child == m_inner);
+
+ childStyle.setFlexGrow(1.0f);
+ // min-width: 0; is needed for correct shrinking.
+ childStyle.setMinWidth(Length(0, Fixed));
// 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());
+ childStyle.setMarginTop(Length());
+ childStyle.setMarginBottom(Length());
+ childStyle.setFlexDirection(style().flexDirection());
+ childStyle.setJustifyContent(style().justifyContent());
+ childStyle.setFlexWrap(style().flexWrap());
+ childStyle.setAlignItems(style().alignItems());
+ childStyle.setAlignContent(style().alignContent());
}
void RenderButton::updateFromElement()
Modified: trunk/Source/WebCore/rendering/RenderButton.h (213172 => 213173)
--- trunk/Source/WebCore/rendering/RenderButton.h 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/Source/WebCore/rendering/RenderButton.h 2017-02-28 21:47:38 UTC (rev 213173)
@@ -46,7 +46,6 @@
void removeLeftoverAnonymousBlock(RenderBlock*) override { }
bool createsAnonymousWrapper() const override { return true; }
- void setupInnerStyle(RenderStyle*);
void updateFromElement() override;
bool canHaveGeneratedChildren() const override;
@@ -53,6 +52,8 @@
bool hasControlClip() const override { return true; }
LayoutRect controlClipRect(const LayoutPoint&) const override;
+ void updateAnonymousChildStyle(const RenderObject& anonymousChild, RenderStyle&) const override;
+
void setText(const String&);
String text() const;
@@ -66,9 +67,6 @@
const char* renderName() const override { return "RenderButton"; }
bool isRenderButton() const override { return true; }
- void styleWillChange(StyleDifference, const RenderStyle& newStyle) override;
- void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
-
bool hasLineIfEmpty() const override;
bool isFlexibleBoxImpl() const override { return true; }
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (213172 => 213173)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2017-02-28 21:47:38 UTC (rev 213173)
@@ -810,6 +810,8 @@
if (elementChild.isInFlowPositioned() && downcast<RenderBlock>(elementChild).isAnonymousBlockContinuation())
newStyle.setPosition(elementChild.style().position());
+ updateAnonymousChildStyle(elementChild, newStyle);
+
elementChild.setStyle(WTFMove(newStyle));
}
}
Modified: trunk/Source/WebCore/rendering/RenderElement.h (213172 => 213173)
--- trunk/Source/WebCore/rendering/RenderElement.h 2017-02-28 21:45:18 UTC (rev 213172)
+++ trunk/Source/WebCore/rendering/RenderElement.h 2017-02-28 21:47:38 UTC (rev 213173)
@@ -216,6 +216,10 @@
void removeFromRenderFlowThread();
+ // Called before anonymousChild.setStyle(). Override to set custom styles for
+ // the child.
+ virtual void updateAnonymousChildStyle(const RenderObject&, RenderStyle&) const { };
+
protected:
enum BaseTypeFlag {
RenderLayerModelObjectFlag = 1 << 0,