OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
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 #include "SkImageFilter.h" | 8 #include "SkImageFilter.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 return false; | 283 return false; |
284 } | 284 } |
285 | 285 |
286 bool SkImageFilter::applyCropRect(const Context& ctx, const SkBitmap& src, | 286 bool SkImageFilter::applyCropRect(const Context& ctx, const SkBitmap& src, |
287 const SkIPoint& srcOffset, SkIRect* bounds) co
nst { | 287 const SkIPoint& srcOffset, SkIRect* bounds) co
nst { |
288 SkIRect srcBounds; | 288 SkIRect srcBounds; |
289 src.getBounds(&srcBounds); | 289 src.getBounds(&srcBounds); |
290 srcBounds.offset(srcOffset); | 290 srcBounds.offset(srcOffset); |
291 SkRect cropRect; | 291 SkRect cropRect; |
292 ctx.ctm().mapRect(&cropRect, fCropRect.rect()); | 292 ctx.ctm().mapRect(&cropRect, fCropRect.rect()); |
293 SkIRect cropRectI; | 293 const SkIRect cropRectI = cropRect.roundOut(); |
294 cropRect.roundOut(&cropRectI); | |
295 uint32_t flags = fCropRect.flags(); | 294 uint32_t flags = fCropRect.flags(); |
296 if (flags & CropRect::kHasLeft_CropEdge) srcBounds.fLeft = cropRectI.fLeft; | 295 if (flags & CropRect::kHasLeft_CropEdge) srcBounds.fLeft = cropRectI.fLeft; |
297 if (flags & CropRect::kHasTop_CropEdge) srcBounds.fTop = cropRectI.fTop; | 296 if (flags & CropRect::kHasTop_CropEdge) srcBounds.fTop = cropRectI.fTop; |
298 if (flags & CropRect::kHasRight_CropEdge) srcBounds.fRight = cropRectI.fRigh
t; | 297 if (flags & CropRect::kHasRight_CropEdge) srcBounds.fRight = cropRectI.fRigh
t; |
299 if (flags & CropRect::kHasBottom_CropEdge) srcBounds.fBottom = cropRectI.fBo
ttom; | 298 if (flags & CropRect::kHasBottom_CropEdge) srcBounds.fBottom = cropRectI.fBo
ttom; |
300 if (!srcBounds.intersect(ctx.clipBounds())) { | 299 if (!srcBounds.intersect(ctx.clipBounds())) { |
301 return false; | 300 return false; |
302 } | 301 } |
303 *bounds = srcBounds; | 302 *bounds = srcBounds; |
304 return true; | 303 return true; |
305 } | 304 } |
306 | 305 |
307 bool SkImageFilter::applyCropRect(const Context& ctx, Proxy* proxy, const SkBitm
ap& src, | 306 bool SkImageFilter::applyCropRect(const Context& ctx, Proxy* proxy, const SkBitm
ap& src, |
308 SkIPoint* srcOffset, SkIRect* bounds, SkBitmap
* dst) const { | 307 SkIPoint* srcOffset, SkIRect* bounds, SkBitmap
* dst) const { |
309 SkIRect srcBounds; | 308 SkIRect srcBounds; |
310 src.getBounds(&srcBounds); | 309 src.getBounds(&srcBounds); |
311 srcBounds.offset(*srcOffset); | 310 srcBounds.offset(*srcOffset); |
312 SkRect cropRect; | 311 SkRect cropRect; |
313 ctx.ctm().mapRect(&cropRect, fCropRect.rect()); | 312 ctx.ctm().mapRect(&cropRect, fCropRect.rect()); |
314 SkIRect cropRectI; | 313 const SkIRect cropRectI = cropRect.roundOut(); |
315 cropRect.roundOut(&cropRectI); | |
316 uint32_t flags = fCropRect.flags(); | 314 uint32_t flags = fCropRect.flags(); |
317 *bounds = srcBounds; | 315 *bounds = srcBounds; |
318 if (flags & CropRect::kHasLeft_CropEdge) bounds->fLeft = cropRectI.fLeft; | 316 if (flags & CropRect::kHasLeft_CropEdge) bounds->fLeft = cropRectI.fLeft; |
319 if (flags & CropRect::kHasTop_CropEdge) bounds->fTop = cropRectI.fTop; | 317 if (flags & CropRect::kHasTop_CropEdge) bounds->fTop = cropRectI.fTop; |
320 if (flags & CropRect::kHasRight_CropEdge) bounds->fRight = cropRectI.fRight; | 318 if (flags & CropRect::kHasRight_CropEdge) bounds->fRight = cropRectI.fRight; |
321 if (flags & CropRect::kHasBottom_CropEdge) bounds->fBottom = cropRectI.fBott
om; | 319 if (flags & CropRect::kHasBottom_CropEdge) bounds->fBottom = cropRectI.fBott
om; |
322 if (!bounds->intersect(ctx.clipBounds())) { | 320 if (!bounds->intersect(ctx.clipBounds())) { |
323 return false; | 321 return false; |
324 } | 322 } |
325 if (srcBounds.contains(*bounds)) { | 323 if (srcBounds.contains(*bounds)) { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 | 492 |
495 SkImageFilter::Cache* SkImageFilter::Cache::Create(size_t maxBytes) { | 493 SkImageFilter::Cache* SkImageFilter::Cache::Create(size_t maxBytes) { |
496 return SkNEW_ARGS(CacheImpl, (maxBytes)); | 494 return SkNEW_ARGS(CacheImpl, (maxBytes)); |
497 } | 495 } |
498 | 496 |
499 SK_DECLARE_STATIC_LAZY_PTR(SkImageFilter::Cache, cache, CreateCache); | 497 SK_DECLARE_STATIC_LAZY_PTR(SkImageFilter::Cache, cache, CreateCache); |
500 | 498 |
501 SkImageFilter::Cache* SkImageFilter::Cache::Get() { | 499 SkImageFilter::Cache* SkImageFilter::Cache::Get() { |
502 return cache.get(); | 500 return cache.get(); |
503 } | 501 } |
OLD | NEW |