[CSS Filters] Move m_filter and related fields from RenderLayer to a different struct...
[WebKit-https.git] / Source / WebCore / rendering / RenderLayerFilterInfo.cpp
1 /*
2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above
9  *    copyright notice, this list of conditions and the following
10  *    disclaimer.
11  * 2. Redistributions in binary form must reproduce the above
12  *    copyright notice, this list of conditions and the following
13  *    disclaimer in the documentation and/or other materials
14  *    provided with the distribution.
15  * 
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
21  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
25  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
26  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29
30 #include "config.h"
31
32 #if ENABLE(CSS_FILTERS)
33 #include "RenderLayerFilterInfo.h"
34
35 #include "FilterEffectRenderer.h"
36 #include "RenderLayer.h"
37
38 namespace WebCore {
39
40 RenderLayerFilterInfoMap* RenderLayerFilterInfo::s_filterMap = 0;
41
42 RenderLayerFilterInfo* RenderLayerFilterInfo::filterInfoForRenderLayer(const RenderLayer* layer)
43 {
44     if (!s_filterMap)
45         return 0;
46     RenderLayerFilterInfoMap::iterator iter = s_filterMap->find(layer);
47     return (iter != s_filterMap->end()) ? iter->second : 0;
48 }
49
50 RenderLayerFilterInfo* RenderLayerFilterInfo::createFilterInfoForRenderLayerIfNeeded(RenderLayer* layer)
51 {
52     if (!s_filterMap)
53         s_filterMap = new RenderLayerFilterInfoMap();
54     
55     RenderLayerFilterInfoMap::iterator iter = s_filterMap->find(layer);
56     if (iter != s_filterMap->end()) {
57         ASSERT(layer->hasFilterInfo());
58         return iter->second;
59     }
60     
61     RenderLayerFilterInfo* filter = new RenderLayerFilterInfo(layer);
62     s_filterMap->set(layer, filter);
63     layer->setHasFilterInfo(true);
64     return filter;
65 }
66
67 void RenderLayerFilterInfo::removeFilterInfoForRenderLayer(RenderLayer* layer)
68 {
69     if (!s_filterMap)
70         return;
71     RenderLayerFilterInfo* filter = s_filterMap->take(layer);
72     if (s_filterMap->isEmpty()) {
73         delete s_filterMap;
74         s_filterMap = 0;
75     }
76     if (!filter) {
77         ASSERT(!layer->hasFilterInfo());
78         return;
79     }
80     layer->setHasFilterInfo(false);
81     delete filter;
82 }
83
84 RenderLayerFilterInfo::RenderLayerFilterInfo(RenderLayer* layer)
85     : m_layer(layer)
86 {
87 }
88
89 RenderLayerFilterInfo::~RenderLayerFilterInfo()
90 {
91     // Keeping the destructor here because there's a ref to FilterEffectRenderer that might get deleted.
92 }
93
94 void RenderLayerFilterInfo::setRenderer(PassRefPtr<FilterEffectRenderer> renderer)
95
96     m_renderer = renderer; 
97 }
98
99 } // namespace WebCore
100
101 #endif // ENABLE(CSS_FILTERS)