| OLD | NEW |
| 1 /* | 1 #include "../common/WebFilterOperation.h" |
| 2 * Copyright (C) 2012 Google Inc. 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 copyright | |
| 9 * notice, this list of conditions and the following disclaimer. | |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | |
| 11 * notice, this list of conditions and the following disclaimer in the | |
| 12 * documentation and/or other materials provided with the distribution. | |
| 13 * | |
| 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | |
| 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
| 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | |
| 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
| 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
| 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
| 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
| 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 24 */ | |
| 25 | |
| 26 #ifndef WebFilterOperation_h | |
| 27 #define WebFilterOperation_h | |
| 28 | |
| 29 #include "SkScalar.h" | |
| 30 #include "WebCommon.h" | |
| 31 #include "WebColor.h" | |
| 32 #include "WebPoint.h" | |
| 33 | |
| 34 namespace WebKit { | |
| 35 | |
| 36 class WebFilterOperation { | |
| 37 public: | |
| 38 enum FilterType { | |
| 39 FilterTypeGrayscale, | |
| 40 FilterTypeSepia, | |
| 41 FilterTypeSaturate, | |
| 42 FilterTypeHueRotate, | |
| 43 FilterTypeInvert, | |
| 44 FilterTypeBrightness, | |
| 45 FilterTypeContrast, | |
| 46 FilterTypeOpacity, | |
| 47 FilterTypeBlur, | |
| 48 FilterTypeDropShadow, | |
| 49 FilterTypeColorMatrix, | |
| 50 FilterTypeZoom, | |
| 51 FilterTypeSaturatingBrightness, // Not used in CSS/SVG. | |
| 52 }; | |
| 53 | |
| 54 FilterType type() const { return m_type; } | |
| 55 | |
| 56 float amount() const | |
| 57 { | |
| 58 WEBKIT_ASSERT(m_type == FilterTypeGrayscale | |
| 59 || m_type == FilterTypeSepia | |
| 60 || m_type == FilterTypeSaturate | |
| 61 || m_type == FilterTypeHueRotate | |
| 62 || m_type == FilterTypeInvert | |
| 63 || m_type == FilterTypeBrightness | |
| 64 || m_type == FilterTypeContrast | |
| 65 || m_type == FilterTypeOpacity | |
| 66 || m_type == FilterTypeBlur | |
| 67 || m_type == FilterTypeDropShadow | |
| 68 || m_type == FilterTypeZoom | |
| 69 || m_type == FilterTypeSaturatingBrightness); | |
| 70 return m_amount; | |
| 71 } | |
| 72 WebPoint dropShadowOffset() const | |
| 73 { | |
| 74 WEBKIT_ASSERT(m_type == FilterTypeDropShadow); | |
| 75 return m_dropShadowOffset; | |
| 76 } | |
| 77 WebColor dropShadowColor() const | |
| 78 { | |
| 79 WEBKIT_ASSERT(m_type == FilterTypeDropShadow); | |
| 80 return m_dropShadowColor; | |
| 81 } | |
| 82 const SkScalar* matrix() const | |
| 83 { | |
| 84 WEBKIT_ASSERT(m_type == FilterTypeColorMatrix); | |
| 85 return m_matrix; | |
| 86 } | |
| 87 | |
| 88 int zoomInset() const | |
| 89 { | |
| 90 WEBKIT_ASSERT(m_type == FilterTypeZoom); | |
| 91 return m_zoomInset; | |
| 92 } | |
| 93 | |
| 94 static WebFilterOperation createGrayscaleFilter(float amount) { return WebFi
lterOperation(FilterTypeGrayscale, amount); } | |
| 95 static WebFilterOperation createSepiaFilter(float amount) { return WebFilter
Operation(FilterTypeSepia, amount); } | |
| 96 static WebFilterOperation createSaturateFilter(float amount) { return WebFil
terOperation(FilterTypeSaturate, amount); } | |
| 97 static WebFilterOperation createHueRotateFilter(float amount) { return WebFi
lterOperation(FilterTypeHueRotate, amount); } | |
| 98 static WebFilterOperation createInvertFilter(float amount) { return WebFilte
rOperation(FilterTypeInvert, amount); } | |
| 99 static WebFilterOperation createBrightnessFilter(float amount) { return WebF
ilterOperation(FilterTypeBrightness, amount); } | |
| 100 static WebFilterOperation createContrastFilter(float amount) { return WebFil
terOperation(FilterTypeContrast, amount); } | |
| 101 static WebFilterOperation createOpacityFilter(float amount) { return WebFilt
erOperation(FilterTypeOpacity, amount); } | |
| 102 static WebFilterOperation createBlurFilter(float amount) { return WebFilterO
peration(FilterTypeBlur, amount); } | |
| 103 static WebFilterOperation createDropShadowFilter(WebPoint offset, float stdD
eviation, WebColor color) { return WebFilterOperation(FilterTypeDropShadow, offs
et, stdDeviation, color); } | |
| 104 static WebFilterOperation createColorMatrixFilter(SkScalar matrix[20]) { ret
urn WebFilterOperation(FilterTypeColorMatrix, matrix); } | |
| 105 static WebFilterOperation createZoomFilter(float amount, int inset) { return
WebFilterOperation(FilterTypeZoom, amount, inset); } | |
| 106 static WebFilterOperation createSaturatingBrightnessFilter(float amount) { r
eturn WebFilterOperation(FilterTypeSaturatingBrightness, amount); } | |
| 107 | |
| 108 bool equals(const WebFilterOperation& other) const; | |
| 109 | |
| 110 // Methods for restoring a WebFilterOperation. | |
| 111 static WebFilterOperation createEmptyFilter() { return WebFilterOperation(Fi
lterTypeGrayscale, 0.0); } | |
| 112 void setType(FilterType type) { m_type = type; } | |
| 113 void setAmount(float amount) | |
| 114 { | |
| 115 WEBKIT_ASSERT(m_type == FilterTypeGrayscale | |
| 116 || m_type == FilterTypeSepia | |
| 117 || m_type == FilterTypeSaturate | |
| 118 || m_type == FilterTypeHueRotate | |
| 119 || m_type == FilterTypeInvert | |
| 120 || m_type == FilterTypeBrightness | |
| 121 || m_type == FilterTypeContrast | |
| 122 || m_type == FilterTypeOpacity | |
| 123 || m_type == FilterTypeBlur | |
| 124 || m_type == FilterTypeDropShadow | |
| 125 || m_type == FilterTypeZoom | |
| 126 || m_type == FilterTypeSaturatingBrightness); | |
| 127 m_amount = amount; | |
| 128 } | |
| 129 void setDropShadowOffset(WebPoint offset) | |
| 130 { | |
| 131 WEBKIT_ASSERT(m_type == FilterTypeDropShadow); | |
| 132 m_dropShadowOffset = offset; | |
| 133 } | |
| 134 void setDropShadowColor(WebColor color) | |
| 135 { | |
| 136 WEBKIT_ASSERT(m_type == FilterTypeDropShadow); | |
| 137 m_dropShadowColor = color; | |
| 138 } | |
| 139 void setMatrix(const SkScalar matrix[20]) | |
| 140 { | |
| 141 WEBKIT_ASSERT(m_type == FilterTypeColorMatrix); | |
| 142 for (unsigned i = 0; i < 20; ++i) | |
| 143 m_matrix[i] = matrix[i]; | |
| 144 } | |
| 145 void setZoomInset(int inset) | |
| 146 { | |
| 147 WEBKIT_ASSERT(m_type == FilterTypeZoom); | |
| 148 m_zoomInset = inset; | |
| 149 } | |
| 150 | |
| 151 private: | |
| 152 FilterType m_type; | |
| 153 | |
| 154 float m_amount; | |
| 155 WebPoint m_dropShadowOffset; | |
| 156 WebColor m_dropShadowColor; | |
| 157 SkScalar m_matrix[20]; | |
| 158 int m_zoomInset; | |
| 159 | |
| 160 WebFilterOperation(FilterType type, float amount) | |
| 161 : m_type(type) | |
| 162 , m_amount(amount) | |
| 163 , m_dropShadowOffset(0, 0) | |
| 164 , m_dropShadowColor(0) | |
| 165 , m_zoomInset(0) | |
| 166 { | |
| 167 WEBKIT_ASSERT(m_type != FilterTypeDropShadow && m_type != FilterTypeColo
rMatrix); | |
| 168 memset(m_matrix, 0, sizeof(m_matrix)); | |
| 169 } | |
| 170 | |
| 171 WebFilterOperation(FilterType type, WebPoint offset, float stdDeviation, Web
Color color) | |
| 172 : m_type(type) | |
| 173 , m_amount(stdDeviation) | |
| 174 , m_dropShadowOffset(offset) | |
| 175 , m_dropShadowColor(color) | |
| 176 , m_zoomInset(0) | |
| 177 { | |
| 178 WEBKIT_ASSERT(m_type == FilterTypeDropShadow); | |
| 179 memset(m_matrix, 0, sizeof(m_matrix)); | |
| 180 } | |
| 181 | |
| 182 WEBKIT_EXPORT WebFilterOperation(FilterType, SkScalar matrix[20]); | |
| 183 | |
| 184 WebFilterOperation(FilterType type, float amount, int inset) | |
| 185 : m_type(type) | |
| 186 , m_amount(amount) | |
| 187 , m_dropShadowOffset(0, 0) | |
| 188 , m_dropShadowColor(0) | |
| 189 , m_zoomInset(inset) | |
| 190 { | |
| 191 WEBKIT_ASSERT(m_type == FilterTypeZoom); | |
| 192 memset(m_matrix, 0, sizeof(m_matrix)); | |
| 193 } | |
| 194 }; | |
| 195 | |
| 196 inline bool operator==(const WebFilterOperation& a, const WebFilterOperation& b) | |
| 197 { | |
| 198 return a.equals(b); | |
| 199 } | |
| 200 | |
| 201 inline bool operator!=(const WebFilterOperation& a, const WebFilterOperation& b) | |
| 202 { | |
| 203 return !(a == b); | |
| 204 } | |
| 205 | |
| 206 } | |
| 207 | |
| 208 #endif | |
| OLD | NEW |