예제 #1
0
        public unsafe static Gdk.Pixbuf ToPixbuf(this Cairo.ImageSurface surfSource)
        {
            Cairo.ImageSurface surf = surfSource.Clone();
            surf.Flush();

            ColorBgra *dstPtr = (ColorBgra *)surf.DataPtr;
            int        len    = surf.Data.Length / 4;

            for (int i = 0; i < len; i++)
            {
                if (dstPtr->A != 0)
                {
                    *dstPtr = (ColorBgra.FromBgra(dstPtr->R, dstPtr->G, dstPtr->B, dstPtr->A));
                }
                dstPtr++;
            }

            Gdk.Pixbuf pb = new Gdk.Pixbuf(surf.Data, true, 8, surf.Width, surf.Height, surf.Stride);
            (surf as IDisposable).Dispose();
            return(pb);
        }
예제 #2
0
        protected override bool OnExposeEvent(Gdk.EventExpose ev)
        {
            base.OnExposeEvent(ev);
			
            if (pages == null)
                return false;
				
            int width = (int)(report.PageWidthPoints * Scale);
            int height = (int)(report.PageHeightPoints * Scale);
            Cairo.Rectangle rep_r = new Cairo.Rectangle(1, 1, width - 1, height - 1);

            int widgetWidth, widgetHeight;
            ev.Window.GetSize(out widgetWidth, out widgetHeight);
			
            using (Context g = Gdk.CairoHelper.Create(this.GdkWindow))
            using (ImageSurface rep_s = new ImageSurface(Format.Argb32, width, height))
            using (Context rep_g = new Context(rep_s))
            using (ImageSurface shadow_s = rep_s.Clone())
            using (Context shadow_g = new Context(shadow_s))
            {
				
                g.Translate(((widgetWidth - width) / 2) - rep_padding, 0);
                shadow_g.Pattern = new SolidPattern(new Color(0.6, 0.6, 0.6));
                shadow_g.Paint();
                g.SetSourceSurface(shadow_s, shadow_padding, shadow_padding);
                g.Paint();
				
                rep_g.Pattern = new SolidPattern(new Color(1, 1, 1));
                rep_g.Paint();
				
                rep_g.DrawRectangle(rep_r, new Color(0.1, 0.1, 0.1), 1);

                using (var render = new RenderCairo(rep_g, Scale))
                {
                    render.RunPage(pages);
                }

                g.SetSourceSurface(rep_s, rep_padding, rep_padding);
                g.Paint();
				
            }
            return true;
        }