internal void DrawInContext(CGContext ctx) { var backend = new CGContextBackend { Context = ctx, InverseViewTransform = ctx.GetCTM ().Invert () }; DrawInContext (backend); }
static void SetupContextForDrawing(CGContext ctx) { if (ctx.IsPathEmpty ()) return; // setup pattern drawing to better match the behavior of Cairo var drawPoint = ctx.GetCTM ().TransformPoint (ctx.GetPathBoundingBox ().Location); var patternPhase = new SizeF (drawPoint.X, drawPoint.Y); if (patternPhase != SizeF.Empty) ctx.SetPatternPhase (patternPhase); }
// test draw pattern protected void DrawTexture(CGContext context) { var destRect = new RectangleF(0,0,textureImage.Width,textureImage.Height); context.DrawImage(destRect, textureImage.NativeCGImage); if (wrapMode == WrapMode.TileFlipX) { context.ConcatCTM(CGAffineTransform.MakeScale(-1,1)); context.DrawImage(destRect, textureImage.NativeCGImage); } if (wrapMode == WrapMode.TileFlipY) { var transformY = new CGAffineTransform(1, 0, 0, -1, textureImage.Width, textureImage.Height); context.ConcatCTM(transformY); context.DrawImage(destRect, textureImage.NativeCGImage); } if (wrapMode == WrapMode.TileFlipXY) { // draw the original var transform = new CGAffineTransform(1, 0, 0, 1, 0, textureImage.Height); context.ConcatCTM(transform); context.DrawImage(destRect, textureImage.NativeCGImage); // reset the transform context.ConcatCTM (context.GetCTM().Invert()); // draw next to original one that is flipped by x axis transform = new CGAffineTransform(-1, 0, 0, 1, textureImage.Width * 2, textureImage.Height); context.ConcatCTM(transform); context.DrawImage(destRect, textureImage.NativeCGImage); // reset the transform context.ConcatCTM (context.GetCTM().Invert()); // draw one that is flipped by Y axis under the oricinal transform = new CGAffineTransform(1, 0, 0, -1, 0, textureImage.Height); context.ConcatCTM(transform); context.DrawImage(destRect, textureImage.NativeCGImage); // draw the last one of the quadrant which is flipped by both the y and x axis context.ConcatCTM (context.GetCTM().Invert()); transform = new CGAffineTransform(-1, 0, 0, -1, textureImage.Width * 2, textureImage.Height); context.ConcatCTM(transform); context.DrawImage(destRect, textureImage.NativeCGImage); } }