viernes, 16 de noviembre de 2012

Imagenes con goocanvasmm

Este es un mini tutorial de imagenes con goocanvasmm

  1.  
  2. #include <gtkmm.h>
  3. #include <goocanvasmm.h>
  4. #include <cairomm/cairomm.h>
  5. #include <iostream>
  6. #include <gdkmm-2.4/gdkmm.h>
  7.  
  8. using namespace Goocanvas;
  9. using namespace Glib;
  10. using namespace std;
  11. using Gdk::InterpType;
  12.  
  13. // Clase imagen personalizada
  14. class Imagen: public Goocanvas::Image{
  15. protected:
  16.    
  17.     Imagen(const Glib::RefPtr<Gdk::Pixbuf>& pixbuf, double x = 0.0, double y = 0.0):
  18.         Goocanvas::Image(pixbuf,x,y){   }  
  19. public:
  20.  
  21.     static Glib::RefPtr<Imagen> create(double x = 0, double y = 0, double width = 0, double height = 0){
  22.         // Crea un buffer de pixeles a partir del fichero de la imagen
  23.         Glib::RefPtr<Gdk::Pixbuf> pb= Gdk::Pixbuf::create_from_file("toroid.png",width,height,true) ;
  24.        
  25.         // Crea una imagen a partir del pixbuf
  26.         Imagen *imagen=new Imagen(pb,x,y);
  27.        
  28.         // Asigna la posición de la imagen
  29.         imagen->set_bounds(Bounds(x,y,x+width,y+height));
  30.        
  31.         // Retorna la imagen creada
  32.         return Glib::RefPtr<Imagen>(imagen);
  33.     }
  34. };
  35.  
  36. // ventana principal
  37. class Simple : public Gtk::Window
  38. {
  39. public:
  40.     Simple(){
  41.         // Asigna un tamaño a la plantilla raiz
  42.         lienzoImagen.set_size_request(800, 800);
  43.  
  44.         // Establece la ubicación de la plantilla en la pantalla
  45.         lienzoImagen.set_bounds(0, 0, 800, 800);       
  46.  
  47.         // Crea un imagen y lo asigna a lienzo, recuerda que
  48.         // el lienzoImagen solo es el contenedor
  49.         imagen = Imagen::create(100, 100, 450, 450);
  50.  
  51.         // Asigna el color interno del imagen
  52.         imagen->property_fill_color().set_value("blue");
  53.  
  54.         // Asocia la señal de clickeo del imagen con el método
  55.         // imagen_clicked() del objeto actual
  56.         imagen->signal_button_press_event ().connect (sigc::mem_fun (this,
  57.                 &Simple::imagen_clicked));     
  58.  
  59.         // Retorna el item root de la plantilla
  60.         RefPtr<Item> root = lienzoImagen.get_root_item();
  61.  
  62.         // Agrega el imagen a la plantilla
  63.         root->add_child(imagen);
  64.  
  65.         // Agrega el lienzo a la ventana actual
  66.         add(lienzoImagen);
  67.  
  68.         show_all_children();
  69.     }
  70.  
  71.     /** Método que se ejecuta cuando se clickea el imagen **/
  72.     bool imagen_clicked(const RefPtr<Item>&, GdkEventButton*){
  73.         cout << "Has clickeado el imagen" << endl ;
  74.         return true ;
  75.     }
  76.  
  77.     Glib::RefPtr<Imagen> m_item;
  78.  
  79. protected:
  80.     // Lienzo contenedor del imagen
  81.     Canvas lienzoImagen;
  82.    
  83.     // Imagen a mostrar
  84.     RefPtr<Imagen> imagen;
  85. };
  86.  
  87.  
  88.  
  89. int main(int argc, char* argv[]){
  90.     Gtk::Main app(&argc, &argv) ;
  91.  
  92.     // Inicializa goocanvas. Es necesario en todo programa que use esta biblioteca
  93.     Goocanvas::init("Ejemplo simple goocanvasmm", "1.0", argc, argv) ;
  94.  
  95.     Simple ventana ;
  96.  
  97.     Gtk::Main::run(ventana) ;
  98. }
  99.