public Gdk.PixbufAnimationIter GetIter(IntPtr start_time) { IntPtr raw_ret = gdk_pixbuf_animation_get_iter(Handle, start_time); Gdk.PixbufAnimationIter ret = GLib.Object.GetObject(raw_ret) as Gdk.PixbufAnimationIter; return(ret); }
private void UpdateImage(bool forceUpdate) { if (this.image == null || this.image.Anim == null) { return; } Gdk.PixbufAnimation animation; animation = this.image.Anim; // if (this.areaSize.X <= 2 || this.areaSize.Y <= 2) { return; } Gdk.Pixbuf unscaledPixBuf = null; bool newAnimFrame = false; if (animation.IsStaticImage) { if (forceUpdate) { unscaledPixBuf = animation.StaticImage; } } else { if (this.animIter == null) { animIter = animation.GetIter(IntPtr.Zero); } if (animIter != null && animIter.Advance(IntPtr.Zero)) { unscaledPixBuf = animIter.Pixbuf; newAnimFrame = true; } } var imageSize = new Cairo.PointD(animation.Width, animation.Height); if (imageSize.X <= 2 || imageSize.Y <= 2) { return; } // scale preserving aspect ratio var scale = Math.Min(this.areaSize.X / imageSize.X, this.areaSize.Y / imageSize.Y); var scaledImageSize = new Cairo.PointD(imageSize.X * scale, imageSize.Y * scale); if (unscaledPixBuf == null) { return; } if (newAnimFrame || unscaledPixBuf != this.unscaledPixBuf || scaledImageSize.X != this.scaledImageSize.X || scaledImageSize.Y != this.scaledImageSize.Y) { if (this.ScaledPixbuf != null) { this.ScaledPixbuf.Dispose(); } Gdk.Pixbuf scaledPixBuf = unscaledPixBuf.ScaleSimple((int)scaledImageSize.X, (int)scaledImageSize.Y, Gdk.InterpType.Hyper); this.ScaledPixbuf = scaledPixBuf; this.scaledImageSize = scaledImageSize; this.unscaledPixBuf = unscaledPixBuf; } // where to draw the pixbuf this.TargetRect = new Cairo.Rectangle( (this.areaSize.X - this.scaledImageSize.X) / 2, (this.areaSize.Y - this.scaledImageSize.Y) / 2, this.scaledImageSize.X, this.scaledImageSize.Y ); this.QueueFrame(); }
public CellRendererCertificate() { anim = new Gdk.PixbufAnimation(ECM.Core.LoadingSpinnerGIF); animIter = anim.GetIter(IntPtr.Zero); }