OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
5 * | 5 * |
6 * Other contributors: | 6 * Other contributors: |
7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 paintInvalidationContainerWasScrolled && !child->isPaintInvalidation
Container()); | 337 paintInvalidationContainerWasScrolled && !child->isPaintInvalidation
Container()); |
338 } | 338 } |
339 } | 339 } |
340 | 340 |
341 void DeprecatedPaintLayer::updateTransformationMatrix() | 341 void DeprecatedPaintLayer::updateTransformationMatrix() |
342 { | 342 { |
343 if (m_transform) { | 343 if (m_transform) { |
344 LayoutBox* box = layoutBox(); | 344 LayoutBox* box = layoutBox(); |
345 ASSERT(box); | 345 ASSERT(box); |
346 m_transform->makeIdentity(); | 346 m_transform->makeIdentity(); |
347 box->style()->applyTransform(*m_transform, LayoutSize(box->pixelSnappedS
ize()), LayoutStyle::IncludeTransformOrigin); | 347 box->style()->applyTransform(*m_transform, LayoutSize(box->pixelSnappedS
ize()), ComputedStyle::IncludeTransformOrigin); |
348 makeMatrixRenderable(*m_transform, compositor()->hasAcceleratedCompositi
ng()); | 348 makeMatrixRenderable(*m_transform, compositor()->hasAcceleratedCompositi
ng()); |
349 } | 349 } |
350 } | 350 } |
351 | 351 |
352 void DeprecatedPaintLayer::updateTransform(const LayoutStyle* oldStyle, const La
youtStyle& newStyle) | 352 void DeprecatedPaintLayer::updateTransform(const ComputedStyle* oldStyle, const
ComputedStyle& newStyle) |
353 { | 353 { |
354 if (oldStyle && newStyle.transformDataEquivalent(*oldStyle)) | 354 if (oldStyle && newStyle.transformDataEquivalent(*oldStyle)) |
355 return; | 355 return; |
356 | 356 |
357 // hasTransform() on the renderer is also true when there is transform-style
: preserve-3d or perspective set, | 357 // hasTransform() on the renderer is also true when there is transform-style
: preserve-3d or perspective set, |
358 // so check style too. | 358 // so check style too. |
359 bool hasTransform = layoutObject()->hasTransformRelatedProperty() && newStyl
e.hasTransform(); | 359 bool hasTransform = layoutObject()->hasTransformRelatedProperty() && newStyl
e.hasTransform(); |
360 bool had3DTransform = has3DTransform(); | 360 bool had3DTransform = has3DTransform(); |
361 | 361 |
362 bool hadTransform = m_transform; | 362 bool hadTransform = m_transform; |
(...skipping 28 matching lines...) Expand all Loading... |
391 | 391 |
392 if (shouldPreserve3D()) | 392 if (shouldPreserve3D()) |
393 renderingContext = this; | 393 renderingContext = this; |
394 | 394 |
395 for (DeprecatedPaintLayer* current = enclosingLayerForContainingBlock(this);
current && current->shouldPreserve3D(); current = enclosingLayerForContainingBl
ock(current)) | 395 for (DeprecatedPaintLayer* current = enclosingLayerForContainingBlock(this);
current && current->shouldPreserve3D(); current = enclosingLayerForContainingBl
ock(current)) |
396 renderingContext = current; | 396 renderingContext = current; |
397 | 397 |
398 return renderingContext; | 398 return renderingContext; |
399 } | 399 } |
400 | 400 |
401 TransformationMatrix DeprecatedPaintLayer::currentTransform(LayoutStyle::ApplyTr
ansformOrigin applyOrigin) const | 401 TransformationMatrix DeprecatedPaintLayer::currentTransform(ComputedStyle::Apply
TransformOrigin applyOrigin) const |
402 { | 402 { |
403 if (!m_transform) | 403 if (!m_transform) |
404 return TransformationMatrix(); | 404 return TransformationMatrix(); |
405 | 405 |
406 // m_transform includes transform-origin, so we need to recompute the transf
orm here. | 406 // m_transform includes transform-origin, so we need to recompute the transf
orm here. |
407 if (applyOrigin == LayoutStyle::ExcludeTransformOrigin) { | 407 if (applyOrigin == ComputedStyle::ExcludeTransformOrigin) { |
408 LayoutBox* box = layoutBox(); | 408 LayoutBox* box = layoutBox(); |
409 TransformationMatrix currTransform; | 409 TransformationMatrix currTransform; |
410 box->style()->applyTransform(currTransform, LayoutSize(box->pixelSnapped
Size()), LayoutStyle::ExcludeTransformOrigin); | 410 box->style()->applyTransform(currTransform, LayoutSize(box->pixelSnapped
Size()), ComputedStyle::ExcludeTransformOrigin); |
411 makeMatrixRenderable(currTransform, compositor()->hasAcceleratedComposit
ing()); | 411 makeMatrixRenderable(currTransform, compositor()->hasAcceleratedComposit
ing()); |
412 return currTransform; | 412 return currTransform; |
413 } | 413 } |
414 | 414 |
415 return *m_transform; | 415 return *m_transform; |
416 } | 416 } |
417 | 417 |
418 TransformationMatrix DeprecatedPaintLayer::renderableTransform(PaintBehavior pai
ntBehavior) const | 418 TransformationMatrix DeprecatedPaintLayer::renderableTransform(PaintBehavior pai
ntBehavior) const |
419 { | 419 { |
420 if (!m_transform) | 420 if (!m_transform) |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 m_needsPositionUpdate = false; | 897 m_needsPositionUpdate = false; |
898 #endif | 898 #endif |
899 return positionOrOffsetChanged; | 899 return positionOrOffsetChanged; |
900 } | 900 } |
901 | 901 |
902 TransformationMatrix DeprecatedPaintLayer::perspectiveTransform() const | 902 TransformationMatrix DeprecatedPaintLayer::perspectiveTransform() const |
903 { | 903 { |
904 if (!layoutObject()->hasTransformRelatedProperty()) | 904 if (!layoutObject()->hasTransformRelatedProperty()) |
905 return TransformationMatrix(); | 905 return TransformationMatrix(); |
906 | 906 |
907 const LayoutStyle& style = layoutObject()->styleRef(); | 907 const ComputedStyle& style = layoutObject()->styleRef(); |
908 if (!style.hasPerspective()) | 908 if (!style.hasPerspective()) |
909 return TransformationMatrix(); | 909 return TransformationMatrix(); |
910 | 910 |
911 // Maybe fetch the perspective from the backing? | 911 // Maybe fetch the perspective from the backing? |
912 const IntRect borderBox = toLayoutBox(layoutObject())->pixelSnappedBorderBox
Rect(); | 912 const IntRect borderBox = toLayoutBox(layoutObject())->pixelSnappedBorderBox
Rect(); |
913 const float boxWidth = borderBox.width(); | 913 const float boxWidth = borderBox.width(); |
914 const float boxHeight = borderBox.height(); | 914 const float boxHeight = borderBox.height(); |
915 | 915 |
916 float perspectiveOriginX = floatValueForLength(style.perspectiveOriginX(), b
oxWidth); | 916 float perspectiveOriginX = floatValueForLength(style.perspectiveOriginX(), b
oxWidth); |
917 float perspectiveOriginY = floatValueForLength(style.perspectiveOriginY(), b
oxHeight); | 917 float perspectiveOriginY = floatValueForLength(style.perspectiveOriginY(), b
oxHeight); |
(...skipping 10 matching lines...) Expand all Loading... |
928 | 928 |
929 return t; | 929 return t; |
930 } | 930 } |
931 | 931 |
932 FloatPoint DeprecatedPaintLayer::perspectiveOrigin() const | 932 FloatPoint DeprecatedPaintLayer::perspectiveOrigin() const |
933 { | 933 { |
934 if (!layoutObject()->hasTransformRelatedProperty()) | 934 if (!layoutObject()->hasTransformRelatedProperty()) |
935 return FloatPoint(); | 935 return FloatPoint(); |
936 | 936 |
937 const LayoutRect borderBox = toLayoutBox(layoutObject())->borderBoxRect(); | 937 const LayoutRect borderBox = toLayoutBox(layoutObject())->borderBoxRect(); |
938 const LayoutStyle& style = layoutObject()->styleRef(); | 938 const ComputedStyle& style = layoutObject()->styleRef(); |
939 | 939 |
940 return FloatPoint(floatValueForLength(style.perspectiveOriginX(), borderBox.
width().toFloat()), floatValueForLength(style.perspectiveOriginY(), borderBox.he
ight().toFloat())); | 940 return FloatPoint(floatValueForLength(style.perspectiveOriginX(), borderBox.
width().toFloat()), floatValueForLength(style.perspectiveOriginY(), borderBox.he
ight().toFloat())); |
941 } | 941 } |
942 | 942 |
943 static inline bool isFixedPositionedContainer(DeprecatedPaintLayer* layer) | 943 static inline bool isFixedPositionedContainer(DeprecatedPaintLayer* layer) |
944 { | 944 { |
945 return layer->isRootLayer() || layer->hasTransformRelatedProperty(); | 945 return layer->isRootLayer() || layer->hasTransformRelatedProperty(); |
946 } | 946 } |
947 | 947 |
948 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingPositionedAncestor() const | 948 DeprecatedPaintLayer* DeprecatedPaintLayer::enclosingPositionedAncestor() const |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1517 offset.moveBy(-ancestorLayer->visualOffsetFromAncestor(paginationLayer))
; | 1517 offset.moveBy(-ancestorLayer->visualOffsetFromAncestor(paginationLayer))
; |
1518 } | 1518 } |
1519 return offset; | 1519 return offset; |
1520 } | 1520 } |
1521 | 1521 |
1522 void DeprecatedPaintLayer::didUpdateNeedsCompositedScrolling() | 1522 void DeprecatedPaintLayer::didUpdateNeedsCompositedScrolling() |
1523 { | 1523 { |
1524 updateSelfPaintingLayer(); | 1524 updateSelfPaintingLayer(); |
1525 } | 1525 } |
1526 | 1526 |
1527 void DeprecatedPaintLayer::updateReflectionInfo(const LayoutStyle* oldStyle) | 1527 void DeprecatedPaintLayer::updateReflectionInfo(const ComputedStyle* oldStyle) |
1528 { | 1528 { |
1529 ASSERT(!oldStyle || !layoutObject()->style()->reflectionDataEquivalent(oldSt
yle)); | 1529 ASSERT(!oldStyle || !layoutObject()->style()->reflectionDataEquivalent(oldSt
yle)); |
1530 if (layoutObject()->hasReflection()) { | 1530 if (layoutObject()->hasReflection()) { |
1531 if (!m_reflectionInfo) | 1531 if (!m_reflectionInfo) |
1532 m_reflectionInfo = adoptPtr(new DeprecatedPaintLayerReflectionInfo(*
layoutBox())); | 1532 m_reflectionInfo = adoptPtr(new DeprecatedPaintLayerReflectionInfo(*
layoutBox())); |
1533 m_reflectionInfo->updateAfterStyleChange(oldStyle); | 1533 m_reflectionInfo->updateAfterStyleChange(oldStyle); |
1534 } else if (m_reflectionInfo) { | 1534 } else if (m_reflectionInfo) { |
1535 m_reflectionInfo->destroy(); | 1535 m_reflectionInfo->destroy(); |
1536 m_reflectionInfo = nullptr; | 1536 m_reflectionInfo = nullptr; |
1537 } | 1537 } |
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2716 } | 2716 } |
2717 | 2717 |
2718 bool DeprecatedPaintLayer::hasVisibleBoxDecorations() const | 2718 bool DeprecatedPaintLayer::hasVisibleBoxDecorations() const |
2719 { | 2719 { |
2720 if (!hasVisibleContent()) | 2720 if (!hasVisibleContent()) |
2721 return false; | 2721 return false; |
2722 | 2722 |
2723 return hasBoxDecorationsOrBackground() || hasOverflowControls(); | 2723 return hasBoxDecorationsOrBackground() || hasOverflowControls(); |
2724 } | 2724 } |
2725 | 2725 |
2726 void DeprecatedPaintLayer::updateFilters(const LayoutStyle* oldStyle, const Layo
utStyle& newStyle) | 2726 void DeprecatedPaintLayer::updateFilters(const ComputedStyle* oldStyle, const Co
mputedStyle& newStyle) |
2727 { | 2727 { |
2728 if (!newStyle.hasFilter() && (!oldStyle || !oldStyle->hasFilter())) | 2728 if (!newStyle.hasFilter() && (!oldStyle || !oldStyle->hasFilter())) |
2729 return; | 2729 return; |
2730 | 2730 |
2731 updateOrRemoveFilterClients(); | 2731 updateOrRemoveFilterClients(); |
2732 updateOrRemoveFilterEffectRenderer(); | 2732 updateOrRemoveFilterEffectRenderer(); |
2733 } | 2733 } |
2734 | 2734 |
2735 bool DeprecatedPaintLayer::attemptDirectCompositingUpdate(StyleDifference diff,
const LayoutStyle* oldStyle) | 2735 bool DeprecatedPaintLayer::attemptDirectCompositingUpdate(StyleDifference diff,
const ComputedStyle* oldStyle) |
2736 { | 2736 { |
2737 CompositingReasons oldPotentialCompositingReasonsFromStyle = m_potentialComp
ositingReasonsFromStyle; | 2737 CompositingReasons oldPotentialCompositingReasonsFromStyle = m_potentialComp
ositingReasonsFromStyle; |
2738 compositor()->updatePotentialCompositingReasonsFromStyle(this); | 2738 compositor()->updatePotentialCompositingReasonsFromStyle(this); |
2739 | 2739 |
2740 // This function implements an optimization for transforms and opacity. | 2740 // This function implements an optimization for transforms and opacity. |
2741 // A common pattern is for a touchmove handler to update the transform | 2741 // A common pattern is for a touchmove handler to update the transform |
2742 // and/or an opacity of an element every frame while the user moves their | 2742 // and/or an opacity of an element every frame while the user moves their |
2743 // finger across the screen. The conditions below recognize when the | 2743 // finger across the screen. The conditions below recognize when the |
2744 // compositing state is set up to receive a direct transform or opacity | 2744 // compositing state is set up to receive a direct transform or opacity |
2745 // update. | 2745 // update. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2783 | 2783 |
2784 // FIXME: Consider introducing a smaller graphics layer update scope | 2784 // FIXME: Consider introducing a smaller graphics layer update scope |
2785 // that just handles transforms and opacity. GraphicsLayerUpdateLocal | 2785 // that just handles transforms and opacity. GraphicsLayerUpdateLocal |
2786 // will also program bounds, clips, and many other properties that could | 2786 // will also program bounds, clips, and many other properties that could |
2787 // not possibly have changed. | 2787 // not possibly have changed. |
2788 m_compositedDeprecatedPaintLayerMapping->setNeedsGraphicsLayerUpdate(Graphic
sLayerUpdateLocal); | 2788 m_compositedDeprecatedPaintLayerMapping->setNeedsGraphicsLayerUpdate(Graphic
sLayerUpdateLocal); |
2789 compositor()->setNeedsCompositingUpdate(CompositingUpdateAfterGeometryChange
); | 2789 compositor()->setNeedsCompositingUpdate(CompositingUpdateAfterGeometryChange
); |
2790 return true; | 2790 return true; |
2791 } | 2791 } |
2792 | 2792 |
2793 void DeprecatedPaintLayer::styleChanged(StyleDifference diff, const LayoutStyle*
oldStyle) | 2793 void DeprecatedPaintLayer::styleChanged(StyleDifference diff, const ComputedStyl
e* oldStyle) |
2794 { | 2794 { |
2795 if (attemptDirectCompositingUpdate(diff, oldStyle)) | 2795 if (attemptDirectCompositingUpdate(diff, oldStyle)) |
2796 return; | 2796 return; |
2797 | 2797 |
2798 m_stackingNode->updateIsNormalFlowOnly(); | 2798 m_stackingNode->updateIsNormalFlowOnly(); |
2799 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); | 2799 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); |
2800 | 2800 |
2801 if (m_scrollableArea) | 2801 if (m_scrollableArea) |
2802 m_scrollableArea->updateAfterStyleChange(oldStyle); | 2802 m_scrollableArea->updateAfterStyleChange(oldStyle); |
2803 | 2803 |
(...skipping 15 matching lines...) Expand all Loading... |
2819 } | 2819 } |
2820 | 2820 |
2821 bool DeprecatedPaintLayer::scrollsOverflow() const | 2821 bool DeprecatedPaintLayer::scrollsOverflow() const |
2822 { | 2822 { |
2823 if (DeprecatedPaintLayerScrollableArea* scrollableArea = this->scrollableAre
a()) | 2823 if (DeprecatedPaintLayerScrollableArea* scrollableArea = this->scrollableAre
a()) |
2824 return scrollableArea->scrollsOverflow(); | 2824 return scrollableArea->scrollsOverflow(); |
2825 | 2825 |
2826 return false; | 2826 return false; |
2827 } | 2827 } |
2828 | 2828 |
2829 FilterOperations DeprecatedPaintLayer::computeFilterOperations(const LayoutStyle
& style) | 2829 FilterOperations DeprecatedPaintLayer::computeFilterOperations(const ComputedSty
le& style) |
2830 { | 2830 { |
2831 const FilterOperations& filters = style.filter(); | 2831 const FilterOperations& filters = style.filter(); |
2832 if (filters.hasReferenceFilter()) { | 2832 if (filters.hasReferenceFilter()) { |
2833 for (size_t i = 0; i < filters.size(); ++i) { | 2833 for (size_t i = 0; i < filters.size(); ++i) { |
2834 FilterOperation* filterOperation = filters.operations().at(i).get(); | 2834 FilterOperation* filterOperation = filters.operations().at(i).get(); |
2835 if (filterOperation->type() != FilterOperation::REFERENCE) | 2835 if (filterOperation->type() != FilterOperation::REFERENCE) |
2836 continue; | 2836 continue; |
2837 ReferenceFilterOperation* referenceOperation = toReferenceFilterOper
ation(filterOperation); | 2837 ReferenceFilterOperation* referenceOperation = toReferenceFilterOper
ation(filterOperation); |
2838 // FIXME: Cache the ReferenceFilter if it didn't change. | 2838 // FIXME: Cache the ReferenceFilter if it didn't change. |
2839 RefPtrWillBeRawPtr<ReferenceFilter> referenceFilter = ReferenceFilte
r::create(style.effectiveZoom()); | 2839 RefPtrWillBeRawPtr<ReferenceFilter> referenceFilter = ReferenceFilte
r::create(style.effectiveZoom()); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2968 } | 2968 } |
2969 } | 2969 } |
2970 | 2970 |
2971 void showLayerTree(const blink::LayoutObject* renderer) | 2971 void showLayerTree(const blink::LayoutObject* renderer) |
2972 { | 2972 { |
2973 if (!renderer) | 2973 if (!renderer) |
2974 return; | 2974 return; |
2975 showLayerTree(renderer->enclosingLayer()); | 2975 showLayerTree(renderer->enclosingLayer()); |
2976 } | 2976 } |
2977 #endif | 2977 #endif |
OLD | NEW |