Changeset 292559 in webkit
- Timestamp:
- Apr 7, 2022 1:26:01 PM (3 months ago)
- Location:
- trunk
- Files:
-
- 12 added
- 9 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/css/resize-above-min-size-and-below-initial-size-expected.txt (added)
-
LayoutTests/fast/css/resize-above-min-size-and-below-initial-size.html (added)
-
LayoutTests/fast/css/resize-below-min-intrinsic-size-expected.txt (added)
-
LayoutTests/fast/css/resize-below-min-intrinsic-size-large-scrollbars-expected.txt (added)
-
LayoutTests/fast/css/resize-below-min-intrinsic-size-large-scrollbars.html (added)
-
LayoutTests/fast/css/resize-below-min-intrinsic-size.html (added)
-
LayoutTests/fast/css/resize-below-min-size-expected.txt (added)
-
LayoutTests/fast/css/resize-below-min-size-zoomed-expected.txt (added)
-
LayoutTests/fast/css/resize-below-min-size-zoomed.html (added)
-
LayoutTests/fast/css/resize-below-min-size.html (added)
-
LayoutTests/fast/css/resize-orthogonal-containing-block-expected.txt (added)
-
LayoutTests/fast/css/resize-orthogonal-containing-block.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/dom/Element.cpp (modified) (1 diff)
-
Source/WebCore/dom/Element.h (modified) (1 diff)
-
Source/WebCore/dom/ElementRareData.cpp (modified) (1 diff)
-
Source/WebCore/dom/ElementRareData.h (modified) (5 diffs)
-
Source/WebCore/dom/NodeRareData.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayer.cpp (modified) (3 diffs)
-
Source/WebCore/rendering/RenderLayer.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r292553 r292559 1 2022-04-07 Tim Nguyen <ntim@apple.com> 2 3 [CSS resize property] Correct minimum size computation to allow resizing below initial size 4 https://bugs.webkit.org/show_bug.cgi?id=135335 5 6 Reviewed by Simon Fraser. 7 8 Tests ported from the Chromium changeset: https://chromium-review.googlesource.com/c/chromium/src/+/545395/ 9 They've been tweaked to: 10 - not rely on <textarea> 11 - use WPT harness instead of Chrome specific methods 12 - use async functions instead of callbacks 13 14 * fast/css/resize-above-min-size-and-below-initial-size-expected.txt: Added. 15 * fast/css/resize-above-min-size-and-below-initial-size.html: Added. 16 * fast/css/resize-below-min-intrinsic-size-large-scrollbars-expected.txt: Added. 17 * fast/css/resize-below-min-intrinsic-size-large-scrollbars.html: Added. 18 * fast/css/resize-below-min-intrinsic-size-expected.txt: Added. 19 * fast/css/resize-below-min-intrinsic-size.html: Added. 20 * fast/css/resize-below-min-size-expected.txt: Added. 21 * fast/css/resize-below-min-size-zoomed-expected.txt: Added. 22 * fast/css/resize-below-min-size-zoomed.html: Added. 23 * fast/css/resize-below-min-size.html: Added. 24 * fast/css/resize-orthogonal-containing-block-expected.txt: Added. 25 * fast/css/resize-orthogonal-containing-block.html: Added. 26 1 27 2022-04-07 Matteo Flores <matteo_flores@apple.com> 2 28 -
trunk/Source/WebCore/ChangeLog
r292557 r292559 1 2022-04-07 Tim Nguyen <ntim@apple.com> 2 3 [CSS resize property] Correct minimum size computation to allow resizing below initial size 4 https://bugs.webkit.org/show_bug.cgi?id=135335 5 6 Reviewed by Simon Fraser. 7 8 Tests: 9 - LayoutTests/fast/css/resize-above-min-size-and-below-initial-size.html 10 - LayoutTests/fast/css/resize-below-min-intrinsic-size.html 11 - LayoutTests/fast/css/resize-below-min-intrinsic-size-large-scrollbars.html 12 - LayoutTests/fast/css/resize-below-min-size-zoomed.html 13 - LayoutTests/fast/css/resize-below-min-size.html 14 - LayoutTests/fast/css/resize-orthogonal-containing-block.html 15 16 Ports the relevant Chromium changeset with a few tweaks: https://chromium-review.googlesource.com/c/chromium/src/+/545395/ 17 18 The previous minimum size used to be whatever size was there before the first resize, which is wrong, and does not allow 19 resizing below the initial size. It is now based on the min-width/height properties and the scroll corner size. 20 21 It is no longer stored in ElementRareData since it is no longer fixed to the initial element size, but depends on the container 22 on the element style. 23 24 * dom/Element.cpp: 25 (WebCore::Element::minimumSizeForResizing const): Deleted. 26 (WebCore::Element::setMinimumSizeForResizing): Deleted. 27 * dom/Element.h: 28 * dom/ElementRareData.cpp: 29 * dom/ElementRareData.h: 30 (WebCore::ElementRareData::useTypes const): 31 (WebCore::ElementRareData::ElementRareData): 32 (WebCore::defaultMinimumSizeForResizing): Deleted. 33 (WebCore::ElementRareData::minimumSizeForResizing const): Deleted. 34 (WebCore::ElementRareData::setMinimumSizeForResizing): Deleted. 35 * dom/NodeRareData.h: 36 * rendering/RenderLayer.cpp: 37 (WebCore::RenderLayer::minimumSizeForResizing const): 38 (WebCore::RenderLayer::resize): 39 * rendering/RenderLayer.h: 40 1 41 2022-04-07 Simon Fraser <simon.fraser@apple.com> 2 42 -
trunk/Source/WebCore/dom/Element.cpp
r292370 r292559 3376 3376 } 3377 3377 3378 LayoutSize Element::minimumSizeForResizing() const3379 {3380 return hasRareData() ? elementRareData()->minimumSizeForResizing() : defaultMinimumSizeForResizing();3381 }3382 3383 void Element::setMinimumSizeForResizing(const LayoutSize& size)3384 {3385 if (!hasRareData() && size == defaultMinimumSizeForResizing())3386 return;3387 ensureElementRareData().setMinimumSizeForResizing(size);3388 }3389 3390 3378 void Element::willBecomeFullscreenElement() 3391 3379 { -
trunk/Source/WebCore/dom/Element.h
r292210 r292559 448 448 WEBCORE_EXPORT void setPseudo(const AtomString&); 449 449 450 LayoutSize minimumSizeForResizing() const;451 void setMinimumSizeForResizing(const LayoutSize&);452 453 450 // Use Document::registerForDocumentActivationCallbacks() to subscribe to these 454 451 virtual void prepareForDocumentSuspension() { } -
trunk/Source/WebCore/dom/ElementRareData.cpp
r292210 r292559 35 35 36 36 struct SameSizeAsElementRareData : NodeRareData { 37 LayoutSize sizeForResizing;38 37 IntPoint savedLayerScrollPosition; 39 38 Vector<std::unique_ptr<ElementAnimationRareData>> animationRareData; -
trunk/Source/WebCore/dom/ElementRareData.h
r292210 r292559 40 40 namespace WebCore { 41 41 42 inline IntSize defaultMinimumSizeForResizing()43 {44 return IntSize(LayoutUnit::max(), LayoutUnit::max());45 }46 47 42 class ElementRareData : public NodeRareData { 48 43 public: … … 83 78 DatasetDOMStringMap* dataset() const { return m_dataset.get(); } 84 79 void setDataset(std::unique_ptr<DatasetDOMStringMap> dataset) { m_dataset = WTFMove(dataset); } 85 86 LayoutSize minimumSizeForResizing() const { return m_minimumSizeForResizing; }87 void setMinimumSizeForResizing(LayoutSize size) { m_minimumSizeForResizing = size; }88 80 89 81 IntPoint savedLayerScrollPosition() const { return m_savedLayerScrollPosition; } … … 122 114 if (m_unusualTabIndex) 123 115 result.add(UseType::TabIndex); 124 if (m_minimumSizeForResizing != defaultMinimumSizeForResizing())125 result.add(UseType::MinimumSize);126 116 if (!m_savedLayerScrollPosition.isZero()) 127 117 result.add(UseType::ScrollingPosition); … … 163 153 164 154 private: 165 LayoutSize m_minimumSizeForResizing;166 155 IntPoint m_savedLayerScrollPosition; 167 156 std::unique_ptr<RenderStyle> m_computedStyle; … … 197 186 inline ElementRareData::ElementRareData() 198 187 : NodeRareData(Type::Element) 199 , m_minimumSizeForResizing(defaultMinimumSizeForResizing())200 188 { 201 189 } -
trunk/Source/WebCore/dom/NodeRareData.h
r292210 r292559 249 249 MutationObserver = 1 << 1, 250 250 TabIndex = 1 << 2, 251 MinimumSize = 1 << 3, 252 ScrollingPosition = 1 << 4, 253 ComputedStyle = 1 << 5, 254 Dataset = 1 << 6, 255 ClassList = 1 << 7, 256 ShadowRoot = 1 << 8, 257 CustomElementQueue = 1 << 9, 258 AttributeMap = 1 << 10, 259 InteractionObserver = 1 << 11, 260 ResizeObserver = 1 << 12, 261 Animations = 1 << 13, 262 PseudoElements = 1 << 14, 263 StyleMap = 1 << 15, 264 PartList = 1 << 16, 265 PartNames = 1 << 17, 266 Nonce = 1 << 18, 267 ComputedStyleMap = 1 << 19, 251 ScrollingPosition = 1 << 3, 252 ComputedStyle = 1 << 4, 253 Dataset = 1 << 5, 254 ClassList = 1 << 6, 255 ShadowRoot = 1 << 7, 256 CustomElementQueue = 1 << 8, 257 AttributeMap = 1 << 9, 258 InteractionObserver = 1 << 10, 259 ResizeObserver = 1 << 11, 260 Animations = 1 << 12, 261 PseudoElements = 1 << 13, 262 StyleMap = 1 << 14, 263 PartList = 1 << 15, 264 PartNames = 1 << 16, 265 Nonce = 1 << 17, 266 ComputedStyleMap = 1 << 18, 268 267 }; 269 268 #endif -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r292525 r292559 2745 2745 } 2746 2746 2747 LayoutSize RenderLayer::minimumSizeForResizing(float zoomFactor) const 2748 { 2749 // Use the resizer size as the strict minimum size 2750 auto resizerRect = overflowControlsRects().resizer; 2751 LayoutUnit minWidth = minimumValueForLength(renderer().style().minWidth(), renderer().containingBlock()->width()); 2752 LayoutUnit minHeight = minimumValueForLength(renderer().style().minHeight(), renderer().containingBlock()->height()); 2753 minWidth = std::max(LayoutUnit(minWidth / zoomFactor), LayoutUnit(resizerRect.width())); 2754 minHeight = std::max(LayoutUnit(minHeight / zoomFactor), LayoutUnit(resizerRect.height())); 2755 return LayoutSize(minWidth, minHeight); 2756 } 2757 2747 2758 void RenderLayer::resize(const PlatformMouseEvent& evt, const LayoutSize& oldOffset) 2748 2759 { … … 2768 2779 newOffset.setWidth(newOffset.width() / zoomFactor); 2769 2780 newOffset.setHeight(newOffset.height() / zoomFactor); 2770 2781 2771 2782 LayoutSize currentSize = LayoutSize(renderer->width() / zoomFactor, renderer->height() / zoomFactor); 2772 LayoutSize minimumSize = element->minimumSizeForResizing().shrunkTo(currentSize); 2773 element->setMinimumSizeForResizing(minimumSize); 2774 2783 2775 2784 LayoutSize adjustedOldOffset = LayoutSize(oldOffset.width() / zoomFactor, oldOffset.height() / zoomFactor); 2776 2785 if (renderer->shouldPlaceVerticalScrollbarOnLeft()) { … … 2778 2787 adjustedOldOffset.setWidth(-adjustedOldOffset.width()); 2779 2788 } 2780 2781 LayoutSize difference = (currentSize + newOffset - adjustedOldOffset).expandedTo(minimumSize ) - currentSize;2789 2790 LayoutSize difference = (currentSize + newOffset - adjustedOldOffset).expandedTo(minimumSizeForResizing(zoomFactor)) - currentSize; 2782 2791 2783 2792 StyledElement* styledElement = downcast<StyledElement>(element); -
trunk/Source/WebCore/rendering/RenderLayer.h
r292525 r292559 479 479 480 480 bool canResize() const; 481 LayoutSize minimumSizeForResizing(float zoomFactor) const; 481 482 void resize(const PlatformMouseEvent&, const LayoutSize&); 482 483 bool inResizeMode() const { return m_inResizeMode; }
Note: See TracChangeset
for help on using the changeset viewer.