private void gradientToolStripMenuItem_Click(object sender, EventArgs e) { lastSelected = "gradient"; OnPaintAction = cr => { Gradient pat = new LinearGradient(0.0, 0.0, 0.0, 256.0); pat.AddColorStopRgba(1, 0, 0, 0, 1); pat.AddColorStopRgba(0, 1, 1, 1, 1); cr.Rectangle(0, 0, 256, 256); cr.SetSource(pat); cr.Fill(); pat.Dispose(); pat = new RadialGradient(115.2, 102.4, 25.6, 102.4, 102.4, 128.0); pat.AddColorStopRgba(0, 1, 1, 1, 1); pat.AddColorStopRgba(1, 0, 0, 0, 1); cr.SetSource(pat); cr.Arc(128.0, 128.0, 76.8, 0, 2 * Math.PI); cr.Fill(); pat.Dispose(); }; Invalidate(); }
public override void DrawPie (double fraction) { // Calculate the pie path fraction = Theme.Clamp (0.0, 1.0, fraction); double a1 = 3.0 * Math.PI / 2.0; double a2 = a1 + 2.0 * Math.PI * fraction; if (fraction == 0.0) { return; } Context.Cairo.MoveTo (Context.X, Context.Y); Context.Cairo.Arc (Context.X, Context.Y, Context.Radius, a1, a2); Context.Cairo.LineTo (Context.X, Context.Y); // Fill the pie Color color_a = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected); Color color_b = CairoExtensions.ColorShade (color_a, 1.4); RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0, Context.X, Context.Y, 2.0 * Context.Radius); fill.AddColorStop (0, color_a); fill.AddColorStop (1, color_b); Context.Cairo.SetSource (fill); Context.Cairo.FillPreserve (); fill.Dispose (); // Stroke the pie Context.Cairo.SetSourceColor (CairoExtensions.ColorShade (color_a, 0.8)); Context.Cairo.LineWidth = Context.LineWidth; Context.Cairo.Stroke (); }