Pinta.MainWindow.OnDrawingarea1ExposeEvent C# (CSharp) Method

OnDrawingarea1ExposeEvent() private method

private OnDrawingarea1ExposeEvent ( object o, Gtk args ) : void
o object
args Gtk
return void
        private void OnDrawingarea1ExposeEvent(object o, Gtk.ExposeEventArgs args)
        {
            double scale = PintaCore.Workspace.Scale;

            double x = PintaCore.Workspace.Offset.X;
            double y = PintaCore.Workspace.Offset.Y;

            using (Cairo.Context g = CairoHelper.Create (drawingarea1.GdkWindow)) {
                // Black 1px border around image
                g.DrawRectangle (new Cairo.Rectangle (x, y, PintaCore.Workspace.CanvasSize.X + 1, PintaCore.Workspace.CanvasSize.Y + 1), new Cairo.Color (0, 0, 0), 1);

                // Transparent checkerboard pattern
                using (Cairo.SurfacePattern sp = new Cairo.SurfacePattern (PintaCore.Layers.TransparentLayer.Surface)) {
                    sp.Extend = Cairo.Extend.Repeat;

                    g.FillRectangle (new Cairo.Rectangle (x, y, PintaCore.Workspace.CanvasSize.X, PintaCore.Workspace.CanvasSize.Y), sp);
                }

                // User's layers
                g.Save ();
                g.Translate (x, y);
                g.Scale (scale, scale);

                foreach (Layer layer in PintaCore.Layers.GetLayersToPaint ()) {
                    if (layer == PintaCore.Layers.CurrentLayer && PintaCore.LivePreview.IsEnabled) {
                        PintaCore.LivePreview.RenderLivePreviewLayer (g, layer.Opacity);
                    } else {
                        g.SetSourceSurface (layer.Surface, (int)layer.Offset.X, (int)layer.Offset.Y);
                        g.PaintWithAlpha (layer.Opacity);
                    }
                }

                g.Restore ();

                // Selection outline
                if (PintaCore.Layers.ShowSelection) {
                    g.Save ();
                    g.Translate (x, y);
                    g.Translate (0.5, 0.5);
                    g.Scale (scale, scale);

                    g.AppendPath (PintaCore.Layers.SelectionPath);

                    if (PintaCore.Tools.CurrentTool.Name.Contains ("Select") && !PintaCore.Tools.CurrentTool.Name.Contains ("Selected")) {
                        g.Color = new Cairo.Color (.7, .8, .9, .2);
                        g.FillRule = Cairo.FillRule.EvenOdd;
                        g.FillPreserve ();
                    }

                    g.SetDash (new double[] { 2 / scale, 4 / scale }, 0);
                    g.LineWidth = 1 / scale;
                    g.Color = new Cairo.Color (0, 0, 0);

                    g.Stroke ();
                    g.Restore ();
                }
            }
        }