OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 111 |
112 void BitmapImage::destroyDecodedData() | 112 void BitmapImage::destroyDecodedData() |
113 { | 113 { |
114 m_cachedFrame.clear(); | 114 m_cachedFrame.clear(); |
115 for (size_t i = 0; i < m_frames.size(); ++i) | 115 for (size_t i = 0; i < m_frames.size(); ++i) |
116 m_frames[i].clear(true); | 116 m_frames[i].clear(true); |
117 m_source.clearCacheExceptFrame(kNotFound); | 117 m_source.clearCacheExceptFrame(kNotFound); |
118 notifyMemoryChanged(); | 118 notifyMemoryChanged(); |
119 } | 119 } |
120 | 120 |
| 121 PassRefPtr<SharedBuffer> BitmapImage::data() |
| 122 { |
| 123 return m_source.data(); |
| 124 } |
| 125 |
121 void BitmapImage::notifyMemoryChanged() | 126 void BitmapImage::notifyMemoryChanged() |
122 { | 127 { |
123 if (getImageObserver()) | 128 if (getImageObserver()) |
124 getImageObserver()->decodedSizeChangedTo(this, totalFrameBytes()); | 129 getImageObserver()->decodedSizeChangedTo(this, totalFrameBytes()); |
125 } | 130 } |
126 | 131 |
127 size_t BitmapImage::totalFrameBytes() | 132 size_t BitmapImage::totalFrameBytes() |
128 { | 133 { |
129 const size_t numFrames = frameCount(); | 134 const size_t numFrames = frameCount(); |
130 size_t totalBytes = 0; | 135 size_t totalBytes = 0; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 { | 182 { |
178 updateSize(); | 183 updateSize(); |
179 return m_sizeRespectingOrientation; | 184 return m_sizeRespectingOrientation; |
180 } | 185 } |
181 | 186 |
182 bool BitmapImage::getHotSpot(IntPoint& hotSpot) const | 187 bool BitmapImage::getHotSpot(IntPoint& hotSpot) const |
183 { | 188 { |
184 return m_source.getHotSpot(hotSpot); | 189 return m_source.getHotSpot(hotSpot); |
185 } | 190 } |
186 | 191 |
| 192 bool BitmapImage::setData(PassRefPtr<SharedBuffer> data, bool allDataReceived) |
| 193 { |
| 194 if (!data.get()) |
| 195 return true; |
| 196 |
| 197 int length = data->size(); |
| 198 if (!length) |
| 199 return true; |
| 200 |
| 201 m_source.setData(*data, allDataReceived); |
| 202 |
| 203 return dataChanged(allDataReceived); |
| 204 } |
| 205 |
187 bool BitmapImage::dataChanged(bool allDataReceived) | 206 bool BitmapImage::dataChanged(bool allDataReceived) |
188 { | 207 { |
189 TRACE_EVENT0("blink", "BitmapImage::dataChanged"); | 208 TRACE_EVENT0("blink", "BitmapImage::dataChanged"); |
190 | 209 |
191 // Clear all partially-decoded frames. For most image formats, there is only | 210 // Clear all partially-decoded frames. For most image formats, there is only |
192 // one frame, but at least GIF and ICO can have more. With GIFs, the frames | 211 // one frame, but at least GIF and ICO can have more. With GIFs, the frames |
193 // come in order and we ask to decode them in order, waiting to request a | 212 // come in order and we ask to decode them in order, waiting to request a |
194 // subsequent frame until the prior one is complete. Given that we clear | 213 // subsequent frame until the prior one is complete. Given that we clear |
195 // incomplete frames here, this means there is at most one incomplete frame | 214 // incomplete frames here, this means there is at most one incomplete frame |
196 // (even if we use destroyDecodedData() -- since it doesn't reset the | 215 // (even if we use destroyDecodedData() -- since it doesn't reset the |
(...skipping 14 matching lines...) Expand all Loading... |
211 // cleared-on-a-previous-pass) frames! | 230 // cleared-on-a-previous-pass) frames! |
212 if (m_frames[i].m_haveMetadata && !m_frames[i].m_isComplete) { | 231 if (m_frames[i].m_haveMetadata && !m_frames[i].m_isComplete) { |
213 m_frames[i].clear(true); | 232 m_frames[i].clear(true); |
214 if (i == m_cachedFrameIndex) | 233 if (i == m_cachedFrameIndex) |
215 m_cachedFrame.clear(); | 234 m_cachedFrame.clear(); |
216 } | 235 } |
217 } | 236 } |
218 | 237 |
219 // Feed all the data we've seen so far to the image decoder. | 238 // Feed all the data we've seen so far to the image decoder. |
220 m_allDataReceived = allDataReceived; | 239 m_allDataReceived = allDataReceived; |
221 ASSERT(data()); | |
222 m_source.setData(*data(), allDataReceived); | |
223 | 240 |
224 m_haveFrameCount = false; | 241 m_haveFrameCount = false; |
225 return isSizeAvailable(); | 242 return isSizeAvailable(); |
226 } | 243 } |
227 | 244 |
228 bool BitmapImage::hasColorProfile() const | 245 bool BitmapImage::hasColorProfile() const |
229 { | 246 { |
230 return m_source.hasColorProfile(); | 247 return m_source.hasColorProfile(); |
231 } | 248 } |
232 | 249 |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 | 607 |
591 // We need to draw this frame if we advanced to it while not skipping, or if | 608 // We need to draw this frame if we advanced to it while not skipping, or if |
592 // while trying to skip frames we hit the last frame and thus had to stop. | 609 // while trying to skip frames we hit the last frame and thus had to stop. |
593 if (skippingFrames != advancedAnimation) | 610 if (skippingFrames != advancedAnimation) |
594 getImageObserver()->animationAdvanced(this); | 611 getImageObserver()->animationAdvanced(this); |
595 | 612 |
596 return advancedAnimation; | 613 return advancedAnimation; |
597 } | 614 } |
598 | 615 |
599 } // namespace blink | 616 } // namespace blink |
OLD | NEW |