Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 6fa5a22eeca90d4396d6e6a14e600b672aab49a4 https://github.com/WebKit/WebKit/commit/6fa5a22eeca90d4396d6e6a14e600b672aab49a4 Author: Tyler Wilcock <tyle...@apple.com> Date: 2023-04-28 (Fri, 28 Apr 2023)
Changed paths: M Source/WebCore/Headers.cmake M Source/WebCore/Sources.txt M Source/WebCore/WebCore.xcodeproj/project.pbxproj M Source/WebCore/dom/Document.cpp M Source/WebCore/dom/Document.h M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp M Source/WebCore/page/LocalFrameView.cpp M Source/WebCore/page/LocalFrameView.h M Source/WebCore/page/RemoteFrameView.cpp M Source/WebCore/page/RemoteFrameView.h M Source/WebCore/platform/ScrollView.cpp M Source/WebCore/platform/ScrollView.h M Source/WebCore/platform/Scrollbar.cpp M Source/WebCore/platform/Scrollbar.h M Source/WebCore/platform/Widget.cpp M Source/WebCore/platform/Widget.h M Source/WebCore/platform/gtk/WidgetGtk.cpp M Source/WebCore/platform/ios/WidgetIOS.mm M Source/WebCore/platform/mac/WidgetMac.mm M Source/WebCore/platform/win/WidgetWin.cpp A Source/WebCore/rendering/AccessibilityRegionContext.cpp A Source/WebCore/rendering/AccessibilityRegionContext.h M Source/WebCore/rendering/EventRegion.cpp M Source/WebCore/rendering/EventRegion.h M Source/WebCore/rendering/LegacyInlineElementBox.cpp M Source/WebCore/rendering/LegacyInlineFlowBox.cpp M Source/WebCore/rendering/PaintInfo.h M Source/WebCore/rendering/PaintPhase.h A Source/WebCore/rendering/RegionContext.cpp A Source/WebCore/rendering/RegionContext.h M Source/WebCore/rendering/RenderBlock.cpp M Source/WebCore/rendering/RenderBox.cpp M Source/WebCore/rendering/RenderElement.cpp M Source/WebCore/rendering/RenderLayer.cpp M Source/WebCore/rendering/RenderLayer.h M Source/WebCore/rendering/RenderLayerBacking.cpp M Source/WebCore/rendering/RenderLayerBacking.h M Source/WebCore/rendering/RenderListMarker.cpp M Source/WebCore/rendering/RenderReplaced.cpp M Source/WebCore/rendering/RenderScrollbar.cpp M Source/WebCore/rendering/RenderScrollbar.h M Source/WebCore/rendering/RenderWidget.cpp M Source/WebCore/rendering/TextBoxPainter.cpp M Source/WebKit/WebProcess/Plugins/PluginView.cpp M Source/WebKit/WebProcess/Plugins/PluginView.h Log Message: ----------- Add PaintPhase::Accessibility and AccessibilityRegionContext to enable AX element bounding-box caching https://bugs.webkit.org/show_bug.cgi?id=255076 rdar://problem/107694492 Reviewed by Simon Fraser. Accessibility needs to cache the bounding box of non-accessibility-is-ignored elements on the secondary AX thread. To get these bounding-boxes, this patch adds a new accessibility paint phase with the intention of triggering this paint phase in `Page::doAfterUpdateRendering` (which will be done in a future patch) just as event regions do. To accomplish this, this patch refactors `EventRegionContext`s clip stack and transform stack maintenance into a new `RegionContext` base class. `EventRegionContext` now derives from `RegionContext` along with a new `AccessibilityRegionContext` class. `AccessibilityRegionContext` will take the bounds generated by painting, apply transforms and clips, and usher this information elsewhere to be used to update accessibility data structures (with that last step coming in a later patch). * Source/WebCore/Headers.cmake: Add AccessibilityRegionContext.h and RegionContext.h. * Source/WebCore/Sources.txt: Add AccessibilityRegionContext.cpp and RegionContext.cpp. * Source/WebCore/WebCore.xcodeproj/project.pbxproj: Add AccessibilityRegionContext.{h, cpp} and RegionContext.{h, cpp} * Source/WebCore/dom/Document.h: * Source/WebCore/dom/Document.cpp: (WebCore::Document::updateAccessibilityObjectRegions): Added. * Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp: (WebCore::LayoutIntegration::LineLayout::paint): Paint for PaintPhase::Accessibility. * Source/WebCore/page/LocalFrameView.cpp: (WebCore::LocalFrameView::updateAccessibilityObjectRegions): Added. (WebCore::LocalFrameView::paintContents): * Source/WebCore/page/LocalFrameView.h: * Source/WebCore/page/RemoteFrameView.cpp: (WebCore::RemoteFrameView::paintContents): * Source/WebCore/page/RemoteFrameView.h: * Source/WebCore/platform/ScrollView.cpp: (WebCore::ScrollView::paint): * Source/WebCore/platform/ScrollView.h: * Source/WebCore/platform/Scrollbar.cpp: (WebCore::Scrollbar::paint): * Source/WebCore/platform/Scrollbar.h: * Source/WebCore/platform/Widget.cpp: * Source/WebCore/platform/gtk/WidgetGtk.cpp: * Source/WebCore/platform/win/WidgetWin.cpp: (WebCore::Widget::paint): * Source/WebCore/platform/Widget.h: * Source/WebCore/platform/ios/WidgetIOS.mm: (WebCore::Widget::paint): * Source/WebCore/platform/mac/WidgetMac.mm: (WebCore::Widget::paint): Accept a `RegionContext*` parameter instead of an `EventRegionContext*`. * Source/WebCore/rendering/AccessibilityRegionContext.cpp: Added. (WebCore::AccessibilityRegionContext::takeBounds): * Source/WebCore/rendering/AccessibilityRegionContext.h: Added. (WebCore::AccessibilityRegionContext::mapRect): * Source/WebCore/rendering/EventRegion.h: * Source/WebCore/rendering/EventRegion.cpp: (WebCore::EventRegionContext::pushTransform): Deleted. (WebCore::EventRegionContext::popTransform): Deleted. (WebCore::EventRegionContext::pushClip): Deleted. (WebCore::EventRegionContext::popClip): Deleted. These functions and their associated state are moved to the newly added base class, `RegionContext`. (WebCore::EventRegionContextStateSaver::EventRegionContextStateSaver): Deleted. (WebCore::EventRegionContextStateSaver::~EventRegionContextStateSaver): Deleted. (WebCore::EventRegionContextStateSaver::pushClip): Deleted. (WebCore::EventRegionContextStateSaver::context const): Deleted. Replaced by the equivalent and new-to-this-patch `RegionContextStateSaver`. * Source/WebCore/rendering/LegacyInlineElementBox.cpp: (WebCore::LegacyInlineElementBox::paint): * Source/WebCore/rendering/LegacyInlineFlowBox.cpp: (WebCore::LegacyInlineFlowBox::paint): Avoid early return when painting for PaintPhase::Accessibility. * Source/WebCore/rendering/RegionContext.h: Added. * Source/WebCore/rendering/RegionContext.cpp: Added. (WebCore::RegionContext::pushTransform): (WebCore::RegionContext::popTransform): (WebCore::RegionContext::pushClip): (WebCore::RegionContext::popClip): Replaces equivalent functionality that used to be in `EventRegionContext`. (WebCore::RegionContext::isEventRegionContext const): (WebCore::RegionContext::isAccessibilityRegionContext const): (WebCore::RegionContextStateSaver::RegionContextStateSaver): (WebCore::RegionContextStateSaver::~RegionContextStateSaver): (WebCore::RegionContextStateSaver::pushClip): (WebCore::RegionContextStateSaver::context const): Replaces equivalent functionality that used to be in `EventRegionContextStateSaver`. * Source/WebCore/rendering/PaintInfo.h: Store a `RegionContext*` rather than an `EventRegionContext*`. (WebCore::PaintInfo::eventRegionPaintContext): Added. (WebCore::PaintInfo::accessibilityPaintContext): Added. * Source/WebCore/rendering/PaintPhase.h: Add new PaintPhase::Accessibility. * Source/WebCore/rendering/RenderBlock.cpp: (WebCore::RenderBlock::paintContents): Check for non-null event region paint context to maintain existing behavior. (WebCore::RenderBlock::paintObject): Give the paint-rect of this `RenderBlock` to the `AccessibilityRegionContext` if present. Handle new `PaintPhase::Accessibility`. * Source/WebCore/rendering/RenderBox.cpp: (WebCore::RenderBox::pushContentsClip): (WebCore::RenderBox::popContentsClip): Push and pop clip for both `PaintPhase::Accessibility` and `PaintPhase::EventRegion`. * Source/WebCore/rendering/RenderElement.cpp: (WebCore::RenderElement::paintAsInlineBlock): Allow paint for `PaintPhase::Accessibility`. * Source/WebCore/rendering/RenderLayer.cpp: (WebCore::RenderLayer::paint): (WebCore::RenderLayer::clipToRect): (WebCore::RenderLayer::paintLayerWithEffects): (WebCore::RenderLayer::setupClipPath): (WebCore::RenderLayer::applyFilters): (WebCore::RenderLayer::paintLayerContents): (WebCore::RenderLayer::paintLayerByApplyingTransform): (WebCore::RenderLayer::paintTransformedLayerIntoFragments): (WebCore::RenderLayer::paintBackgroundForFragments): (WebCore::RenderLayer::paintForegroundForFragments): (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase): (WebCore::RenderLayer::paintOutlineForFragments): (WebCore::RenderLayer::paintMaskForFragments): (WebCore::RenderLayer::paintChildClippingMaskForFragments): (WebCore::RenderLayer::paintOverflowControlsForFragments): (WebCore::RenderLayer::collectEventRegionForFragments): (WebCore::RenderLayer::collectAccessibilityRegionsForFragments): Added. Replace usage of `EventRegionContextStateSaver` with `RegionContextStateSaver`. Check for the presence of `EventRegionContext` when appropriate to maintain existing behavior. * Source/WebCore/rendering/RenderLayer.h: (WebCore::RenderLayer::paint): Accept a `RegionContext*` parameter instead of an `EventRegionContext*`. Store a `RegionContext*` rather than an `EventRegionContext*` in `struct LayerPaintingInfo`. * Source/WebCore/rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::paintIntoLayer): * Source/WebCore/rendering/RenderLayerBacking.h: Accept a `RegionContext*` parameter instead of an `EventRegionContext*`. Replace usage of `EventRegionContextStateSaver` with `RegionContextStateSaver`. * Source/WebCore/rendering/RenderListMarker.cpp: (WebCore::RenderListMarker::paint): Paint for `PaintPhase::Accessibility`. * Source/WebCore/rendering/RenderReplaced.cpp: (WebCore::RenderReplaced::paint): (WebCore::RenderReplaced::shouldPaint): Paint for `PaintPhase::Accessibility`. * Source/WebCore/rendering/RenderScrollbar.h: * Source/WebCore/rendering/RenderScrollbar.cpp: (WebCore::RenderScrollbar::paint): Accept a `RegionContext*` parameter instead of an `EventRegionContext*`. * Source/WebCore/rendering/RenderWidget.cpp: (WebCore::RenderWidget::paintContents): (WebCore::RenderWidget::paint): Return early before actual paint for `PaintPhase::Accessibility`. * Source/WebCore/rendering/TextBoxPainter.cpp: (WebCore::TextBoxPainter<TextBoxPath>::TextBoxPainter): (WebCore::TextBoxPainter<TextBoxPath>::paint): Allow paint for `PaintPhase::Accessibility` in ASSERT (we will need to handle these paints in a future patch). * Source/WebKit/WebProcess/Plugins/PluginView.h: * Source/WebKit/WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::paint): Accept a `RegionContext*` parameter instead of an `EventRegionContext*`. Canonical link: https://commits.webkit.org/263493@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes