Esempio n. 1
0
        void DrawElement(Func <Rect> add, Pen pen = null, Brush brush = null)
        {
            if (pen == null && brush == null)
            {
                return;
            }

            var lgb = brush as LinearGradientBrush;

            if (lgb != null)
            {
                var cg = CreateGradient(lgb.Stops);
                context.SaveState();
                var frame = add();
                context.Clip();
                CGGradientDrawingOptions options = CGGradientDrawingOptions.DrawsBeforeStartLocation | CGGradientDrawingOptions.DrawsAfterEndLocation;
                var size  = frame.Size;
                var start = Conversions.GetCGPoint(lgb.Absolute ? lgb.Start : frame.Position + lgb.Start * size);
                var end   = Conversions.GetCGPoint(lgb.Absolute ? lgb.End : frame.Position + lgb.End * size);
                context.DrawLinearGradient(cg, start, end, options);
                context.RestoreState();
                brush = null;
            }

            var rgb = brush as RadialGradientBrush;

            if (rgb != null)
            {
                var cg = CreateGradient(rgb.Stops);
                context.SaveState();
                var frame = add();
                context.Clip();
                CGGradientDrawingOptions options = CGGradientDrawingOptions.DrawsBeforeStartLocation | CGGradientDrawingOptions.DrawsAfterEndLocation;
                var size  = frame.Size;
                var start = Conversions.GetCGPoint(rgb.GetAbsoluteCenter(frame));
                var r     = (nfloat)rgb.GetAbsoluteRadius(frame).Max;
                var end   = Conversions.GetCGPoint(rgb.GetAbsoluteFocus(frame));
                context.DrawRadialGradient(cg, start, 0, end, r, options);
                context.RestoreState();
                brush = null;
            }

            if (pen != null || brush != null)
            {
                var mode = SetPenAndBrush(pen, brush);

                add();
                context.DrawPath(mode);
            }
        }