AnimationFactory* BAMImporter::GetAnimationFactory(const char* ResRef, unsigned char mode) { unsigned int i, count; AnimationFactory* af = new AnimationFactory( ResRef ); ieWord *FLT = CacheFLT( count ); bool videoBAMsupport = core->GetVideoDriver()->SupportsBAMSprites(); unsigned char* data = NULL; if (videoBAMsupport) { str->Seek( DataStart, GEM_STREAM_START ); unsigned long length = str->Remains(); if (length == 0) return af; //data = new unsigned char[length]; data = (unsigned char *) malloc(length); str->Read( data, length ); af->SetFrameData(data); } for (i = 0; i < FramesCount; ++i) { Sprite2D* frame = GetFrameInternal(i, mode, videoBAMsupport, data, af); assert(!videoBAMsupport || frame->BAM); af->AddFrame(frame); } for (i = 0; i < CyclesCount; ++i) { af->AddCycle( cycles[i] ); } af->LoadFLT ( FLT, count ); free (FLT); return af; }
Pair<DrawResult, RefPtr<layers::Image>> RasterImage::GetCurrentImage(ImageContainer* aContainer, uint32_t aFlags) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aContainer); DrawResult drawResult; RefPtr<SourceSurface> surface; Tie(drawResult, surface) = GetFrameInternal(mSize, FRAME_CURRENT, aFlags | FLAG_ASYNC_NOTIFY); if (!surface) { // The OS threw out some or all of our buffer. We'll need to wait for the // redecode (which was automatically triggered by GetFrame) to complete. return MakePair(drawResult, RefPtr<layers::Image>()); } RefPtr<layers::Image> image = new layers::SourceSurfaceImage(surface); return MakePair(drawResult, Move(image)); }
ClippedImage::Draw(gfxContext* aContext, const nsIntSize& aSize, const ImageRegion& aRegion, uint32_t aWhichFrame, SamplingFilter aSamplingFilter, const Maybe<SVGImageContext>& aSVGContext, uint32_t aFlags, float aOpacity) { if (!ShouldClip()) { return InnerImage()->Draw(aContext, aSize, aRegion, aWhichFrame, aSamplingFilter, aSVGContext, aFlags, aOpacity); } // Check for tiling. If we need to tile then we need to create a // gfxCallbackDrawable to handle drawing for us. if (MustCreateSurface(aContext, aSize, aRegion, aFlags)) { // Create a temporary surface containing a single tile of this image. // GetFrame will call DrawSingleTile internally. DrawResult result; RefPtr<SourceSurface> surface; Tie(result, surface) = GetFrameInternal(aSize, aSVGContext, aWhichFrame, aFlags, aOpacity); if (!surface) { MOZ_ASSERT(result != DrawResult::SUCCESS); return result; } // Create a drawable from that surface. RefPtr<gfxSurfaceDrawable> drawable = new gfxSurfaceDrawable(surface, aSize); // Draw. gfxUtils::DrawPixelSnapped(aContext, drawable, aSize, aRegion, SurfaceFormat::B8G8R8A8, aSamplingFilter, aOpacity); return result; } return DrawSingleTile(aContext, aSize, aRegion, aWhichFrame, aSamplingFilter, aSVGContext, aFlags, aOpacity); }
RasterImage::GetFrameAtSize(const IntSize& aSize, uint32_t aWhichFrame, uint32_t aFlags) { return GetFrameInternal(aSize, aWhichFrame, aFlags).second().forget(); }
RasterImage::GetFrame(uint32_t aWhichFrame, uint32_t aFlags) { return GetFrameInternal(mSize, aWhichFrame, aFlags).second().forget(); }