| 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 #include "sky/engine/core/rendering/RenderInline.h" | 60 #include "sky/engine/core/rendering/RenderInline.h" |
| 61 #include "sky/engine/core/rendering/RenderTreeAsText.h" | 61 #include "sky/engine/core/rendering/RenderTreeAsText.h" |
| 62 #include "sky/engine/core/rendering/RenderView.h" | 62 #include "sky/engine/core/rendering/RenderView.h" |
| 63 #include "sky/engine/platform/LengthFunctions.h" | 63 #include "sky/engine/platform/LengthFunctions.h" |
| 64 #include "sky/engine/platform/Partitions.h" | 64 #include "sky/engine/platform/Partitions.h" |
| 65 #include "sky/engine/platform/TraceEvent.h" | 65 #include "sky/engine/platform/TraceEvent.h" |
| 66 #include "sky/engine/platform/geometry/FloatPoint3D.h" | 66 #include "sky/engine/platform/geometry/FloatPoint3D.h" |
| 67 #include "sky/engine/platform/geometry/FloatRect.h" | 67 #include "sky/engine/platform/geometry/FloatRect.h" |
| 68 #include "sky/engine/platform/geometry/TransformState.h" | 68 #include "sky/engine/platform/geometry/TransformState.h" |
| 69 #include "sky/engine/platform/graphics/GraphicsContextStateSaver.h" | 69 #include "sky/engine/platform/graphics/GraphicsContextStateSaver.h" |
| 70 #include "sky/engine/platform/graphics/filters/ReferenceFilter.h" | |
| 71 #include "sky/engine/platform/graphics/filters/SourceGraphic.h" | 70 #include "sky/engine/platform/graphics/filters/SourceGraphic.h" |
| 72 #include "sky/engine/platform/transforms/ScaleTransformOperation.h" | 71 #include "sky/engine/platform/transforms/ScaleTransformOperation.h" |
| 73 #include "sky/engine/platform/transforms/TransformationMatrix.h" | 72 #include "sky/engine/platform/transforms/TransformationMatrix.h" |
| 74 #include "sky/engine/platform/transforms/TranslateTransformOperation.h" | 73 #include "sky/engine/platform/transforms/TranslateTransformOperation.h" |
| 75 #include "sky/engine/public/platform/Platform.h" | 74 #include "sky/engine/public/platform/Platform.h" |
| 76 #include "sky/engine/wtf/StdLibExtras.h" | 75 #include "sky/engine/wtf/StdLibExtras.h" |
| 77 #include "sky/engine/wtf/text/CString.h" | 76 #include "sky/engine/wtf/text/CString.h" |
| 78 | 77 |
| 79 namespace blink { | 78 namespace blink { |
| 80 | 79 |
| 81 RenderLayer::RenderLayer(RenderBox* renderer, LayerType type) | 80 RenderLayer::RenderLayer(RenderBox* renderer, LayerType type) |
| 82 : m_layerType(type) | 81 : m_layerType(type) |
| 83 , m_isRootLayer(renderer->isRenderView()) | 82 , m_isRootLayer(renderer->isRenderView()) |
| 84 , m_3DTransformedDescendantStatusDirty(true) | 83 , m_3DTransformedDescendantStatusDirty(true) |
| 85 , m_has3DTransformedDescendant(false) | 84 , m_has3DTransformedDescendant(false) |
| 86 , m_hasFilterInfo(false) | |
| 87 , m_renderer(renderer) | 85 , m_renderer(renderer) |
| 88 , m_parent(0) | 86 , m_parent(0) |
| 89 , m_previous(0) | 87 , m_previous(0) |
| 90 , m_next(0) | 88 , m_next(0) |
| 91 , m_first(0) | 89 , m_first(0) |
| 92 , m_last(0) | 90 , m_last(0) |
| 93 , m_clipper(*renderer) | 91 , m_clipper(*renderer) |
| 94 { | 92 { |
| 95 m_stackingNode = adoptPtr(new RenderLayerStackingNode(this)); | 93 m_stackingNode = adoptPtr(new RenderLayerStackingNode(this)); |
| 96 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); | 94 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); |
| 97 } | 95 } |
| 98 | 96 |
| 99 RenderLayer::~RenderLayer() | 97 RenderLayer::~RenderLayer() |
| 100 { | 98 { |
| 101 removeFilterInfoIfNeeded(); | |
| 102 } | 99 } |
| 103 | 100 |
| 104 void RenderLayer::updateLayerPositionsAfterLayout() | 101 void RenderLayer::updateLayerPositionsAfterLayout() |
| 105 { | 102 { |
| 106 m_clipper.clearClipRectsIncludingDescendants(); | 103 m_clipper.clearClipRectsIncludingDescendants(); |
| 107 } | 104 } |
| 108 | 105 |
| 109 void RenderLayer::updateTransformationMatrix() | 106 void RenderLayer::updateTransformationMatrix() |
| 110 { | 107 { |
| 111 if (m_transform) { | 108 if (m_transform) { |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 { | 606 { |
| 610 return m_layerType == NormalLayer; | 607 return m_layerType == NormalLayer; |
| 611 } | 608 } |
| 612 | 609 |
| 613 void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle*
newStyle) | 610 void RenderLayer::updateFilters(const RenderStyle* oldStyle, const RenderStyle*
newStyle) |
| 614 { | 611 { |
| 615 if (!newStyle->hasFilter() && (!oldStyle || !oldStyle->hasFilter())) | 612 if (!newStyle->hasFilter() && (!oldStyle || !oldStyle->hasFilter())) |
| 616 return; | 613 return; |
| 617 | 614 |
| 618 if (!renderer()->hasFilter()) { | 615 if (!renderer()->hasFilter()) { |
| 619 removeFilterInfoIfNeeded(); | 616 m_filterRenderer = nullptr; |
| 620 return; | 617 return; |
| 621 } | 618 } |
| 622 | 619 |
| 623 if (renderer()->style()->filter().hasReferenceFilter()) | 620 m_filterRenderer = FilterEffectRenderer::create(); |
| 624 ensureFilterInfo()->updateReferenceFilterClients(renderer()->style()->fi
lter()); | |
| 625 else if (hasFilterInfo()) | |
| 626 filterInfo()->removeReferenceFilterClients(); | |
| 627 | |
| 628 // FilterEffectRenderer is only used to render the filters in software mode, | |
| 629 // so we always need to run updateOrRemoveFilterEffectRenderer after the com
posited | |
| 630 // mode might have changed for this layer. | |
| 631 if (!renderer()->hasFilter()) { | |
| 632 // Don't delete the whole filter info here, because we might use it | |
| 633 // for loading CSS shader files. | |
| 634 if (RenderLayerFilterInfo* filterInfo = this->filterInfo()) | |
| 635 filterInfo->setRenderer(nullptr); | |
| 636 | |
| 637 return; | |
| 638 } | |
| 639 | |
| 640 RenderLayerFilterInfo* filterInfo = ensureFilterInfo(); | |
| 641 if (!filterInfo->renderer()) { | |
| 642 RefPtr<FilterEffectRenderer> filterRenderer = FilterEffectRenderer::crea
te(); | |
| 643 filterInfo->setRenderer(filterRenderer.release()); | |
| 644 | |
| 645 // We can optimize away code paths in other places if we know that there
are no software filters. | |
| 646 renderer()->document().view()->setHasSoftwareFilters(true); | |
| 647 } | |
| 648 | 621 |
| 649 // If the filter fails to build, remove it from the layer. It will still att
empt to | 622 // If the filter fails to build, remove it from the layer. It will still att
empt to |
| 650 // go through regular processing (e.g. compositing), but never apply anythin
g. | 623 // go through regular processing (e.g. compositing), but never apply anythin
g. |
| 651 if (!filterInfo->renderer()->build(renderer(), renderer()->style()->filter()
)) | 624 if (!m_filterRenderer->build(renderer(), renderer()->style()->filter())) |
| 652 filterInfo->setRenderer(nullptr); | 625 m_filterRenderer = nullptr; |
| 653 } | 626 } |
| 654 | 627 |
| 655 void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle
) | 628 void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle
) |
| 656 { | 629 { |
| 657 m_stackingNode->updateIsNormalFlowOnly(); | 630 m_stackingNode->updateIsNormalFlowOnly(); |
| 658 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); | 631 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); |
| 659 | 632 |
| 660 // Overlay scrollbars can make this layer self-painting so we need | 633 // Overlay scrollbars can make this layer self-painting so we need |
| 661 // to recompute the bit once scrollbars have been updated. | 634 // to recompute the bit once scrollbars have been updated. |
| 662 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); | 635 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); |
| 663 | 636 |
| 664 updateTransform(oldStyle, renderer()->style()); | 637 updateTransform(oldStyle, renderer()->style()); |
| 665 updateFilters(oldStyle, renderer()->style()); | 638 updateFilters(oldStyle, renderer()->style()); |
| 666 } | 639 } |
| 667 | 640 |
| 668 } // namespace blink | 641 } // namespace blink |
| OLD | NEW |