| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com> | 2 * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com> |
| 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
| 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 5 * Copyright (C) 2012 University of Szeged | 5 * Copyright (C) 2012 University of Szeged |
| 6 * Copyright (C) 2013 Google Inc. All rights reserved. | 6 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 | 23 |
| 24 #include "config.h" | 24 #include "config.h" |
| 25 | 25 |
| 26 #include "platform/graphics/filters/FilterEffect.h" | 26 #include "platform/graphics/filters/FilterEffect.h" |
| 27 | 27 |
| 28 #include "platform/graphics/filters/Filter.h" | 28 #include "platform/graphics/filters/Filter.h" |
| 29 | 29 |
| 30 namespace blink { | 30 namespace blink { |
| 31 | 31 |
| 32 FilterEffect::FilterEffect(Filter* filter) | 32 FilterEffect::FilterEffect(Filter* filter) |
| 33 : m_alphaImage(false) | 33 : m_filter(filter) |
| 34 , m_filter(filter) | |
| 35 , m_hasX(false) | 34 , m_hasX(false) |
| 36 , m_hasY(false) | 35 , m_hasY(false) |
| 37 , m_hasWidth(false) | 36 , m_hasWidth(false) |
| 38 , m_hasHeight(false) | 37 , m_hasHeight(false) |
| 39 , m_clipsToBounds(true) | 38 , m_clipsToBounds(true) |
| 40 , m_operatingColorSpace(ColorSpaceLinearRGB) | 39 , m_operatingColorSpace(ColorSpaceLinearRGB) |
| 41 , m_resultColorSpace(ColorSpaceDeviceRGB) | |
| 42 { | 40 { |
| 43 ASSERT(m_filter); | 41 ASSERT(m_filter); |
| 44 } | 42 } |
| 45 | 43 |
| 46 FilterEffect::~FilterEffect() | 44 FilterEffect::~FilterEffect() |
| 47 { | 45 { |
| 48 } | 46 } |
| 49 | 47 |
| 50 DEFINE_TRACE(FilterEffect) | 48 DEFINE_TRACE(FilterEffect) |
| 51 { | 49 { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 FloatRect result; | 87 FloatRect result; |
| 90 if (m_inputEffects.size() > 0) { | 88 if (m_inputEffects.size() > 0) { |
| 91 result = m_inputEffects.at(0)->mapRectRecursive(rect); | 89 result = m_inputEffects.at(0)->mapRectRecursive(rect); |
| 92 for (unsigned i = 1; i < m_inputEffects.size(); ++i) | 90 for (unsigned i = 1; i < m_inputEffects.size(); ++i) |
| 93 result.unite(m_inputEffects.at(i)->mapRectRecursive(rect)); | 91 result.unite(m_inputEffects.at(i)->mapRectRecursive(rect)); |
| 94 } else | 92 } else |
| 95 result = rect; | 93 result = rect; |
| 96 return mapRect(result); | 94 return mapRect(result); |
| 97 } | 95 } |
| 98 | 96 |
| 99 FloatRect FilterEffect::getSourceRect(const FloatRect& destRect, const FloatRect
& destClipRect) | |
| 100 { | |
| 101 FloatRect sourceRect = mapRect(destRect, false); | |
| 102 FloatRect sourceClipRect = mapRect(destClipRect, false); | |
| 103 | |
| 104 FloatRect boundaries = filter()->mapLocalRectToAbsoluteRect(effectBoundaries
()); | |
| 105 if (hasX()) | |
| 106 sourceClipRect.setX(boundaries.x()); | |
| 107 if (hasY()) | |
| 108 sourceClipRect.setY(boundaries.y()); | |
| 109 if (hasWidth()) | |
| 110 sourceClipRect.setWidth(boundaries.width()); | |
| 111 if (hasHeight()) | |
| 112 sourceClipRect.setHeight(boundaries.height()); | |
| 113 | |
| 114 FloatRect result; | |
| 115 if (m_inputEffects.size() > 0) { | |
| 116 result = m_inputEffects.at(0)->getSourceRect(sourceRect, sourceClipRect)
; | |
| 117 for (unsigned i = 1; i < m_inputEffects.size(); ++i) | |
| 118 result.unite(m_inputEffects.at(i)->getSourceRect(sourceRect, sourceC
lipRect)); | |
| 119 } else { | |
| 120 result = sourceRect; | |
| 121 result.intersect(sourceClipRect); | |
| 122 } | |
| 123 return result; | |
| 124 } | |
| 125 | |
| 126 FilterEffect* FilterEffect::inputEffect(unsigned number) const | 97 FilterEffect* FilterEffect::inputEffect(unsigned number) const |
| 127 { | 98 { |
| 128 ASSERT_WITH_SECURITY_IMPLICATION(number < m_inputEffects.size()); | 99 ASSERT_WITH_SECURITY_IMPLICATION(number < m_inputEffects.size()); |
| 129 return m_inputEffects.at(number).get(); | 100 return m_inputEffects.at(number).get(); |
| 130 } | 101 } |
| 131 | 102 |
| 132 void FilterEffect::addAbsolutePaintRect(const FloatRect& paintRect) | 103 void FilterEffect::addAbsolutePaintRect(const FloatRect& paintRect) |
| 133 { | 104 { |
| 134 IntRect intPaintRect(enclosingIntRect(paintRect)); | 105 IntRect intPaintRect(enclosingIntRect(paintRect)); |
| 135 if (m_absolutePaintRect.contains(intPaintRect)) | 106 if (m_absolutePaintRect.contains(intPaintRect)) |
| 136 return; | 107 return; |
| 137 intPaintRect.unite(m_absolutePaintRect); | 108 intPaintRect.unite(m_absolutePaintRect); |
| 138 // Make sure we are not holding on to a smaller rendering. | 109 // Make sure we are not holding on to a smaller rendering. |
| 139 clearResult(); | 110 clearResult(); |
| 140 m_absolutePaintRect = intPaintRect; | 111 m_absolutePaintRect = intPaintRect; |
| 141 } | 112 } |
| 142 | 113 |
| 143 void FilterEffect::clearResult() | 114 void FilterEffect::clearResult() |
| 144 { | 115 { |
| 145 m_absolutePaintRect = IntRect(); | 116 m_absolutePaintRect = IntRect(); |
| 146 for (int i = 0; i < 4; i++) { | 117 for (int i = 0; i < 4; i++) { |
| 147 m_imageFilters[i] = nullptr; | 118 m_imageFilters[i] = nullptr; |
| 148 } | 119 } |
| 149 } | 120 } |
| 150 | 121 |
| 151 void FilterEffect::clearResultsRecursive() | |
| 152 { | |
| 153 unsigned size = m_inputEffects.size(); | |
| 154 for (unsigned i = 0; i < size; ++i) | |
| 155 m_inputEffects.at(i).get()->clearResultsRecursive(); | |
| 156 } | |
| 157 | |
| 158 Color FilterEffect::adaptColorToOperatingColorSpace(const Color& deviceColor) | 122 Color FilterEffect::adaptColorToOperatingColorSpace(const Color& deviceColor) |
| 159 { | 123 { |
| 160 // |deviceColor| is assumed to be DeviceRGB. | 124 // |deviceColor| is assumed to be DeviceRGB. |
| 161 return ColorSpaceUtilities::convertColor(deviceColor, operatingColorSpace())
; | 125 return ColorSpaceUtilities::convertColor(deviceColor, operatingColorSpace())
; |
| 162 } | 126 } |
| 163 | 127 |
| 164 TextStream& FilterEffect::externalRepresentation(TextStream& ts, int) const | 128 TextStream& FilterEffect::externalRepresentation(TextStream& ts, int) const |
| 165 { | 129 { |
| 166 // FIXME: We should dump the subRegions of the filter primitives here later.
This isn't | 130 // FIXME: We should dump the subRegions of the filter primitives here later.
This isn't |
| 167 // possible at the moment, because we need more detailed informations from t
he target object. | 131 // possible at the moment, because we need more detailed informations from t
he target object. |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 return m_imageFilters[index].get(); | 234 return m_imageFilters[index].get(); |
| 271 } | 235 } |
| 272 | 236 |
| 273 void FilterEffect::setImageFilter(ColorSpace colorSpace, bool requiresPMColorVal
idation, PassRefPtr<SkImageFilter> imageFilter) | 237 void FilterEffect::setImageFilter(ColorSpace colorSpace, bool requiresPMColorVal
idation, PassRefPtr<SkImageFilter> imageFilter) |
| 274 { | 238 { |
| 275 int index = getImageFilterIndex(colorSpace, requiresPMColorValidation); | 239 int index = getImageFilterIndex(colorSpace, requiresPMColorValidation); |
| 276 m_imageFilters[index] = imageFilter; | 240 m_imageFilters[index] = imageFilter; |
| 277 } | 241 } |
| 278 | 242 |
| 279 } // namespace blink | 243 } // namespace blink |
| OLD | NEW |