using Cairo; using Gdk; using Gtk; class Area : DrawingArea { public double alpha = 1.0; public double size = 1.0; public bool timer = true; protected override bool OnDrawn(Context cr) // малювання { int x = Allocation.Width / 2; // Абсциса середини int y = Allocation.Height / 2; // Ордината середини cr.SetSourceRGB(0, 0.5, 0); // Темно-зелений колір тла cr.Paint(); cr.SelectFontFace("Ubuntu", FontSlant.Normal, FontWeight.Bold); size += 1.0; // Приріст розміру шрифту на 0,8 одиниці за один виклик Таймера if (size > 20) { alpha -= 0.01; } // Зростання прозорості після того, як розмір шрифту досягне 20 cr.SetFontSize(size); cr.SetSourceRGB(1, 1, 1); TextExtents extents = cr.TextExtents("Увага!"); // Отримання властивостей тексту cr.MoveTo(x - extents.Width / 2, y + extents.Height / 2);// Центрування тексту у вікні cr.TextPath("Увага!"); // Отримання шляху до тексту cr.Clip(); // Встановлення для нього області поточного кліпу cr.Stroke(); // Малювання поточного шляху, побудованого за текстом cr.PaintWithAlpha(alpha);// з урахуванням прозорості // if (alpha <= 0) { timer = false;} // Прибрати коментування для одного циклу if (alpha <= 0) { alpha = 1.0; size = 1.0; }// Закоментувати для одного циклу return true; } } class OwnWindow : Gtk.Window // клас вікна застосунку { public Area da; public OwnWindow() : base("Таймер") { Resize(350, 120); DeleteEvent += delegate { Application.Quit(); }; GLib.Timeout.Add(20, new GLib.TimeoutHandler(OnTimer)); // Кожні 20 мс виклик методу OnTimer. da = new Area(); Add(da); // додавання області малювання } protected override bool OnDeleteEvent(Event e) { Application.Quit(); return true; } bool OnTimer() { if (!da.timer) return false; da.QueueDraw(); return true; } } class Example { static void Main() { Application.Init(); OwnWindow w = new OwnWindow(); w.ShowAll(); Application.Run(); } }