using Gtk; using Cairo; using System; class SharpApp : Window { private bool timer = true; private double alpha = 1.0; private double size = 1.0; private DrawingArea darea; public SharpApp() : base("Таймер") { SetDefaultSize(350, 120); SetPosition(WindowPosition.Center); DeleteEvent += delegate {Application.Quit();}; GLib.Timeout.Add(20, new GLib.TimeoutHandler(OnTimer)); // Кожні 20 мс виклик методу OnTimer. darea = new DrawingArea(); darea.ExposeEvent += OnExpose; Add(darea); ShowAll(); } bool OnTimer() { if (!timer) return false; darea.QueueDraw(); // Виклик методу QueueDraw для області малювання, return true; // який запускає ExposeEvent } void OnExpose(object sender, ExposeEventArgs args) { DrawingArea area = (DrawingArea) sender; Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow); 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;}// Закоментувати для одного циклу ((IDisposable) cr.GetTarget()).Dispose(); ((IDisposable) cr).Dispose(); } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }