OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2008, Google Inc. All rights reserved. | 2 * Copyright (c) 2008, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 class SkMatrix; | 45 class SkMatrix; |
46 class SkPaint; | 46 class SkPaint; |
47 | 47 |
48 namespace WebCore { | 48 namespace WebCore { |
49 | 49 |
50 class FloatPoint; | 50 class FloatPoint; |
51 class FloatRect; | 51 class FloatRect; |
52 class FloatSize; | 52 class FloatSize; |
53 class GraphicsContext; | 53 class GraphicsContext; |
54 | 54 |
55 // Used by computeResamplingMode to tell how bitmaps should be resampled. | |
56 enum ResamplingMode { | |
57 // Nearest neighbor resampling. Used when we detect that the page is | |
58 // trying to make a pattern by stretching a small bitmap very large. | |
59 NoResampling, | |
60 | |
61 // Default skia resampling. Used for large growing of images where high | |
62 // quality resampling doesn't get us very much except a slowdown. | |
63 LinearResampling, | |
64 | |
65 // LinearResampling for upscaling. Mipmapping for downscaling. | |
66 LinearWithMipmapsResampling, | |
67 | |
68 // High quality resampling. | |
69 AwesomeResampling, | |
70 }; | |
71 | |
72 // This object is used as the "native image" in our port. When WebKit uses | 55 // This object is used as the "native image" in our port. When WebKit uses |
73 // PassNativeImagePtr / NativeImagePtr, it is a smart pointer to this type. | 56 // PassNativeImagePtr / NativeImagePtr, it is a smart pointer to this type. |
74 // It has an SkBitmap, and also stores a cached resized image. | 57 // It has an SkBitmap, and also stores a cached resized image. |
75 class PLATFORM_EXPORT NativeImageSkia : public RefCounted<NativeImageSkia> { | 58 class PLATFORM_EXPORT NativeImageSkia : public RefCounted<NativeImageSkia> { |
76 public: | 59 public: |
77 static PassRefPtr<NativeImageSkia> create() | 60 static PassRefPtr<NativeImageSkia> create() |
78 { | 61 { |
79 return adoptRef(new NativeImageSkia()); | 62 return adoptRef(new NativeImageSkia()); |
80 } | 63 } |
81 | 64 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 // result of subsequent calls. | 145 // result of subsequent calls. |
163 // | 146 // |
164 // On the one hand, if only a small subset is desired, then we will waste a | 147 // On the one hand, if only a small subset is desired, then we will waste a |
165 // lot of time resampling the entire thing, so we only want to do exactly | 148 // lot of time resampling the entire thing, so we only want to do exactly |
166 // what's required. On the other hand, resampling the entire bitmap is | 149 // what's required. On the other hand, resampling the entire bitmap is |
167 // better if we're going to be using it more than once (like a bitmap | 150 // better if we're going to be using it more than once (like a bitmap |
168 // scrolling on and off the screen. Since we only cache when doing the | 151 // scrolling on and off the screen. Since we only cache when doing the |
169 // entire thing, it's best to just do it up front. | 152 // entire thing, it's best to just do it up front. |
170 bool shouldCacheResampling(const SkISize& scaledImageSize, const SkIRect& sc
aledImageSubset) const; | 153 bool shouldCacheResampling(const SkISize& scaledImageSize, const SkIRect& sc
aledImageSubset) const; |
171 | 154 |
172 ResamplingMode computeResamplingMode(const SkMatrix&, float srcWidth, float
srcHeight, float destWidth, float destHeight) const; | 155 InterpolationQuality computeInterpolationQuality(const SkMatrix&, float srcW
idth, float srcHeight, float destWidth, float destHeight) const; |
173 SkBitmap extractScaledImageFragment(const SkRect& srcRect, float scaleX, flo
at scaleY, SkRect* scaledSrcRect) const; | 156 SkBitmap extractScaledImageFragment(const SkRect& srcRect, float scaleX, flo
at scaleY, SkRect* scaledSrcRect) const; |
174 void drawResampledBitmap(GraphicsContext*, SkPaint&, const SkRect& srcRect,
const SkRect& destRect) const; | 157 void drawResampledBitmap(GraphicsContext*, SkPaint&, const SkRect& srcRect,
const SkRect& destRect) const; |
175 | 158 |
176 // The original image. | 159 // The original image. |
177 SkBitmap m_image; | 160 SkBitmap m_image; |
178 | 161 |
179 // The cached bitmap fragment. This is a subset of the scaled version of | 162 // The cached bitmap fragment. This is a subset of the scaled version of |
180 // |m_image|. empty() returns true if there is no cached image. | 163 // |m_image|. empty() returns true if there is no cached image. |
181 mutable SkBitmap m_resizedImage; | 164 mutable SkBitmap m_resizedImage; |
182 | 165 |
183 // References how many times that the image size has been requested for | 166 // References how many times that the image size has been requested for |
184 // the last size. | 167 // the last size. |
185 // | 168 // |
186 // Every time we get a call to shouldCacheResampling, if it matches the | 169 // Every time we get a call to shouldCacheResampling, if it matches the |
187 // m_cachedImageInfo, we'll increment the counter, and if not, we'll reset | 170 // m_cachedImageInfo, we'll increment the counter, and if not, we'll reset |
188 // the counter and save the dimensions. | 171 // the counter and save the dimensions. |
189 // | 172 // |
190 // This allows us to see if many requests have been made for the same | 173 // This allows us to see if many requests have been made for the same |
191 // resized image, we know that we should probably cache it, even if all of | 174 // resized image, we know that we should probably cache it, even if all of |
192 // those requests individually are small and would not otherwise be cached. | 175 // those requests individually are small and would not otherwise be cached. |
193 // | 176 // |
194 // We also track scaling information and destination subset for the scaled | 177 // We also track scaling information and destination subset for the scaled |
195 // image. See comments for ImageResourceInfo. | 178 // image. See comments for ImageResourceInfo. |
196 mutable ImageResourceInfo m_cachedImageInfo; | 179 mutable ImageResourceInfo m_cachedImageInfo; |
197 mutable int m_resizeRequests; | 180 mutable int m_resizeRequests; |
198 }; | 181 }; |
199 | 182 |
200 } | 183 } |
201 #endif // NativeImageSkia_h | 184 #endif // NativeImageSkia_h |
OLD | NEW |