using System; using System.IO; using Cairo; using Gtk; public class Example { static void Main () { Application.Init (); Gtk.Window w = new Gtk.Window ("Ґрадієнт"); w.Resize (210, 210); DrawingArea a = new CairoGraphic (); Box box = new HBox (true, 0); box.Add (a); w.Add (box); w.DeleteEvent += close_window; w.ShowAll (); Application.Run (); } static void close_window (object obj, DeleteEventArgs args) { Application.Quit (); } } public class CairoGraphic : DrawingArea { protected override bool OnExposeEvent (Gdk.EventExpose args) { using (Context g = Gdk.CairoHelper.Create (args.Window)) { // Фіґура g.MoveTo (new PointD (10,200)); g.CurveTo (new PointD (10,10), new PointD (10,10), new PointD (200,10)); g.CurveTo (new PointD (200,200), new PointD (200,200), new PointD (10,200)); g.ClosePath (); g.Save (); // Збереження стану для його відновлення згодом Cairo.Gradient pat = new Cairo.LinearGradient (10,200, 200, 100); pat.AddColorStop (0, new Cairo.Color (0,1,0,1)); pat.AddColorStop (1, new Cairo.Color (1,0,0,1)); g.SetSource(pat); // Використання ґрадієнту g.FillPreserve (); // Заповнення ґрадієнтом g.Restore (); // Відновлення стану g.SetSourceColor(new Color (0,0,1)); // Колір контура g.LineWidth = 16; // Товщина контура g.Stroke (); // Наведення контура g.GetTarget().Dispose (); // Прибирання сміття g.Dispose (); } return true; } }