void drawCallout(CGContext context, CalloutAnnotation callout)
        {
            callout.Color.SetStroke();

            context.SaveState();

            callout.Clip.AddClip();
            callout.Path.Stroke();

            context.RestoreState();

            callout.Tail.Stroke();

            drawLabel(context, displayRect, displayRect.Height - callout.Center.Y, callout.Center.X, CTTextAlignment.Center, callout.Color, callout.CalloutString, true);

            calloutCount += 1;
        }
        public override void TouchesEnded(NSSet touches, UIEvent evt)
        {
            // base.TouchesEnded(touches, evt);

            if (!TrapState.Shared.HasActiveSnapshotImage) return;

            switch (Tool) {
            case Annotate.Tool.Callout:

                var rect = new CGRect (new CGPoint (pathStart.X - 16, pathStart.Y - 14), new CGSize (32, 28));
                // let rect = CGRect(origin: CGPoint(x: pathStart.x - 3, y: pathStart.y - 32), size: CGSize(width: 28, height: 24))

                var callout = new CalloutAnnotation (calloutCount, rect, bzPath.LineWidth, strokeColor);

                annotationDataCache.Add(callout);

                redrawBitmap();

                break;
            case Annotate.Tool.Marker:
            case Annotate.Tool.Arrow:
            case Annotate.Tool.Circle:
            case Annotate.Tool.Square:

                if (Tool == Annotate.Tool.Marker) UIGraphics.EndImageContext();

                if (touchesDidMove) {

                    var annotation = new PathAnnotation (Tool, bzPath, strokeColor);

                    annotationDataCache.Add(annotation);

                    redrawBitmap();
                }

                break;
            case Annotate.Tool.Color:
                break;
            }

            bzPath.RemoveAllPoints();

            pathStart = CGPoint.Empty;

            counter = 0;

            touchesDidMove = false;
        }