Compilar un programa escrito en C# con Mono, GTK#, Cairo

Les cuento que Mono incorpora Cairo, que es una librería originalmente escrita en C, para el renderizado de dibujos en 2D (2 dimensiones). Que funciona con o sin aceleración gráfica para tarjetas de video. Se dice que simple de utilizar y se incorpora perfectamente con GTK, las librerías que utiliza Gnome uno de los escritorios mas utilizados en Linux.

Ahora les presento un código que hice yo, para que vean como es, espero que les guste.

    // Compilar: gmcs Clip2.cs -pkg:gtk-sharp-2.0 -r:Mono.Cairo

    using System;
    using Cairo;
    using Gtk;
    using System.Timers;

    public class GtkCairo
    {
     static void Main ()
     {
     Application.Init ();
     Gtk.Window w = new Gtk.Window ("Clip2");

     DrawingArea a = new CairoGraphic ();
     Box box = new VBox (true, 0);
     box.Add (a);

     w.Add (box);
     w.Resize (256, 256);

     w.DeleteEvent += close_window;
     w.ShowAll ();

     Application.Run ();
     }

     static void close_window (object obj, DeleteEventArgs args)
     {
     Application.Quit ();
     }

    }

    public class CairoGraphic : DrawingArea
    {
     private static double grosorLinea;
     private static double transparencia;
     private static bool contraerLinea;
     private static bool expanderLinea;
     private static bool transparenciaPos;
     private static bool transparenciaNeg;

     public CairoGraphic ()
     {
     transparenciaPos = expanderLinea = true;
     transparenciaNeg = contraerLinea = false;
     GLib.Timeout.Add (100, new GLib.TimeoutHandler (Siempre));
     grosorLinea = 20.0;
     transparencia = 0.20;
     }

     private bool Siempre ()
     {
     QueueDraw ();
     return true;
     }

     protected override bool OnExposeEvent (Gdk.EventExpose args)
     {
     //
     // Expander y contraer lineas
     //
     if (expanderLinea == true) {
     grosorLinea += 0.5;
     if (grosorLinea > 24.0) {
     expanderLinea = false;
     contraerLinea = true;
     }
     }
     else if (contraerLinea == true) {
     grosorLinea -= 0.5;
     if (grosorLinea < 21.0) {
     contraerLinea = false;
     expanderLinea = true;
     }
     }
     //
     // Aumentar y Reducir transparencia
     //
     if (transparenciaPos == true) {
     transparencia += 0.01;
     if (transparencia > 0.99) {
     transparenciaPos = false;
     transparenciaNeg = true;
     }
     }
     else if (transparenciaNeg == true) {
     transparencia -= 0.01;
     if (transparencia < 0.50) {
     transparenciaNeg = false;
     transparenciaPos = true;
     }
     }

     double PI = System.Math.PI;

     using (Context g = Gdk.CairoHelper.Create (args.Window)){
     g.Arc (128.0, 128.0, 76.8, 0, 2*PI);
     g.Clip ();
     g.NewPath ();
     g.Rectangle (0,0,256,256);
     g.Fill (); // Transfiere el Color que pasa por la mascara

     //
     // Dibuja la X
     //
     g.SetSourceRGBA (0,1,0,transparencia); // Color Verde
     g.MoveTo (0,0);
     g.LineTo (256,256);
     g.MoveTo (256,0);
     g.LineTo (0,256);

     g.LineWidth = grosorLinea;
     g.Stroke (); // Transfiere la X

     }

     return true;
     }
    }

Se compila así:

gmcs Clip2.cs -pkg:gtk-sharp-2.0 -r:Mono.Cairo

Hasta hice un video, de el programa: http://www.youtube.com/watch?v=Hr-fqaMwvLM y también lo publique en los Foro de Programación X, y ahí esta el código fuente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s