#include "zoneDessin.h"

zoneDessin::zoneDessin() : Gtk::DrawingArea(), pixmap (0) {
  set_events (GDK_EXPOSURE_MASK);
}

zoneDessin::~zoneDessin() {}

int zoneDessin::configure_event_impl (GdkEventConfigure * /* event */) {
  win = get_window();
  if (pixmap)
    pixmap.release();
  Gdk_GC gc = get_style()->get_white_gc();
  pixmap.create(win,  width(), height());
  pixmap.draw_rectangle (gc, true, 0, 0, width(), height());
  return true;
}

int zoneDessin::expose_event_impl (GdkEventExpose *event) {
  Gdk_GC gc = get_style()->get_fg_gc(get_state());
  win.draw_pixmap(gc ,
		  pixmap,
		  event->area.x, event->area.y,
		  event->area.x, event->area.y,
		  event->area.width, event->area.height);
  return false;
}

void zoneDessin::erase() {
  Gdk_GC gc = get_style()->get_white_gc();
  pixmap.draw_rectangle (gc, true, 0, 0, width(), height());
  Gtk::DrawingArea::draw(0);
}

void zoneDessin::alloc_gc() {
  if (!gc) {
    gc = Gdk_GC(pixmap);
    Gdk_Color red("red");
    get_colormap().alloc(red);
    gc.set_foreground(red);
  }
}

void zoneDessin::draw_ligne (gdouble x0, gdouble y0, gdouble x1, gdouble y1) {
  GdkRectangle ligne =  { (int)x0, (int)y0, (int)x1, (int)y1 };
  //  cout<<"("<<ligne.x<<","<<ligne.y<<","<<ligne.width<<","<<ligne.height<<") a ete dessine"<<endl;
  alloc_gc();
  pixmap.draw_line(
			gc,
			ligne.x, ligne.y,
			ligne.width, ligne.height);
  Gtk::DrawingArea::draw(&ligne);
}





