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 Apple Computer, Inc. All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. |
4 * Copyright (C) 2008-2009 Torch Mobile, Inc. | 4 * Copyright (C) 2008-2009 Torch Mobile, Inc. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 | 68 |
69 virtual bool dataChanged(bool allDataReceived) OVERRIDE; | 69 virtual bool dataChanged(bool allDataReceived) OVERRIDE; |
70 virtual String filenameExtension() const OVERRIDE; | 70 virtual String filenameExtension() const OVERRIDE; |
71 | 71 |
72 // It may look unusual that there is no start animation call as public API.
This is because | 72 // It may look unusual that there is no start animation call as public API.
This is because |
73 // we start and stop animating lazily. Animation begins whenever someone dr
aws the image. It will | 73 // we start and stop animating lazily. Animation begins whenever someone dr
aws the image. It will |
74 // automatically pause once all observers no longer want to render the image
anywhere. | 74 // automatically pause once all observers no longer want to render the image
anywhere. |
75 virtual void stopAnimation() OVERRIDE; | 75 virtual void stopAnimation() OVERRIDE; |
76 virtual void resetAnimation() OVERRIDE; | 76 virtual void resetAnimation() OVERRIDE; |
77 | 77 |
78 virtual unsigned decodedSize() const OVERRIDE; | |
79 | |
80 virtual PassRefPtr<NativeImageSkia> nativeImageForCurrentFrame() OVERRIDE; | 78 virtual PassRefPtr<NativeImageSkia> nativeImageForCurrentFrame() OVERRIDE; |
81 virtual bool currentFrameKnownToBeOpaque() OVERRIDE; | 79 virtual bool currentFrameKnownToBeOpaque() OVERRIDE; |
82 | 80 |
83 ImageOrientation currentFrameOrientation(); | 81 ImageOrientation currentFrameOrientation(); |
84 | 82 |
85 #if !ASSERT_DISABLED | 83 #if !ASSERT_DISABLED |
86 virtual bool notSolidColor() OVERRIDE; | 84 virtual bool notSolidColor() OVERRIDE; |
87 #endif | 85 #endif |
88 | 86 |
89 private: | 87 private: |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 void destroyDecodedDataIfNecessary(); | 128 void destroyDecodedDataIfNecessary(); |
131 | 129 |
132 // Generally called by destroyDecodedData(), destroys whole-image metadata | 130 // Generally called by destroyDecodedData(), destroys whole-image metadata |
133 // and notifies observers that the memory footprint has (hopefully) | 131 // and notifies observers that the memory footprint has (hopefully) |
134 // decreased by |frameBytesCleared|. | 132 // decreased by |frameBytesCleared|. |
135 void destroyMetadataAndNotify(size_t frameBytesCleared); | 133 void destroyMetadataAndNotify(size_t frameBytesCleared); |
136 | 134 |
137 // Whether or not size is available yet. | 135 // Whether or not size is available yet. |
138 bool isSizeAvailable(); | 136 bool isSizeAvailable(); |
139 | 137 |
140 // Called after asking the source for any information that may require | |
141 // decoding part of the image (e.g., the image size). We need to report | |
142 // the partially decoded data to our observer so it has an accurate | |
143 // account of the BitmapImage's memory usage. | |
144 void didDecodeProperties() const; | |
145 | |
146 // Animation. | 138 // Animation. |
147 int repetitionCount(bool imageKnownToBeComplete); // |imageKnownToBeComplet
e| should be set if the caller knows the entire image has been decoded. | 139 int repetitionCount(bool imageKnownToBeComplete); // |imageKnownToBeComplet
e| should be set if the caller knows the entire image has been decoded. |
148 bool shouldAnimate(); | 140 bool shouldAnimate(); |
149 virtual void startAnimation(bool catchUpIfNecessary = true) OVERRIDE; | 141 virtual void startAnimation(bool catchUpIfNecessary = true) OVERRIDE; |
150 void advanceAnimation(Timer<BitmapImage>*); | 142 void advanceAnimation(Timer<BitmapImage>*); |
151 | 143 |
152 // Function that does the real work of advancing the animation. When | 144 // Function that does the real work of advancing the animation. When |
153 // skippingFrames is true, we're in the middle of a loop trying to skip over | 145 // skippingFrames is true, we're in the middle of a loop trying to skip over |
154 // a bunch of animation frames, so we should not do things like decode each | 146 // a bunch of animation frames, so we should not do things like decode each |
155 // one or notify our observers. | 147 // one or notify our observers. |
(...skipping 16 matching lines...) Expand all Loading... |
172 Vector<FrameData, 1> m_frames; // An array of the cached frames of the anima
tion. We have to ref frames to pin them in the cache. | 164 Vector<FrameData, 1> m_frames; // An array of the cached frames of the anima
tion. We have to ref frames to pin them in the cache. |
173 | 165 |
174 Timer<BitmapImage>* m_frameTimer; | 166 Timer<BitmapImage>* m_frameTimer; |
175 int m_repetitionCount; // How many total animation loops we should do. This
will be cAnimationNone if this image type is incapable of animation. | 167 int m_repetitionCount; // How many total animation loops we should do. This
will be cAnimationNone if this image type is incapable of animation. |
176 RepetitionCountStatus m_repetitionCountStatus; | 168 RepetitionCountStatus m_repetitionCountStatus; |
177 int m_repetitionsComplete; // How many repetitions we've finished. | 169 int m_repetitionsComplete; // How many repetitions we've finished. |
178 double m_desiredFrameStartTime; // The system time at which we hope to see
the next call to startAnimation(). | 170 double m_desiredFrameStartTime; // The system time at which we hope to see
the next call to startAnimation(). |
179 | 171 |
180 Color m_solidColor; // If we're a 1x1 solid color, this is the color to use
to fill. | 172 Color m_solidColor; // If we're a 1x1 solid color, this is the color to use
to fill. |
181 | 173 |
182 unsigned m_decodedSize; // The current size of all decoded frames. | |
183 mutable unsigned m_decodedPropertiesSize; // The size of data decoded by the
source to determine image properties (e.g. size, frame count, etc). | |
184 size_t m_frameCount; | 174 size_t m_frameCount; |
185 | 175 |
186 bool m_isSolidColor : 1; // Whether or not we are a 1x1 solid image. | 176 bool m_isSolidColor : 1; // Whether or not we are a 1x1 solid image. |
187 bool m_checkedForSolidColor : 1; // Whether we've checked the frame for soli
d color. | 177 bool m_checkedForSolidColor : 1; // Whether we've checked the frame for soli
d color. |
188 | 178 |
189 bool m_animationFinished : 1; // Whether or not we've completed the entire a
nimation. | 179 bool m_animationFinished : 1; // Whether or not we've completed the entire a
nimation. |
190 | 180 |
191 bool m_allDataReceived : 1; // Whether or not we've received all our data. | 181 bool m_allDataReceived : 1; // Whether or not we've received all our data. |
192 mutable bool m_haveSize : 1; // Whether or not our |m_size| member variable
has the final overall image size yet. | 182 mutable bool m_haveSize : 1; // Whether or not our |m_size| member variable
has the final overall image size yet. |
193 bool m_sizeAvailable : 1; // Whether or not we can obtain the size of the fi
rst image frame yet from ImageIO. | 183 bool m_sizeAvailable : 1; // Whether or not we can obtain the size of the fi
rst image frame yet from ImageIO. |
194 mutable bool m_hasUniformFrameSize : 1; | 184 mutable bool m_hasUniformFrameSize : 1; |
195 mutable bool m_haveFrameCount : 1; | 185 mutable bool m_haveFrameCount : 1; |
196 }; | 186 }; |
197 | 187 |
198 } | 188 } |
199 | 189 |
200 #endif | 190 #endif |
OLD | NEW |