using Gtk; using Cairo; using System; class SharpApp : Window { public SharpApp() : base("Ґрадієнти") { SetDefaultSize(340, 390); SetPosition(WindowPosition.Center); DeleteEvent += delegate { Application.Quit(); }; DrawingArea darea = new DrawingArea(); darea.ExposeEvent += OnExpose; Add(darea); ShowAll(); } void OnExpose(object sender, ExposeEventArgs args) { DrawingArea area = (DrawingArea) sender; Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow); LinearGradient lg1 = new LinearGradient(0.0, 0.0, 350.0, 350.0); int count = 1; for (double j=0.1; j<1.0; j+= 0.1) { if (Convert.ToBoolean(count % 2)) {lg1.AddColorStop(j, new Color(0,1,0,1));} else {lg1.AddColorStop(j, new Color(1,0,0,1));} count++; } cr.Rectangle(20, 20, 300, 100); cr.SetSource(lg1); cr.Fill(); LinearGradient lg2 = new LinearGradient(0.0, 0.0, 350.0, 0); count = 1; for (double i=0.05; i<0.95; i+= 0.1) { if (Convert.ToBoolean(count % 2)) {lg2.AddColorStop(i, new Color(0,0,0,1));} else {lg2.AddColorStop(i, new Color(0,1,0,1));} count++; } cr.Rectangle(20, 140, 300, 100); cr.SetSource(lg2); cr.Fill(); LinearGradient lg3 = new LinearGradient(20.0, 260.0, 20.0, 360.0); lg3.AddColorStop(0.1, new Color(1,0,0,1)); lg3.AddColorStop(0.5, new Color(1,1,0,1)); lg3.AddColorStop(0.9, new Color(1,0,0,1)); cr.Rectangle(20, 260, 300, 100); cr.SetSource(lg3); cr.Fill(); lg1.Dispose(); lg2.Dispose(); lg3.Dispose(); ((IDisposable) cr.GetTarget()).Dispose(); ((IDisposable) cr).Dispose(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }