Mostrando entradas con la etiqueta gtkmm. Mostrar todas las entradas
Mostrando entradas con la etiqueta gtkmm. Mostrar todas las entradas

martes, 24 de julio de 2012

Primer contacto con Goocanvasmm

      En estos días he estado buscando entre los paquetes de Debian alguno que me sirva para crear objetos visuales e interactivos con Gtkmm sin tener que partirme los huevos con sus maricones canvas intratables. En fin he conseguido uno me que me ha maravillado: Goocanvasmm. Esta biblioteca nos permite crear figuras geométricas e imágenes responsivas a eventos (mouse, teclado, etc) de una forma muy sencilla.

Instalando goocanvasmm

Para instalarlo entra a synaptic (o en el gestor de paquetes de tu distro) y escribes "goocanvasmm". Instala el paquete de desarrollo (-dev) y la documentaci'on (-doc). En Debian se ve así:


Configurando Eclipse para goocanvasmm

Para hacerlo puedes ingresar en esta entrada.



Primer programa

Vamos a hacer un programa simple que muestre un cuadro azul y responda al clickeo con un mensaje en consola.


#include <gtkmm.h>
#include <goocanvasmm.h>
#include <cairomm/cairomm.h>
#include <iostream>

using namespace Goocanvas;
using namespace Glib;
using namespace std;


// ventana principal
class Simple : public Gtk::Window
{
public:
    Simple(){
        // Asigna un tamaño a la plantilla raiz
        lienzoCuadrado.set_size_request(640, 480);

        // Establece la ubicación de la plantilla en la pantalla
        lienzoCuadrado.set_bounds(0, 0, 800, 800);

        // Retorna el item root de la plantilla
        RefPtr<Item> root = lienzoCuadrado.get_root_item();

        // Crea un cuadrado y lo asigna a lienzo, recuerda que
        // el lienzoCuadrado solo es el contenedor
        RefPtr<Rect> cuadrado = Rect::create(100, 100, 450, 450);

        // Agrega el cuadrado a la plantilla
        root->add_child(cuadrado);

        // Asigna el color interno del cuadrado
        cuadrado->property_fill_color().set_value("blue");

        // Asocia la señal de clickeo del cuadrado con el método
        // cuadrado_clicked() del objeto actual
        cuadrado->signal_button_press_event ().connect (sigc::mem_fun (this,
                &Simple::cuadrado_clicked));
        
        // Agrega el lienzo a la ventana actual
        add(lienzoCuadrado);
        show_all_children();
    }
    
    /** Método que se ejecuta cuando se clickea el cuadrado **/ 
    bool cuadrado_clicked(const RefPtr<Item>&, GdkEventButton*){
        cout << "Has clickeado el cuadrado" << endl ;    
        return true ;
    }    
protected:
    // Lienzo contenedor del cuadrado
    Canvas lienzoCuadrado;
};


int main(int argc, char* argv[]){
  Gtk::Main app(&argc, &argv) ;
  
  // Inicializa goocanvas. Es necesario en todo programa que use esta biblioteca 
  Goocanvas::init("Ejemplo simple goocanvasmm", "1.0", argc, argv) ;
  
  Simple ventana ;
  
  Gtk::Main::run(ventana) ;
}

El resultado es este:




Puedes descargar el fichero del ejemplo desde aquí. En el directorio en el cual se instaló la documentación de goocanvasmm (en mi caso "/usr/share/doc/goocanvasmm/examples") encontraras varios ejemplos. También los puedes descargar de aquí. Otros Links útiles: // Referencia de la biblioteca http://developer.gnome.org/goocanvasmm/1.90/

Configurando Eclipse para Goocanvasmm

Para hacerlo se hacen los mismos pasos que cuando configuramos gtkmm. Solo que en vez de seleccionar, en la lista del pkg-config, la biblioteca gtkmm-2.4 seleccionamos Goocanvasmm.


En caso de que la biblioteca goocanvasmm no aparezca en la lista hay una forma de forzarlo:

Editando uno de los ficheros de metadatos que si aparezcan en el listado y agregarle los metadatos de goocanvasmm.

Según el manual de pkg-config:
"pkg-config retrieves information about packages from  special  metadata files.  These  files  are named after the package, and has a .pc extension."
Estos ficheros .pc se ubican en "/usr/lib/pkgconfig".

Abre goocanvasmm-1.0.pc en modo super usuario.
       sudo gedit /usr/lib/pkgconfig/goocanvasmm-1.0.pc

Luego escoge el fichero relacionado con alguna biblioteca que sí se liste en eclipse.
Yo en mi caso edité el de gtkmm-2.4 y su fichero se llama ¨gtkmm-2.4.pc¨.
      sudo gedit /usr/lib/pkgconfig/gtkmm-2.4.pc

Debes añadir las Libs y las Cflags del fichero de goocanvasmm al de gtkmm.
En mi caso el fichero gtkmm-2.4.pc quedó así:


prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
datarootdir=${prefix}/share
datadir=${datarootdir}
includedir=${prefix}/include

docdir=${datarootdir}/doc/gtkmm-2.4
doxytagfile=${docdir}/reference/gtkmm-2.4.tag
htmlrefdir=${docdir}/reference/html
htmlrefpub=http://library.gnome.org/devel/gtkmm/unstable/

Name: gtkmm
Description: C++ binding for the GTK+ toolkit
Version: 2.20.3
URL: http://www.gtkmm.org/
Requires: goocanvas giomm-2.4 >= 2.24 pangomm-1.4 >= 2.26 gtk+-2.0 >= 2.20.0 gtk+-unix-print-2.0 atkmm-1.6 gdkmm-2.4
Libs: -L${libdir} -lgtkmm-2.4 -lgoocanvasmm-0.1
Cflags: -I${includedir}/gtkmm-2.4 -I${libdir}/gtkmm-2.4/include -I${includedir}/goocanvasmm-0.1 -I${libdir}/goocanvasmm-0.1/include


Las letras rojas indican las Libs y Cflags agregadas. Puedes descargar el fichero de aquí.

Luego de hacer esto se guardan los cambios, realizas los pasos de configuración de gtkmm y ya puedes compilar tus programas hechos en eclipse utilizando goocanvasmm.


lunes, 16 de julio de 2012

Gtkmm y Eclipse CDT en linux

Aquí mostraré los pasos con los que logré configurar eclipse para poder programar con gtkmm en GNU/Linux = > los windowseros que se jodan ;·)

Antes que nada necesita tener instalado gtkmm y pkg-config. Para ello ve a Synaptic y busca los siguientes paquetes:
  • "libgtkmm-{version}-dev". En mi caso la versión es "2.4"  es decir: "libgtkmm-2.4-dev". Si aparece la versión 3.x el proceso es el mismo. 

  •   pkg-config