| 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 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 } | 377 } |
| 378 | 378 |
| 379 return Image::imageForDefaultFrame(); | 379 return Image::imageForDefaultFrame(); |
| 380 } | 380 } |
| 381 | 381 |
| 382 bool BitmapImage::frameHasAlphaAtIndex(size_t index) | 382 bool BitmapImage::frameHasAlphaAtIndex(size_t index) |
| 383 { | 383 { |
| 384 if (m_frames.size() <= index) | 384 if (m_frames.size() <= index) |
| 385 return true; | 385 return true; |
| 386 | 386 |
| 387 if (m_frames[index].m_haveMetadata && !m_frames[index].m_hasAlpha) |
| 388 return false; |
| 389 |
| 390 // m_hasAlpha may change after m_haveMetadata is set to true, so always ask |
| 391 // ImageSource for the value if the cached value is the default value. |
| 392 bool hasAlpha = m_source.frameHasAlphaAtIndex(index); |
| 393 |
| 387 if (m_frames[index].m_haveMetadata) | 394 if (m_frames[index].m_haveMetadata) |
| 388 return m_frames[index].m_hasAlpha; | 395 m_frames[index].m_hasAlpha = hasAlpha; |
| 389 | 396 |
| 390 return m_source.frameHasAlphaAtIndex(index); | 397 return hasAlpha; |
| 391 } | 398 } |
| 392 | 399 |
| 393 bool BitmapImage::currentFrameKnownToBeOpaque(MetadataMode metadataMode) | 400 bool BitmapImage::currentFrameKnownToBeOpaque(MetadataMode metadataMode) |
| 394 { | 401 { |
| 395 if (metadataMode == PreCacheMetadata) { | 402 if (metadataMode == PreCacheMetadata) { |
| 396 // frameHasAlphaAtIndex() conservatively returns false for uncached fram
es. To increase the | 403 // frameHasAlphaAtIndex() conservatively returns false for uncached fram
es. To increase the |
| 397 // chance of an accurate answer, pre-cache the current frame metadata. | 404 // chance of an accurate answer, pre-cache the current frame metadata. |
| 398 frameAtIndex(currentFrame()); | 405 frameAtIndex(currentFrame()); |
| 399 } | 406 } |
| 400 return !frameHasAlphaAtIndex(currentFrame()); | 407 return !frameHasAlphaAtIndex(currentFrame()); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 | 617 |
| 611 // We need to draw this frame if we advanced to it while not skipping, or if | 618 // We need to draw this frame if we advanced to it while not skipping, or if |
| 612 // while trying to skip frames we hit the last frame and thus had to stop. | 619 // while trying to skip frames we hit the last frame and thus had to stop. |
| 613 if (skippingFrames != advancedAnimation) | 620 if (skippingFrames != advancedAnimation) |
| 614 getImageObserver()->animationAdvanced(this); | 621 getImageObserver()->animationAdvanced(this); |
| 615 | 622 |
| 616 return advancedAnimation; | 623 return advancedAnimation; |
| 617 } | 624 } |
| 618 | 625 |
| 619 } // namespace blink | 626 } // namespace blink |
| OLD | NEW |