Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: include/core/SkImageFilter.h

Issue 1908173006: allow imagefilter to manage CTM decomposition (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: switch to simple canHandleAffine pattern Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | include/effects/SkColorFilterImageFilter.h » ('j') | src/core/SkImageFilter.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkImageFilter_DEFINED 8 #ifndef SkImageFilter_DEFINED
9 #define SkImageFilter_DEFINED 9 #define SkImageFilter_DEFINED
10 10
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 */ 209 */
210 sk_sp<SkImageFilter> makeWithLocalMatrix(const SkMatrix&) const; 210 sk_sp<SkImageFilter> makeWithLocalMatrix(const SkMatrix&) const;
211 211
212 #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR 212 #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
213 SkImageFilter* newWithLocalMatrix(const SkMatrix& matrix) const { 213 SkImageFilter* newWithLocalMatrix(const SkMatrix& matrix) const {
214 return this->makeWithLocalMatrix(matrix).release(); 214 return this->makeWithLocalMatrix(matrix).release();
215 } 215 }
216 #endif 216 #endif
217 217
218 /** 218 /**
219 * ImageFilters can natively handle scaling and translate components in the CTM. Only some of
220 * them can handle affine (or more complex) matrices. This call returns tru e iff the filter
221 * and all of its (non-null) inputs can handle these more complex matrices.
222 */
223 bool canHandleAffine() const { return this->onCanHandleAffine(); }
Stephen White 2016/04/25 14:09:34 <bikeshed> Could we add a noun to that? canHandleA
224
225 /**
219 * Return an imagefilter which transforms its input by the given matrix. 226 * Return an imagefilter which transforms its input by the given matrix.
220 */ 227 */
221 static sk_sp<SkImageFilter> MakeMatrixFilter(const SkMatrix& matrix, 228 static sk_sp<SkImageFilter> MakeMatrixFilter(const SkMatrix& matrix,
222 SkFilterQuality quality, 229 SkFilterQuality quality,
223 sk_sp<SkImageFilter> input); 230 sk_sp<SkImageFilter> input);
224 231
225 #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR 232 #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
226 static SkImageFilter* CreateMatrixFilter(const SkMatrix& matrix, 233 static SkImageFilter* CreateMatrixFilter(const SkMatrix& matrix,
227 SkFilterQuality filterQuality, 234 SkFilterQuality filterQuality,
228 SkImageFilter* input = nullptr) { 235 SkImageFilter* input = nullptr) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 SkIPoint* offset) const; 342 SkIPoint* offset) const;
336 343
337 /** 344 /**
338 * Return true (and return a ref'd colorfilter) if this node in the DAG is just a 345 * Return true (and return a ref'd colorfilter) if this node in the DAG is just a
339 * colorfilter w/o CropRect constraints. 346 * colorfilter w/o CropRect constraints.
340 */ 347 */
341 virtual bool onIsColorFilterNode(SkColorFilter** /*filterPtr*/) const { 348 virtual bool onIsColorFilterNode(SkColorFilter** /*filterPtr*/) const {
342 return false; 349 return false;
343 } 350 }
344 351
352 virtual bool onCanHandleAffine() const;
353
345 /** Given a "srcBounds" rect, computes destination bounds for this filter. 354 /** Given a "srcBounds" rect, computes destination bounds for this filter.
346 * "dstBounds" are computed by transforming the crop rect by the context's 355 * "dstBounds" are computed by transforming the crop rect by the context's
347 * CTM, applying it to the initial bounds, and intersecting the result with 356 * CTM, applying it to the initial bounds, and intersecting the result with
348 * the context's clip bounds. "srcBounds" (if non-null) are computed by 357 * the context's clip bounds. "srcBounds" (if non-null) are computed by
349 * intersecting the initial bounds with "dstBounds", to ensure that we neve r 358 * intersecting the initial bounds with "dstBounds", to ensure that we neve r
350 * sample outside of the crop rect (this restriction may be relaxed in the 359 * sample outside of the crop rect (this restriction may be relaxed in the
351 * future). 360 * future).
352 */ 361 */
353 bool applyCropRect(const Context&, const SkIRect& srcBounds, SkIRect* dstBou nds) const; 362 bool applyCropRect(const Context&, const SkIRect& srcBounds, SkIRect* dstBou nds) const;
354 363
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 */ 405 */
397 #define SK_IMAGEFILTER_UNFLATTEN_COMMON(localVar, expectedCount) \ 406 #define SK_IMAGEFILTER_UNFLATTEN_COMMON(localVar, expectedCount) \
398 Common localVar; \ 407 Common localVar; \
399 do { \ 408 do { \
400 if (!localVar.unflatten(buffer, expectedCount)) { \ 409 if (!localVar.unflatten(buffer, expectedCount)) { \
401 return NULL; \ 410 return NULL; \
402 } \ 411 } \
403 } while (0) 412 } while (0)
404 413
405 #endif 414 #endif
OLDNEW
« no previous file with comments | « no previous file | include/effects/SkColorFilterImageFilter.h » ('j') | src/core/SkImageFilter.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698