summaryrefslogtreecommitdiffstats
path: root/image/FrozenImage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'image/FrozenImage.cpp')
-rw-r--r--image/FrozenImage.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/image/FrozenImage.cpp b/image/FrozenImage.cpp
new file mode 100644
index 000000000..46047e71f
--- /dev/null
+++ b/image/FrozenImage.cpp
@@ -0,0 +1,122 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "FrozenImage.h"
+
+namespace mozilla {
+
+using namespace gfx;
+using layers::ImageContainer;
+using layers::LayerManager;
+
+namespace image {
+
+NS_IMPL_ISUPPORTS_INHERITED0(FrozenImage, ImageWrapper)
+
+void
+FrozenImage::IncrementAnimationConsumers()
+{
+ // Do nothing. This will prevent animation from starting if there are no other
+ // instances of this image.
+}
+
+void
+FrozenImage::DecrementAnimationConsumers()
+{
+ // Do nothing.
+}
+
+NS_IMETHODIMP
+FrozenImage::GetAnimated(bool* aAnimated)
+{
+ bool dummy;
+ nsresult rv = InnerImage()->GetAnimated(&dummy);
+ if (NS_SUCCEEDED(rv)) {
+ *aAnimated = false;
+ }
+ return rv;
+}
+
+NS_IMETHODIMP_(already_AddRefed<SourceSurface>)
+FrozenImage::GetFrame(uint32_t aWhichFrame,
+ uint32_t aFlags)
+{
+ return InnerImage()->GetFrame(FRAME_FIRST, aFlags);
+}
+
+NS_IMETHODIMP_(already_AddRefed<SourceSurface>)
+FrozenImage::GetFrameAtSize(const IntSize& aSize,
+ uint32_t aWhichFrame,
+ uint32_t aFlags)
+{
+ return InnerImage()->GetFrameAtSize(aSize, FRAME_FIRST, aFlags);
+}
+
+NS_IMETHODIMP_(bool)
+FrozenImage::IsImageContainerAvailable(LayerManager* aManager, uint32_t aFlags)
+{
+ return false;
+}
+
+NS_IMETHODIMP_(already_AddRefed<ImageContainer>)
+FrozenImage::GetImageContainer(layers::LayerManager* aManager, uint32_t aFlags)
+{
+ // XXX(seth): GetImageContainer does not currently support anything but the
+ // current frame. We work around this by always returning null, but if it ever
+ // turns out that FrozenImage is widely used on codepaths that can actually
+ // benefit from GetImageContainer, it would be a good idea to fix that method
+ // for performance reasons.
+ return nullptr;
+}
+
+NS_IMETHODIMP_(DrawResult)
+FrozenImage::Draw(gfxContext* aContext,
+ const nsIntSize& aSize,
+ const ImageRegion& aRegion,
+ uint32_t /* aWhichFrame - ignored */,
+ SamplingFilter aSamplingFilter,
+ const Maybe<SVGImageContext>& aSVGContext,
+ uint32_t aFlags)
+{
+ return InnerImage()->Draw(aContext, aSize, aRegion, FRAME_FIRST,
+ aSamplingFilter, aSVGContext, aFlags);
+}
+
+NS_IMETHODIMP_(void)
+FrozenImage::RequestRefresh(const TimeStamp& aTime)
+{
+ // Do nothing.
+}
+
+NS_IMETHODIMP
+FrozenImage::GetAnimationMode(uint16_t* aAnimationMode)
+{
+ *aAnimationMode = kNormalAnimMode;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+FrozenImage::SetAnimationMode(uint16_t aAnimationMode)
+{
+ // Do nothing.
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+FrozenImage::ResetAnimation()
+{
+ // Do nothing.
+ return NS_OK;
+}
+
+NS_IMETHODIMP_(float)
+FrozenImage::GetFrameIndex(uint32_t aWhichFrame)
+{
+ MOZ_ASSERT(aWhichFrame <= FRAME_MAX_VALUE, "Invalid argument");
+ return 0;
+}
+
+} // namespace image
+} // namespace mozilla