Corrigé du TP 3 : Premiers pas avec une interface graphique

Classe ZoneDessin

Fichier ZoneDessin.h

#include <gtkmm/drawingarea.h>
 
class ZoneDessin : public Gtk::DrawingArea
{
public :
    void nouvelleLigne();
private :
    bool on_expose_event(GdkEventExpose* event);
};

Fichier ZoneDessin.cpp

#include "ZoneDessin.h"
 
#include <gtkmm/drawingarea.h>
 
#include <iostream>
 
bool
ZoneDessin::on_expose_event(GdkEventExpose* event)
{
    Glib::RefPtr<Gdk::GC> gc = Gdk::GC::create(get_window());
 
    Gdk::Color bleu("blue");
    get_default_colormap()->alloc_color( bleu );
    Gdk::Color rouge("red");
    get_default_colormap()->alloc_color( rouge );
 
    gc->set_foreground(bleu);
    get_window()->set_background(rouge);
 
    get_window()->clear();
 
    get_window()->clear();
    get_window()->draw_line(gc, 1, 1, 100, 100);
    get_window()->draw_layout(gc, 40, 40, create_pango_layout("Bonjour"));
 
    return true;
}
 
void
ZoneDessin::nouvelleLigne()
{
    // Le GC, qui permet de dessiner
    Glib::RefPtr<Gdk::GC> gc = Gdk::GC::create(get_window());
    // Taille de la zone de dessin
    int longueur, largeur;
    get_window()->get_size(longueur, largeur);
    // Ligne aléatoire
    int x1 = rand()%longueur;
    int y1 = rand()%largeur;
    int x2 = rand()%longueur;
    int y2 = rand()%largeur;
    get_window()->draw_line(gc, x1, y1, x2, y2);
}

Classe MaFenetre

Fichier MaFenetre.h

#ifndef MaFenetre_h
#define MaFenetre_h
 
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/window.h>
 
#include "ZoneDessin.h"
 
class MaFenetre : public Gtk::Window
{
public :
    MaFenetre();
private :
    Gtk::VBox boite;
    ZoneDessin zoneDessin;
    Gtk::Button bouton;
};
 
#endif // MaFenetre_h

Fichier MaFenetre.cpp

#include "MaFenetre.h"
 
MaFenetre::MaFenetre()
: boite(), zoneDessin(), bouton("Ligne")
{
    zoneDessin.set_size_request(200,200);
 
    bouton.signal_clicked().connect(sigc::mem_fun(zoneDessin, &ZoneDessin::nouvelleLigne) );
 
    add(boite);
    boite.pack_start(zoneDessin);
    boite.pack_start(bouton, Gtk::PACK_SHRINK);
 
    show_all();
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>