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 ();
}
}
}