Example #1
0
        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);
        }
Example #2
0
        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);
 }