haikuwebkit/LayoutTests/compositing/layer-creation/mismatched-transform-transi...

1722 lines
42 KiB
Plaintext
Raw Permalink Normal View History

Reduce the side-effects of animations turning off overlap testing https://bugs.webkit.org/show_bug.cgi?id=92791 Reviewed by Dean Jackson. Source/WebCore: When a layer is running a transition or animation of the transform property, we would simply disable overlap testing for later layers, which had the side-effect of promoting lots of unrelated elements into layers temporarily. Fix by maintaining overlap, but computing an overlap extent that takes the animation into account. Rotations are currently treated as full rotations. If an extent for the overlap is hard to compute (e.g. 3d transforms, or matrix animations with a rotation component), then we fall back to the current behavior. Tests: compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html compositing/layer-creation/mismatched-transform-transition-overlap.html compositing/layer-creation/multiple-keyframes-animation-overlap.html compositing/layer-creation/scale-rotation-animation-overlap.html compositing/layer-creation/scale-rotation-transition-overlap.html compositing/layer-creation/translate-animation-overlap.html compositing/layer-creation/translate-scale-animation-overlap.html compositing/layer-creation/translate-scale-transition-overlap.html compositing/layer-creation/translate-transition-overlap.html * page/animation/AnimationBase.cpp: (WebCore::containsRotation): (WebCore::AnimationBase::computeTransformedExtentViaTransformList): When we have matched transform lists, we can map a rectangle through the various operations. Transform-origin is used to shift the origin of the box first, and then unshift after. If we encounter a rotation, for now assume it's a full rotation (a future patch could tighten this up). (WebCore::AnimationBase::computeTransformedExtentViaMatrix): If we're using matrix interpolation, we have to decompose the matrix to see if there's any rotation component, and, if there is, fall back to current behavior. * page/animation/AnimationBase.h: * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::computeExtentOfAnimation): (WebCore::AnimationController::computeExtentOfAnimation): * page/animation/AnimationController.h: * page/animation/AnimationControllerPrivate.h: * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::computeExtentOfTransformAnimation): Ask active keyframe animations and transitions to compute the bounds extent. * page/animation/CompositeAnimation.h: * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation): Compute the extent of the start and end transforms, and union them. * page/animation/ImplicitAnimation.h: * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::animate): (WebCore::KeyframeAnimation::getAnimatedStyle): Some nullptr goodness. (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation): Compute an extent for each keyframe, and take their union. * page/animation/KeyframeAnimation.h: * platform/graphics/GeometryUtilities.cpp: (WebCore::euclidianDistance): Use Pythagoras to compute a distance. (WebCore::boundsOfRotatingRect): Given a rect whose location is relative to the rotation origin, compute a bounds for the rotated rect by computing the furthest corner from the origin, and sweeping out a circle. * platform/graphics/GeometryUtilities.h: * platform/graphics/transforms/Matrix3DTransformOperation.h: * platform/graphics/transforms/MatrixTransformOperation.h: * platform/graphics/transforms/PerspectiveTransformOperation.h: * platform/graphics/transforms/RotateTransformOperation.h: * platform/graphics/transforms/ScaleTransformOperation.h: * platform/graphics/transforms/SkewTransformOperation.h: * platform/graphics/transforms/TransformOperation.h: (WebCore::TransformOperation::isAffectedByTransformOrigin): * platform/graphics/transforms/TransformOperations.cpp: (WebCore::TransformOperations::affectedByTransformOrigin): Ask all the operations if they are affected by transform-origin. (WebCore::TransformOperations::blendByMatchingOperations): nullptr. * platform/graphics/transforms/TransformOperations.h: * rendering/RenderBox.cpp: (WebCore::RenderBox::pushMappingToContainer): Comment fix. Only take transforms into account if the geometry map says so (which is most of the time). * rendering/RenderGeometryMap.cpp: (WebCore::RenderGeometryMap::mapToContainer): RenderLayerCompositor is now using the geometry map in a way that is incompatible with this assertion; it deliberately ignores transforms sometimes, so we can't easily verify that the mapping matches mapping through renderers. (WebCore::RenderGeometryMap::pushMappingsToAncestor): Save and restore the UseTransforms bit. * rendering/RenderGeometryMap.h: * rendering/RenderLayer.cpp: (WebCore::RenderLayer::boundingBox): Whitespace. (WebCore::RenderLayer::getOverlapBoundsIncludingChildrenAccountingForTransformAnimations): Helper function to get the bounds of a layer, including descendants, when a transform animation is running. * rendering/RenderLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::CompositingState::CompositingState): Add a ancestorHasTransformAnimation flag to detect nested animated transforms. (WebCore::RenderLayerCompositor::OverlapExtent::knownToBeHaveExtentUncertainty): This returns true when the layer is animating transform, and the transition/animation is such that we can't easily compute the bounds of the animation. (WebCore::RenderLayerCompositor::computeExtent): const RenderLayer&. Compute the animated bounds if there's a transform animation running. (WebCore::RenderLayerCompositor::addToOverlapMap): const RenderLayer& (WebCore::RenderLayerCompositor::addToOverlapMapRecursive): const RenderLayer& (WebCore::RenderLayerCompositor::computeCompositingRequirements): Delay the call to pushMappingsToAncestor() until knowing if there's a transform animation running, and if there is, push the mapping while ignoring transforms (since the transform is implicitly taken into account for overlap via the computed animated bounds). If this layer is running a transform animation, set the childState.ancestorHasTransformAnimation flag so that descendants will know (nested transform animations fall back to current behavior). The if (.... && isRunningAcceleratedTransformAnimation()) is what previously caused us to turn off overlap testing in the face of animations. That now only happens if we were unable to easily compute the animation bounds. (WebCore::RenderLayerCompositor::isRunningTransformAnimation): This previously tested whether an accelerated animation was running, but that's timing sensitive; AnimationController can start the transform animation, but it's not yet considered accelerated until we get an async callback from GraphicsLayer, yet this code needed to know if the animation was running. Since transform animations are always accelerated, we can just test for a running transform animation. (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation): Deleted. * rendering/RenderLayerCompositor.h: * rendering/style/RenderStyle.cpp: (WebCore::requireTransformOrigin): Some FIXME comments. LayoutTests: These test overlay an animated element with a grid of position: relative squares. These reveal the overlap area by selectively getting composited. * compositing/layer-creation/animation-overlap-with-children-expected.txt: * compositing/layer-creation/mismatched-rotated-transform-animation-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html: Added. * compositing/layer-creation/mismatched-rotated-transform-transition-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html: Added. * compositing/layer-creation/mismatched-transform-transition-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-transform-transition-overlap.html: Added. * compositing/layer-creation/multiple-keyframes-animation-overlap-expected.txt: Added. * compositing/layer-creation/multiple-keyframes-animation-overlap.html: Added. * compositing/layer-creation/scale-rotation-animation-overlap-expected.txt: Added. * compositing/layer-creation/scale-rotation-animation-overlap.html: Added. * compositing/layer-creation/scale-rotation-transition-overlap-expected.txt: Added. * compositing/layer-creation/scale-rotation-transition-overlap.html: Added. * compositing/layer-creation/translate-animation-overlap-expected.txt: Added. * compositing/layer-creation/translate-animation-overlap.html: Added. * compositing/layer-creation/translate-scale-animation-overlap-expected.txt: Added. * compositing/layer-creation/translate-scale-animation-overlap.html: Added. * compositing/layer-creation/translate-scale-transition-overlap-expected.txt: Added. * compositing/layer-creation/translate-scale-transition-overlap.html: Added. * compositing/layer-creation/translate-transition-overlap-expected.txt: Added. * compositing/layer-creation/translate-transition-overlap.html: Added. Canonical link: https://commits.webkit.org/160718@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181515 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-15 23:07:37 +00:00
(GraphicsLayer
(anchor 0.00 0.00)
(bounds 800.00 600.00)
(children 1
(GraphicsLayer
(bounds 800.00 600.00)
(contentsOpaque 1)
(children 341
(GraphicsLayer
Make GraphicsLayer::dumpProperties dump m_offsetFromRenderer https://bugs.webkit.org/show_bug.cgi?id=180473 Source/WebCore: Patch by Frederic Wang <fwang@igalia.com> on 2017-12-14 Reviewed by Antonio Gomes. No new tests, this is just a new debug info. * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::dumpProperties const): Dump the offset from renderer if nonzero. LayoutTests: Update test expectations to include the "offset from renderer" values. Existing tests insert the output of layerTreeAsText into some divs which may cause the corresponding GraphicsLayers to become slightly taller. We thus make the necessary adjustments. Patch by Frederic Wang <fwang@igalia.com> on 2017-12-14 Reviewed by Antonio Gomes. * compositing/backing/no-backing-for-clip-expected.txt: * compositing/backing/no-backing-for-clip-overlap-expected.txt: * compositing/backing/transform-transition-from-outside-view-expected.txt: * compositing/bounds-in-flipped-writing-mode-expected.txt: * compositing/columns/composited-in-paginated-rl-expected.txt: * compositing/columns/composited-lr-paginated-repaint-expected.txt: * compositing/columns/composited-rl-paginated-repaint-expected.txt: * compositing/contents-format/subpixel-antialiased-nested-layer-expected.txt: * compositing/contents-format/subpixel-antialiased-text-configs-antialiasing-style-expected.txt: * compositing/contents-format/subpixel-antialiased-text-configs-expected.txt: * compositing/contents-format/subpixel-antialiased-text-images-expected.txt: * compositing/contents-format/subpixel-antialiased-text-traversal-expected.txt: * compositing/contents-format/subpixel-antialiased-text-visibility-expected.txt: * compositing/contents-opaque/overflow-hidden-child-layers-expected.txt: * compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt: * compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt: * compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt: * compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt: * compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt: * compositing/geometry/bounds-ignores-hidden-expected.txt: * compositing/geometry/clip-expected.txt: * compositing/geometry/clip-inside-expected.txt: * compositing/geometry/fixed-position-flipped-writing-mode-expected.txt: * compositing/geometry/flipped-writing-mode-expected.txt: * compositing/geometry/foreground-layer-expected.txt: * compositing/geometry/limit-layer-bounds-clipping-ancestor-expected.txt: * compositing/geometry/limit-layer-bounds-fixed-expected.txt: * compositing/geometry/limit-layer-bounds-fixed-positioned-expected.txt: * compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt: * compositing/geometry/limit-layer-bounds-positioned-expected.txt: * compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt: * compositing/geometry/limit-layer-bounds-transformed-expected.txt: * compositing/iframes/composited-parent-iframe-expected.txt: * compositing/iframes/connect-compositing-iframe-delayed-expected.txt: * compositing/iframes/connect-compositing-iframe-expected.txt: * compositing/iframes/connect-compositing-iframe2-expected.txt: * compositing/iframes/connect-compositing-iframe3-expected.txt: * compositing/iframes/enter-compositing-iframe-expected.txt: * compositing/iframes/iframe-resize-expected.txt: * compositing/iframes/overlapped-iframe-expected.txt: * compositing/iframes/page-cache-layer-tree-expected.txt: * compositing/iframes/scrolling-iframe-expected.txt: * compositing/images/clip-on-directly-composited-image-expected.txt: * compositing/ios/overflow-scroll-touch-tiles-expected.txt: * compositing/layer-creation/fixed-overlap-extent-expected.txt: * compositing/layer-creation/fixed-overlap-extent-rtl-expected.txt: * compositing/layer-creation/fixed-position-under-transform-expected.txt: * compositing/layer-creation/mismatched-rotated-transform-animation-overlap-expected.txt: * compositing/layer-creation/mismatched-rotated-transform-transition-overlap-expected.txt: * compositing/layer-creation/mismatched-transform-transition-overlap-expected.txt: * compositing/layer-creation/multiple-keyframes-animation-overlap-expected.txt: * compositing/layer-creation/overflow-scroll-overlap-expected.txt: * compositing/layer-creation/overlap-animation-clipping-expected.txt: * compositing/layer-creation/overlap-animation-expected.txt: * compositing/layer-creation/overlap-child-layer-expected.txt: * compositing/layer-creation/overlap-transformed-layer-expected.txt: * compositing/layer-creation/overlap-transforms-expected.txt: * compositing/layer-creation/rotate3d-overlap-expected.txt: * compositing/layer-creation/scale-rotation-animation-overlap-expected.txt: * compositing/layer-creation/scale-rotation-transition-overlap-expected.txt: * compositing/layer-creation/stacking-context-overlap-nested-expected.txt: * compositing/layer-creation/translate-animation-overlap-expected.txt: * compositing/layer-creation/translate-scale-animation-overlap-expected.txt: * compositing/layer-creation/translate-scale-transition-overlap-expected.txt: * compositing/layer-creation/translate-transition-overlap-expected.txt: * compositing/layer-creation/will-change-layer-creation-expected.txt: * compositing/overflow/clip-descendents-expected.txt: * compositing/overflow/overflow-scrollbar-layer-positions-expected.txt: * compositing/repaint/fixed-background-scroll-expected.txt: * compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint-expected.txt: * compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt: * compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt: * compositing/repaint/repaint-on-layer-grouping-change-expected.txt: * compositing/rtl/rtl-absolute-overflow-expected.txt: * compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt: * compositing/rtl/rtl-scrolling-with-transformed-descendants-expected.txt: * compositing/scrolling/touch-scroll-to-clip-expected.txt: * compositing/tiling/tiled-mask-inwindow-expected.txt: * compositing/tiling/tiled-reflection-inwindow-expected.txt: * compositing/tiling/transform-origin-tiled-expected.txt: * compositing/visible-rect/coverage-clipped-expected.txt: * compositing/visible-rect/coverage-scrolling-expected.txt: * fast/scrolling/ios/overflow-scroll-touch-expected.txt: * fast/scrolling/ios/subpixel-overflow-scrolling-with-ancestor-expected.txt: * platform/gtk/compositing/geometry/composited-in-columns-expected.txt: * platform/gtk/compositing/iframes/invisible-nested-iframe-show-expected.txt: * platform/gtk/compositing/layer-creation/overlap-animation-container-expected.txt: * platform/gtk/compositing/layer-creation/overlap-animation-expected.txt: * platform/gtk/compositing/layer-creation/will-change-layer-creation-expected.txt: * platform/gtk/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: * platform/gtk/compositing/overflow/composited-scrolling-paint-phases-expected.txt: * platform/ios-wk2/compositing/backing/no-backing-for-clip-expected.txt: * platform/ios-wk2/compositing/backing/no-backing-for-clip-overlap-expected.txt: * platform/ios-wk2/compositing/columns/composited-in-paginated-rl-expected.txt: * platform/ios-wk2/compositing/columns/composited-lr-paginated-repaint-expected.txt: * platform/ios-wk2/compositing/columns/composited-rl-paginated-repaint-expected.txt: * platform/ios-wk2/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt: * platform/ios-wk2/compositing/geometry/composited-in-columns-expected.txt: * platform/ios-wk2/compositing/geometry/limit-layer-bounds-fixed-expected.txt: * platform/ios-wk2/compositing/geometry/limit-layer-bounds-fixed-positioned-expected.txt: * platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt: * platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt: * platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt: * platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt: * platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt: * platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt: * platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt: * platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt: * platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt: * platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt: * platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt: * platform/ios-wk2/compositing/layer-creation/fixed-position-under-transform-expected.txt: * platform/ios-wk2/compositing/repaint/fixed-background-scroll-expected.txt: * platform/ios-wk2/compositing/rtl/rtl-absolute-overflow-expected.txt: * platform/ios-wk2/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt: * platform/ios-wk2/compositing/rtl/rtl-fixed-overflow-expected.txt: * platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt: * platform/ios-wk2/compositing/scrolling/touch-scroll-to-clip-expected.txt: * platform/ios-wk2/compositing/tiling/backface-preserve-3d-tiled-expected.txt: * platform/ios-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt: * platform/ios-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: * platform/ios-wk2/compositing/tiling/tiled-mask-inwindow-expected.txt: * platform/ios-wk2/compositing/tiling/tiled-reflection-inwindow-expected.txt: * platform/ios-wk2/compositing/tiling/transform-origin-tiled-expected.txt: * platform/ios-wk2/compositing/visibility/visibility-image-layers-dynamic-expected.txt: * platform/ios-wk2/compositing/visible-rect/2d-transformed-expected.txt: * platform/ios-wk2/compositing/visible-rect/3d-transformed-expected.txt: * platform/ios-wk2/compositing/visible-rect/clipped-visible-rect-expected.txt: * platform/ios-wk2/compositing/visible-rect/coverage-clipped-expected.txt: * platform/ios-wk2/compositing/visible-rect/coverage-scrolling-expected.txt: * platform/ios-wk2/compositing/visible-rect/flipped-preserve-3d-expected.txt: * platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt: * platform/ios-wk2/compositing/visible-rect/nested-transform-expected.txt: * platform/ios/compositing/contents-format/subpixel-antialiased-nested-layer-expected.txt: * platform/ios/compositing/contents-format/subpixel-antialiased-text-traversal-expected.txt: * platform/ios/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt: * platform/ios/compositing/geometry/fixed-position-flipped-writing-mode-expected.txt: * platform/ios/compositing/geometry/limit-layer-bounds-clipping-ancestor-expected.txt: * platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt: * platform/ios/compositing/images/clip-on-directly-composited-image-expected.txt: * platform/ios/compositing/layer-creation/overlap-animation-clipping-expected.txt: * platform/ios/compositing/layer-creation/overlap-animation-container-expected.txt: * platform/ios/compositing/layer-creation/scale-rotation-animation-overlap-expected.txt: * platform/ios/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt: * platform/ios/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: * platform/ios/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt: * platform/ios/compositing/rtl/rtl-scrolling-with-transformed-descendants-expected.txt: * platform/ios/compositing/visible-rect/3d-transform-style-expected.txt: * platform/ios/compositing/visible-rect/animated-expected.txt: * platform/ios/compositing/visible-rect/animated-from-none-expected.txt: * platform/ios/fast/scrolling/ios/overflow-scrolling-ancestor-clip-expected.txt: * platform/ios/fast/scrolling/ios/overflow-scrolling-ancestor-clip-size-expected.txt: * platform/ios/fast/scrolling/ios/textarea-scroll-touch-expected.txt: * platform/ios/media/video-play-glyph-composited-outside-overflow-scrolling-touch-container-expected.txt: * platform/mac-elcapitan/compositing/contents-opaque/control-layer-expected.txt: * platform/mac-elcapitan/compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint-expected.txt: * platform/mac-sierra-wk1/compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint-expected.txt: * platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt: * platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt: * platform/mac-wk1/compositing/tiling/tiled-mask-inwindow-expected.txt: * platform/mac-wk1/compositing/tiling/tiled-reflection-inwindow-expected.txt: * platform/mac-wk1/compositing/tiling/transform-origin-tiled-expected.txt: * platform/mac-wk2/compositing/rtl/rtl-absolute-overflow-expected.txt: * platform/mac-wk2/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt: * platform/mac-wk2/compositing/rtl/rtl-fixed-overflow-expected.txt: * platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt: * platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: * platform/mac/compositing/contents-format/subpixel-antialiased-text-configs-antialiasing-style-expected.txt: * platform/mac/compositing/contents-format/subpixel-antialiased-text-configs-expected.txt: * platform/mac/compositing/contents-format/subpixel-antialiased-text-images-expected.txt: * platform/mac/compositing/contents-format/subpixel-antialiased-text-traversal-expected.txt: * platform/mac/compositing/contents-format/subpixel-antialiased-text-visibility-expected.txt: * platform/mac/compositing/contents-opaque/control-layer-expected.txt: * platform/mac/compositing/geometry/composited-in-columns-expected.txt: * platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt: * platform/mac/compositing/layer-creation/overlap-animation-container-expected.txt: * platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt: * platform/mac/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: * platform/mac/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt: * platform/mac/compositing/tiling/backface-preserve-3d-tiled-expected.txt: * platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt: * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: * platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt: * platform/mac/compositing/visible-rect/2d-transformed-expected.txt: * platform/mac/compositing/visible-rect/3d-transform-style-expected.txt: * platform/mac/compositing/visible-rect/3d-transformed-expected.txt: * platform/mac/compositing/visible-rect/animated-expected.txt: * platform/mac/compositing/visible-rect/animated-from-none-expected.txt: * platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt: * platform/mac/compositing/visible-rect/flipped-preserve-3d-expected.txt: * platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt: * platform/mac/compositing/visible-rect/nested-transform-expected.txt: * tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt: * tiled-drawing/scrolling/frames/fixed-inside-frame-expected.txt: * tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt: Canonical link: https://commits.webkit.org/196699@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225897 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-12-14 09:39:59 +00:00
(offsetFromRenderer width=-14 height=-14)
Reduce the side-effects of animations turning off overlap testing https://bugs.webkit.org/show_bug.cgi?id=92791 Reviewed by Dean Jackson. Source/WebCore: When a layer is running a transition or animation of the transform property, we would simply disable overlap testing for later layers, which had the side-effect of promoting lots of unrelated elements into layers temporarily. Fix by maintaining overlap, but computing an overlap extent that takes the animation into account. Rotations are currently treated as full rotations. If an extent for the overlap is hard to compute (e.g. 3d transforms, or matrix animations with a rotation component), then we fall back to the current behavior. Tests: compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html compositing/layer-creation/mismatched-transform-transition-overlap.html compositing/layer-creation/multiple-keyframes-animation-overlap.html compositing/layer-creation/scale-rotation-animation-overlap.html compositing/layer-creation/scale-rotation-transition-overlap.html compositing/layer-creation/translate-animation-overlap.html compositing/layer-creation/translate-scale-animation-overlap.html compositing/layer-creation/translate-scale-transition-overlap.html compositing/layer-creation/translate-transition-overlap.html * page/animation/AnimationBase.cpp: (WebCore::containsRotation): (WebCore::AnimationBase::computeTransformedExtentViaTransformList): When we have matched transform lists, we can map a rectangle through the various operations. Transform-origin is used to shift the origin of the box first, and then unshift after. If we encounter a rotation, for now assume it's a full rotation (a future patch could tighten this up). (WebCore::AnimationBase::computeTransformedExtentViaMatrix): If we're using matrix interpolation, we have to decompose the matrix to see if there's any rotation component, and, if there is, fall back to current behavior. * page/animation/AnimationBase.h: * page/animation/AnimationController.cpp: (WebCore::AnimationControllerPrivate::computeExtentOfAnimation): (WebCore::AnimationController::computeExtentOfAnimation): * page/animation/AnimationController.h: * page/animation/AnimationControllerPrivate.h: * page/animation/CompositeAnimation.cpp: (WebCore::CompositeAnimation::computeExtentOfTransformAnimation): Ask active keyframe animations and transitions to compute the bounds extent. * page/animation/CompositeAnimation.h: * page/animation/ImplicitAnimation.cpp: (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation): Compute the extent of the start and end transforms, and union them. * page/animation/ImplicitAnimation.h: * page/animation/KeyframeAnimation.cpp: (WebCore::KeyframeAnimation::animate): (WebCore::KeyframeAnimation::getAnimatedStyle): Some nullptr goodness. (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation): Compute an extent for each keyframe, and take their union. * page/animation/KeyframeAnimation.h: * platform/graphics/GeometryUtilities.cpp: (WebCore::euclidianDistance): Use Pythagoras to compute a distance. (WebCore::boundsOfRotatingRect): Given a rect whose location is relative to the rotation origin, compute a bounds for the rotated rect by computing the furthest corner from the origin, and sweeping out a circle. * platform/graphics/GeometryUtilities.h: * platform/graphics/transforms/Matrix3DTransformOperation.h: * platform/graphics/transforms/MatrixTransformOperation.h: * platform/graphics/transforms/PerspectiveTransformOperation.h: * platform/graphics/transforms/RotateTransformOperation.h: * platform/graphics/transforms/ScaleTransformOperation.h: * platform/graphics/transforms/SkewTransformOperation.h: * platform/graphics/transforms/TransformOperation.h: (WebCore::TransformOperation::isAffectedByTransformOrigin): * platform/graphics/transforms/TransformOperations.cpp: (WebCore::TransformOperations::affectedByTransformOrigin): Ask all the operations if they are affected by transform-origin. (WebCore::TransformOperations::blendByMatchingOperations): nullptr. * platform/graphics/transforms/TransformOperations.h: * rendering/RenderBox.cpp: (WebCore::RenderBox::pushMappingToContainer): Comment fix. Only take transforms into account if the geometry map says so (which is most of the time). * rendering/RenderGeometryMap.cpp: (WebCore::RenderGeometryMap::mapToContainer): RenderLayerCompositor is now using the geometry map in a way that is incompatible with this assertion; it deliberately ignores transforms sometimes, so we can't easily verify that the mapping matches mapping through renderers. (WebCore::RenderGeometryMap::pushMappingsToAncestor): Save and restore the UseTransforms bit. * rendering/RenderGeometryMap.h: * rendering/RenderLayer.cpp: (WebCore::RenderLayer::boundingBox): Whitespace. (WebCore::RenderLayer::getOverlapBoundsIncludingChildrenAccountingForTransformAnimations): Helper function to get the bounds of a layer, including descendants, when a transform animation is running. * rendering/RenderLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::CompositingState::CompositingState): Add a ancestorHasTransformAnimation flag to detect nested animated transforms. (WebCore::RenderLayerCompositor::OverlapExtent::knownToBeHaveExtentUncertainty): This returns true when the layer is animating transform, and the transition/animation is such that we can't easily compute the bounds of the animation. (WebCore::RenderLayerCompositor::computeExtent): const RenderLayer&. Compute the animated bounds if there's a transform animation running. (WebCore::RenderLayerCompositor::addToOverlapMap): const RenderLayer& (WebCore::RenderLayerCompositor::addToOverlapMapRecursive): const RenderLayer& (WebCore::RenderLayerCompositor::computeCompositingRequirements): Delay the call to pushMappingsToAncestor() until knowing if there's a transform animation running, and if there is, push the mapping while ignoring transforms (since the transform is implicitly taken into account for overlap via the computed animated bounds). If this layer is running a transform animation, set the childState.ancestorHasTransformAnimation flag so that descendants will know (nested transform animations fall back to current behavior). The if (.... && isRunningAcceleratedTransformAnimation()) is what previously caused us to turn off overlap testing in the face of animations. That now only happens if we were unable to easily compute the animation bounds. (WebCore::RenderLayerCompositor::isRunningTransformAnimation): This previously tested whether an accelerated animation was running, but that's timing sensitive; AnimationController can start the transform animation, but it's not yet considered accelerated until we get an async callback from GraphicsLayer, yet this code needed to know if the animation was running. Since transform animations are always accelerated, we can just test for a running transform animation. (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation): Deleted. * rendering/RenderLayerCompositor.h: * rendering/style/RenderStyle.cpp: (WebCore::requireTransformOrigin): Some FIXME comments. LayoutTests: These test overlay an animated element with a grid of position: relative squares. These reveal the overlap area by selectively getting composited. * compositing/layer-creation/animation-overlap-with-children-expected.txt: * compositing/layer-creation/mismatched-rotated-transform-animation-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html: Added. * compositing/layer-creation/mismatched-rotated-transform-transition-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html: Added. * compositing/layer-creation/mismatched-transform-transition-overlap-expected.txt: Added. * compositing/layer-creation/mismatched-transform-transition-overlap.html: Added. * compositing/layer-creation/multiple-keyframes-animation-overlap-expected.txt: Added. * compositing/layer-creation/multiple-keyframes-animation-overlap.html: Added. * compositing/layer-creation/scale-rotation-animation-overlap-expected.txt: Added. * compositing/layer-creation/scale-rotation-animation-overlap.html: Added. * compositing/layer-creation/scale-rotation-transition-overlap-expected.txt: Added. * compositing/layer-creation/scale-rotation-transition-overlap.html: Added. * compositing/layer-creation/translate-animation-overlap-expected.txt: Added. * compositing/layer-creation/translate-animation-overlap.html: Added. * compositing/layer-creation/translate-scale-animation-overlap-expected.txt: Added. * compositing/layer-creation/translate-scale-animation-overlap.html: Added. * compositing/layer-creation/translate-scale-transition-overlap-expected.txt: Added. * compositing/layer-creation/translate-scale-transition-overlap.html: Added. * compositing/layer-creation/translate-transition-overlap-expected.txt: Added. * compositing/layer-creation/translate-transition-overlap.html: Added. Canonical link: https://commits.webkit.org/160718@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181515 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-15 23:07:37 +00:00
(position 94.00 86.00)
(anchor 0.74 0.27)
(bounds 148.00 128.00)
(drawsContent 1)
(transform [1.30 0.00 0.00 0.00] [0.00 1.30 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
)
(GraphicsLayer
(position 60.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 80.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 90.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 100.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 110.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 120.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 130.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 140.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 150.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 160.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 170.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 180.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 190.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 200.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 210.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 220.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 230.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 60.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 70.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 80.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 90.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 100.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 110.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 120.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 130.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 140.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 150.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 160.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 170.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 180.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 190.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 200.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 210.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 220.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 230.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 240.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
(GraphicsLayer
(position 250.00 240.00)
(bounds 4.00 4.00)
(contentsOpaque 1)
)
)
)
)
)