<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[279274] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/279274">279274</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2021-06-25 04:22:59 -0700 (Fri, 25 Jun 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-flexbox] Cleanup OverridingSizesScope RAII class
https://bugs.webkit.org/show_bug.cgi?id=227394

Reviewed by Rob Buis.

In <a href="http://trac.webkit.org/projects/webkit/changeset/279268">r279268</a> we added a new RAII class which adds an overriding sizes free scope to perform
layout computations. That class heavily uses the different set/get/clear methods for overriding
sizes. We can use a macro with subsitutions there to reduce the amount of required code.

Also moving the computeChildIntrinsicLogicalWidths() method to the private section as it does
not require protected visibility.

No new tests as it's just a code refactoring that does not modify the functionality.

* rendering/RenderFlexibleBox.cpp:
(WebCore::OverridingSizesScope::OverridingSizesScope):
(WebCore::OverridingSizesScope::~OverridingSizesScope):
(WebCore::OverridingSizesScope::setOrClearOverridingSize): Deleted.
* rendering/RenderFlexibleBox.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlexibleBoxcpp">trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlexibleBoxh">trunk/Source/WebCore/rendering/RenderFlexibleBox.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (279273 => 279274)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-06-25 09:55:57 UTC (rev 279273)
+++ trunk/Source/WebCore/ChangeLog      2021-06-25 11:22:59 UTC (rev 279274)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2021-06-25  Sergio Villar Senin  <svillar@igalia.com>
+
+        [css-flexbox] Cleanup OverridingSizesScope RAII class
+        https://bugs.webkit.org/show_bug.cgi?id=227394
+
+        Reviewed by Rob Buis.
+
+        In r279268 we added a new RAII class which adds an overriding sizes free scope to perform
+        layout computations. That class heavily uses the different set/get/clear methods for overriding
+        sizes. We can use a macro with subsitutions there to reduce the amount of required code.
+
+        Also moving the computeChildIntrinsicLogicalWidths() method to the private section as it does
+        not require protected visibility.
+
+        No new tests as it's just a code refactoring that does not modify the functionality.
+
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::OverridingSizesScope::OverridingSizesScope):
+        (WebCore::OverridingSizesScope::~OverridingSizesScope):
+        (WebCore::OverridingSizesScope::setOrClearOverridingSize): Deleted.
+        * rendering/RenderFlexibleBox.h:
+
</ins><span class="cx"> 2021-06-25  Martin Robinson  <mrobinson@webkit.org>
</span><span class="cx"> 
</span><span class="cx">         [css-scroll-snap] Simplify snap point selection helpers
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlexibleBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (279273 => 279274)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp     2021-06-25 09:55:57 UTC (rev 279273)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp        2021-06-25 11:22:59 UTC (rev 279274)
</span><span class="lines">@@ -153,6 +153,14 @@
</span><span class="cx">     addScrollbarWidth();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#define SET_OR_CLEAR_OVERRIDING_SIZE(box, SizeType, size)   \
+    {                                                       \
+        if (size)                                           \
+            box.setOverridingLogical##SizeType(*size);      \
+        else                                                \
+            box.clearOverridingLogical##SizeType();         \
+    }
+
</ins><span class="cx"> // RAII class which defines a scope in which overriding sizes of a box are either:
</span><span class="cx"> //   1) replaced by other size in one axis if size is specified
</span><span class="cx"> //   2) cleared in both axis if size == std::nullopt
</span><span class="lines">@@ -175,40 +183,24 @@
</span><span class="cx">         if (axis == Axis::Both || axis == Axis::Inline) {
</span><span class="cx">             if (box.hasOverridingLogicalWidth())
</span><span class="cx">                 m_overridingWidth = box.overridingLogicalWidth();
</span><del>-            setOrClearOverridingSize(size, Axis::Inline);
</del><ins>+            SET_OR_CLEAR_OVERRIDING_SIZE(m_box, Width, size);
</ins><span class="cx">         }
</span><span class="cx">         if (axis == Axis::Both || axis == Axis::Block) {
</span><span class="cx">             if (box.hasOverridingLogicalHeight())
</span><span class="cx">                 m_overridingHeight = box.overridingLogicalHeight();
</span><del>-            setOrClearOverridingSize(size, Axis::Block);
</del><ins>+            SET_OR_CLEAR_OVERRIDING_SIZE(m_box, Height, size);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     ~OverridingSizesScope()
</span><span class="cx">     {
</span><del>-        if (m_axis == Axis::Both || m_axis == Axis::Inline)
-            setOrClearOverridingSize(m_overridingWidth, Axis::Inline);
</del><ins>+        if (m_axis == Axis::Inline || m_axis == Axis::Both)
+            SET_OR_CLEAR_OVERRIDING_SIZE(m_box, Width, m_overridingWidth);
</ins><span class="cx"> 
</span><del>-        if (m_axis == Axis::Both || m_axis == Axis::Block)
-            setOrClearOverridingSize(m_overridingHeight, Axis::Block);
</del><ins>+        if (m_axis == Axis::Block || m_axis == Axis::Both)
+            SET_OR_CLEAR_OVERRIDING_SIZE(m_box, Height, m_overridingHeight);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void setOrClearOverridingSize(std::optional<LayoutUnit> size, Axis axis)
-    {
-        ASSERT(axis != Axis::Both);
-        if (size) {
-            if (axis == Axis::Inline)
-                m_box.setOverridingLogicalWidth(*size);
-            else
-                m_box.setOverridingLogicalHeight(*size);
-            return;
-        }
-        if (axis == Axis::Inline)
-            m_box.clearOverridingLogicalWidth();
-        else
-            m_box.clearOverridingLogicalHeight();
-    }
-
</del><span class="cx">     RenderBox& m_box;
</span><span class="cx">     Axis m_axis;
</span><span class="cx">     std::optional<LayoutUnit> m_overridingWidth;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlexibleBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.h (279273 => 279274)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlexibleBox.h       2021-06-25 09:55:57 UTC (rev 279273)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.h  2021-06-25 11:22:59 UTC (rev 279274)
</span><span class="lines">@@ -89,7 +89,6 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override;
</span><del>-    void computeChildIntrinsicLogicalWidths(RenderObject&, LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override;
</del><span class="cx"> 
</span><span class="cx">     bool shouldResetChildLogicalHeightBeforeLayout(const RenderBox&) const override { return m_shouldResetChildLogicalHeightBeforeLayout; }
</span><span class="cx"> 
</span><span class="lines">@@ -146,6 +145,7 @@
</span><span class="cx">     bool childHasComputableAspectRatio(const RenderBox&) const;
</span><span class="cx">     bool childHasComputableAspectRatioAndCrossSizeIsConsideredDefinite(const RenderBox&);
</span><span class="cx">     bool childCrossSizeShouldUseContainerCrossSize(const RenderBox& child) const;
</span><ins>+    void computeChildIntrinsicLogicalWidths(RenderObject&, LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override;
</ins><span class="cx">     LayoutUnit computeMainSizeFromAspectRatioUsing(const RenderBox& child, Length crossSizeLength) const;
</span><span class="cx">     void setFlowAwareLocationForChild(RenderBox& child, const LayoutPoint&);
</span><span class="cx">     LayoutUnit computeInnerFlexBaseSizeForChild(RenderBox& child, LayoutUnit mainAxisBorderAndPadding);
</span></span></pre>
</div>
</div>

</body>
</html>