void FillChecks (Context cr, int x, int y, int width, int height) { int CHECK_SIZE = 32; cr.Save (); Surface check = cr.Target.CreateSimilar (Content.Color, 2 * CHECK_SIZE, 2 * CHECK_SIZE); // draw the check using (Context cr2 = new Context (check)) { cr2.Operator = Operator.Source; cr2.Color = new Color (0.4, 0.4, 0.4); cr2.Rectangle (0, 0, 2 * CHECK_SIZE, 2 * CHECK_SIZE); cr2.Fill (); cr2.Color = new Color (0.7, 0.7, 0.7); cr2.Rectangle (x, y, CHECK_SIZE, CHECK_SIZE); cr2.Fill (); cr2.Rectangle (x + CHECK_SIZE, y + CHECK_SIZE, CHECK_SIZE, CHECK_SIZE); cr2.Fill (); } // Fill the whole surface with the check SurfacePattern check_pattern = new SurfacePattern (check); check_pattern.Extend = Extend.Repeat; cr.Source = check_pattern; cr.Rectangle (0, 0, width, height); cr.Fill (); check_pattern.Destroy (); check.Destroy (); cr.Restore (); }
public bool Convert (FilterRequest req) { string source = req.Current.LocalPath; Uri dest = req.TempUri (Path.GetExtension (source)); using (ImageFile img = ImageFile.Create (source)) { using (Pixbuf pixbuf = img.Load ()) { using (ImageInfo info = new ImageInfo (pixbuf)) { MemorySurface surface = new MemorySurface (Format.Argb32, pixbuf.Width, pixbuf.Height); Context ctx = new Context (surface); ctx.Matrix = info.Fill (info.Bounds, angle); Pattern p = new SurfacePattern (info.Surface); ctx.Source = p; ctx.Paint (); ((IDisposable)ctx).Dispose (); p.Destroy (); using (Pixbuf result = CairoUtils.CreatePixbuf (surface)) { using (Stream output = File.OpenWrite (dest.LocalPath)) { img.Save (result, output); } } surface.Flush (); info.Dispose (); req.Current = dest; return true; } } } }
public ImageInfo (ImageInfo info, Gdk.Rectangle allocation) { #if false Surface = new ImageSurface (Format.RGB24, allocation.Width, allocation.Height); Context ctx = new Context (Surface); #else Console.WriteLine ("source status = {0}", info.Surface.Status); Surface = info.Surface.CreateSimilar (Content.Color, allocation.Width, allocation.Height); System.Console.WriteLine ("status = {1} pointer = {0}", Surface.Handle.ToString (), Surface.Status); Context ctx = new Context (Surface); #endif Bounds = allocation; ctx.Matrix = info.Fill (allocation); Pattern p = new SurfacePattern (info.Surface); ctx.Source = p; ctx.Paint (); ((IDisposable)ctx).Dispose (); p.Destroy (); }
public ImageInfo(ImageInfo info, Widget w, Gdk.Rectangle bounds) { Cairo.Surface similar = CairoUtils.CreateSurface (w.GdkWindow); Bounds = bounds; Surface = similar.CreateSimilar (Content.ColorAlpha, Bounds.Width, Bounds.Height); Context ctx = new Context (Surface); ctx.Matrix = info.Fill (Bounds); Pattern p = new SurfacePattern (info.Surface); ctx.Source = p; ctx.Paint (); ((IDisposable)ctx).Dispose (); p.Destroy (); }
public bool OnExpose(Context ctx, Gdk.Rectangle allocation) { ctx.Operator = Operator.Source; SurfacePattern p = new SurfacePattern (info.Surface); p.Filter = Filter.Fast; Matrix m = info.Fill (allocation, angle); ctx.Matrix = m; ctx.Source = p; ctx.Paint (); p.Destroy (); return true; }
private Pixbuf ProcessImpl (Pixbuf input, Cms.Profile input_profile, bool fast) { Pixbuf result; using (ImageInfo info = new ImageInfo (input)) { MemorySurface surface = new MemorySurface (Format.Argb32, input.Width, input.Height); Context ctx = new Context (surface); ctx.Matrix = info.Fill (info.Bounds, angle); SurfacePattern p = new SurfacePattern (info.Surface); if (fast) { p.Filter = Filter.Fast; } ctx.Source = p; ctx.Paint (); ((IDisposable)ctx).Dispose (); p.Destroy (); result = MemorySurface.CreatePixbuf (surface); surface.Flush (); } return result; }
static void draw (Cairo.Context gr, int width, int height) { int w, h; ImageSurface image; Matrix matrix; SurfacePattern pattern; gr.Scale (width, height); gr.LineWidth = 0.04; image = new ImageSurface ("data/e.png"); w = image.Width; h = image.Height; pattern = new SurfacePattern (image); pattern.Extend = Cairo.Extend.Repeat; gr.Translate (0.5, 0.5); gr.Rotate (M_PI / 4); gr.Scale (1 / Math.Sqrt (2), 1 / Math.Sqrt (2)); gr.Translate (- 0.5, - 0.5); matrix = new Matrix (); matrix.InitScale (w * 5.0, h * 5.0); pattern.Matrix = matrix; gr.Pattern = pattern; gr.Rectangle ( new PointD (0, 0), 1.0, 1.0); gr.Fill (); pattern.Destroy (); image.Destroy(); }
public bool OnExpose (Context ctx, Gdk.Rectangle allocation) { if (frames == 0) start = DateTime.UtcNow; frames ++; TimeSpan elapsed = DateTime.UtcNow - start; double fraction = elapsed.Ticks / (double) duration.Ticks; double opacity = Math.Sin (Math.Min (fraction, 1.0) * Math.PI * 0.5); ctx.Operator = Operator.Source; SurfacePattern p = new SurfacePattern (begin_buffer.Surface); ctx.Matrix = begin_buffer.Fill (allocation); p.Filter = Filter.Fast; ctx.Source = p; ctx.Paint (); ctx.Operator = Operator.Over; ctx.Matrix = end_buffer.Fill (allocation); SurfacePattern sur = new SurfacePattern (end_buffer.Surface); Pattern black = new SolidPattern (new Cairo.Color (0.0, 0.0, 0.0, opacity)); //ctx.Source = black; //ctx.Fill (); sur.Filter = Filter.Fast; ctx.Source = sur; ctx.Mask (black); //ctx.Paint (); ctx.Matrix = new Matrix (); ctx.MoveTo (allocation.Width / 2.0, allocation.Height / 2.0); ctx.Source = new SolidPattern (1.0, 0, 0); #if debug ctx.ShowText (String.Format ("{0} {1} {2} {3} {4} {5} {6} {7}", frames, sur.Status, p.Status, opacity, fraction, elapsed, start, DateTime.UtcNow)); #endif sur.Destroy (); p.Destroy (); return fraction < 1.0; }
public bool OnExpose(Context ctx, Gdk.Rectangle allocation) { ctx.Operator = Operator.Source; ctx.Matrix = end_buffer.Fill (allocation); SurfacePattern sur = new SurfacePattern (end_buffer.Surface); ctx.Source = sur; ctx.Paint (); sur.Destroy (); ctx.Operator = Operator.Over; SurfacePattern p = new SurfacePattern (begin_buffer.Surface); Matrix m = begin_buffer.Fill (allocation); m.Translate (Math.Round (- allocation.Width * fraction), 0); ctx.Matrix = m; p.Filter = Filter.Fast; ctx.Source = p; ctx.Paint (); p.Destroy (); return fraction < 1.0; }
public void imagepattern(Context cr, int width, int height) { Normalize (cr, width, height); ImageSurface image = new ImageSurface ("data/romedalen.png"); int w = image.Width; int h = image.Height; SurfacePattern pattern = new SurfacePattern (image); pattern.Extend = Extend.Repeat; cr.Translate (0.5, 0.5); cr.Rotate (Math.PI / 4); cr.Scale (1 / Math.Sqrt (2), 1 / Math.Sqrt (2)); cr.Translate (- 0.5, - 0.5); Matrix matrix = new Matrix (); matrix.InitScale (w * 5.0, h * 5.0); pattern.Matrix = matrix; cr.Source = pattern; cr.Rectangle (0, 0, 1.0, 1.0); cr.Fill (); pattern.Destroy (); image.Destroy (); }
private void OnExpose(Context ctx, Region region) { SetClip (ctx, region); if (Transition != null) { bool done = false; foreach (Gdk.Rectangle area in GetRectangles (region)) { BlockProcessor proc = new BlockProcessor (area, block_size); Gdk.Rectangle subarea; while (proc.Step (out subarea)) { ctx.Save (); SetClip (ctx, subarea); done = ! Transition.OnExpose (ctx, Allocation); ctx.Restore (); } } if (done) { System.Console.WriteLine ("frames = {0}", Transition.Frames); Transition = null; } } else { ctx.Operator = Operator.Source; SurfacePattern p = new SurfacePattern (current.Surface); p.Filter = Filter.Fast; SetClip (ctx, region); ctx.Matrix = current.Fill (Allocation); ctx.Source = p; ctx.Paint (); p.Destroy (); } }
protected override bool OnExposeEvent(EventExpose args) { bool double_buffer = false; base.OnExposeEvent (args); Context ctx = Gdk.CairoHelper.Create (GdkWindow); if (double_buffer) { ImageSurface cim = new ImageSurface (Format.RGB24, Allocation.Width, Allocation.Height); Context buffer = new Context (cim); OnExpose (buffer, args.Region); SurfacePattern sur = new SurfacePattern (cim); sur.Filter = Filter.Fast; ctx.Source = sur; SetClip (ctx, args.Region); ctx.Paint (); ((IDisposable)buffer).Dispose (); ((IDisposable)cim).Dispose (); sur.Destroy (); } else { OnExpose (ctx, args.Region); } ((IDisposable)ctx).Dispose (); return true; }
public bool OnExpose(Context ctx, Gdk.Rectangle allocation) { ctx.Operator = Operator.Source; SurfacePattern p = new SurfacePattern (begin_buffer.Surface); ctx.Matrix = begin_buffer.Fill (allocation); p.Filter = Filter.Fast; ctx.Source = p; ctx.Paint (); ctx.Operator = Operator.Over; ctx.Matrix = end_buffer.Fill (allocation); SurfacePattern sur = new SurfacePattern (end_buffer.Surface); sur.Filter = Filter.Fast; ctx.Source = sur; Pattern mask = CreateMask (allocation, fraction); ctx.Mask (mask); mask.Destroy (); p.Destroy (); sur.Destroy (); return fraction < 1.0; }
private ImageInfo CreateBlur(ImageInfo source) { double scale = Math.Max (256 / (double) source.Bounds.Width, 256 / (double) source.Bounds.Height); Gdk.Rectangle small = new Gdk.Rectangle (0, 0, (int) Math.Ceiling (source.Bounds.Width * scale), (int) Math.Ceiling (source.Bounds.Height * scale)); ImageSurface image = new ImageSurface (Format.Argb32, small.Width, small.Height); Context ctx = new Context (image); ctx.Matrix = source.Fit (small); ctx.Operator = Operator.Source; Pattern p = new SurfacePattern (source.Surface); ctx.Source = p; ctx.Paint (); p.Destroy (); ((IDisposable)ctx).Dispose (); Gdk.Pixbuf normal = image.ToPixbuf(); Gdk.Pixbuf blur = PixbufUtils.Blur (normal, 3, null); ImageInfo overlay = new ImageInfo (blur); blur.Dispose (); normal.Dispose (); image.Destroy (); return overlay; }
public void Apply(Context ctx, Gdk.Rectangle allocation) { SurfacePattern p = new SurfacePattern (info.Surface); ctx.Matrix = new Matrix (); Matrix m = info.Fit (allocation); ctx.Operator = Operator.Over; ctx.Matrix = m; ctx.Source = p; ctx.Paint (); SurfacePattern overlay = new SurfacePattern (blur.Surface); ctx.Matrix = new Matrix (); ctx.Matrix = blur.Fit (allocation); ctx.Operator = Operator.Over; ctx.Source = overlay; // FIXME ouch this is ugly. if (mask == null) Radius = Radius; //ctx.Paint (); ctx.Mask (mask); overlay.Destroy (); p.Destroy (); }
public bool OnExpose(Context ctx, Gdk.Rectangle viewport) { double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0); //Matrix m = info.Fill (allocation); Matrix m = new Matrix (); m.Translate (pan_x, pan_y); m.Scale (zoom, zoom); ctx.Matrix = m; SurfacePattern p = new SurfacePattern (info.Surface); ctx.Source = p; ctx.Paint (); p.Destroy (); return percent < 1.0; }
public bool OnExpose(Context ctx, Gdk.Rectangle viewport) { double percent = Math.Min ((DateTime.UtcNow - start).Ticks / (double) duration.Ticks, 1.0); frames ++; //ctx.Matrix = m; SurfacePattern p = new SurfacePattern (buffer.Surface); p.Filter = Filter.Fast; Matrix m = new Matrix (); m.Translate (pan_x * zoom, pan_y * zoom); m.Scale (zoom, zoom); zoom *= .98; p.Matrix = m; ctx.Source = p; ctx.Paint (); p.Destroy (); return percent < 1.0; }
public ImageInfo(ImageInfo info, Gdk.Rectangle allocation) { Surface = info.Surface.CreateSimilar (Content.Color, allocation.Width, allocation.Height); Context ctx = new Context (Surface); Bounds = allocation; ctx.Matrix = info.Fill (allocation); Pattern p = new SurfacePattern (info.Surface); ctx.Source = p; ctx.Paint (); ((IDisposable)ctx).Dispose (); p.Destroy (); }