public GDILayer PushLayer(GDIGraphics g, ScDrawNode node) { ScLayer sclayer = node.layer; GDILayer gdiLayer = new GDILayer(g); GDILayerParameters layerParameters = new GDILayerParameters(); layerParameters.ContentBounds = sclayer.DrawBox; layerParameters.MaskAntialiasMode = GDIAntialiasMode.PerPrimitive; layerParameters.Opacity = sclayer.Opacity; layerParameters.ClipRect = new RectangleF( (int)(node.clipRect.X - sclayer.DrawBox.X - 1), (int)(node.clipRect.Y - sclayer.DrawBox.Y - 1), (int)(node.clipRect.Width + 2), (int)(node.clipRect.Height + 2)); Matrix m = new Matrix(); m.Translate(-sclayer.DrawBox.X, -sclayer.DrawBox.Y); m.Multiply(sclayer.GlobalMatrix); node.m = m; node.rootLayer = node.layer; if (!sclayer.Parent.IsComputedStraight) { m = new Matrix(); m.Translate(-sclayer.Parent.DrawBox.X, -sclayer.Parent.DrawBox.Y); m.Multiply(sclayer.GlobalMatrix); layerParameters.GeometricMask = sclayer.CreateTransLastHitGeometryForGDI(m); m.Dispose(); } else { layerParameters.GeometricMask = sclayer.TransLastHitGraphicsPath; layerParameters.parentClipRect = node.clipRect; } node.clipRect = layerParameters.ClipRect; layerParameters.sclayer = sclayer; g.PushLayer(layerParameters, gdiLayer); return(gdiLayer); }