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 18 matching lines...) Expand all Loading... |
29 #include "platform/graphics/UnacceleratedImageBufferSurface.h" | 29 #include "platform/graphics/UnacceleratedImageBufferSurface.h" |
30 #include "platform/graphics/filters/Filter.h" | 30 #include "platform/graphics/filters/Filter.h" |
31 #include "platform/graphics/gpu/AcceleratedImageBufferSurface.h" | 31 #include "platform/graphics/gpu/AcceleratedImageBufferSurface.h" |
32 | 32 |
33 #if HAVE(ARM_NEON_INTRINSICS) | 33 #if HAVE(ARM_NEON_INTRINSICS) |
34 #include <arm_neon.h> | 34 #include <arm_neon.h> |
35 #endif | 35 #endif |
36 | 36 |
37 namespace WebCore { | 37 namespace WebCore { |
38 | 38 |
| 39 static const float kMaxFilterArea = 4096 * 4096; |
| 40 |
39 FilterEffect::FilterEffect(Filter* filter) | 41 FilterEffect::FilterEffect(Filter* filter) |
40 : m_alphaImage(false) | 42 : m_alphaImage(false) |
41 , m_filter(filter) | 43 , m_filter(filter) |
42 , m_hasX(false) | 44 , m_hasX(false) |
43 , m_hasY(false) | 45 , m_hasY(false) |
44 , m_hasWidth(false) | 46 , m_hasWidth(false) |
45 , m_hasHeight(false) | 47 , m_hasHeight(false) |
46 , m_clipsToBounds(true) | 48 , m_clipsToBounds(true) |
47 , m_operatingColorSpace(ColorSpaceLinearRGB) | 49 , m_operatingColorSpace(ColorSpaceLinearRGB) |
48 , m_resultColorSpace(ColorSpaceDeviceRGB) | 50 , m_resultColorSpace(ColorSpaceDeviceRGB) |
49 { | 51 { |
50 ASSERT(m_filter); | 52 ASSERT(m_filter); |
51 } | 53 } |
52 | 54 |
53 FilterEffect::~FilterEffect() | 55 FilterEffect::~FilterEffect() |
54 { | 56 { |
55 } | 57 } |
56 | 58 |
57 inline bool isFilterSizeValid(IntRect rect) | 59 float FilterEffect::maxFilterArea() |
58 { | 60 { |
59 if (rect.width() < 0 || rect.width() > kMaxFilterSize | 61 return kMaxFilterArea; |
60 || rect.height() < 0 || rect.height() > kMaxFilterSize) | 62 } |
| 63 |
| 64 bool FilterEffect::isFilterSizeValid(const FloatRect& rect) |
| 65 { |
| 66 if (rect.width() < 0 || rect.height() < 0 |
| 67 || (rect.height() * rect.width() > kMaxFilterArea)) |
61 return false; | 68 return false; |
| 69 |
62 return true; | 70 return true; |
63 } | 71 } |
64 | 72 |
| 73 |
| 74 bool FilterEffect::isFilterSizeValid(const IntRect& rect) |
| 75 { |
| 76 return isFilterSizeValid(FloatRect(rect)); |
| 77 } |
| 78 |
65 FloatRect FilterEffect::determineAbsolutePaintRect(const FloatRect& originalRequ
estedRect) | 79 FloatRect FilterEffect::determineAbsolutePaintRect(const FloatRect& originalRequ
estedRect) |
66 { | 80 { |
67 FloatRect requestedRect = originalRequestedRect; | 81 FloatRect requestedRect = originalRequestedRect; |
68 // Filters in SVG clip to primitive subregion, while CSS doesn't. | 82 // Filters in SVG clip to primitive subregion, while CSS doesn't. |
69 if (m_clipsToBounds) | 83 if (m_clipsToBounds) |
70 requestedRect.intersect(maxEffectRect()); | 84 requestedRect.intersect(maxEffectRect()); |
71 | 85 |
72 // We may be called multiple times if result is used more than once. Return | 86 // We may be called multiple times if result is used more than once. Return |
73 // quickly if if nothing new is required. | 87 // quickly if if nothing new is required. |
74 if (absolutePaintRect().contains(enclosingIntRect(requestedRect))) | 88 if (absolutePaintRect().contains(enclosingIntRect(requestedRect))) |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 } | 575 } |
562 if (hasHeight()) { | 576 if (hasHeight()) { |
563 rect.fBottom = rect.fTop + boundaries.height(); | 577 rect.fBottom = rect.fTop + boundaries.height(); |
564 flags |= SkImageFilter::CropRect::kHasBottom_CropEdge; | 578 flags |= SkImageFilter::CropRect::kHasBottom_CropEdge; |
565 } | 579 } |
566 rect = filter()->mapLocalRectToAbsoluteRect(rect); | 580 rect = filter()->mapLocalRectToAbsoluteRect(rect); |
567 return SkImageFilter::CropRect(rect, flags); | 581 return SkImageFilter::CropRect(rect, flags); |
568 } | 582 } |
569 | 583 |
570 } // namespace WebCore | 584 } // namespace WebCore |
OLD | NEW |