From: Ricardo Markiewicz Date: Sun, 23 Nov 2003 22:09:44 +0000 (+0000) Subject: Se agrega como crear un cuadradito de color para indicar donde esta la entrada y... X-Git-Tag: svn_import~193 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/ed55685399f3dd28a22f229c9f384facbed4d48d?ds=sidebyside Se agrega como crear un cuadradito de color para indicar donde esta la entrada y donde esta la salida para los conectores logico. Solo se implemento en Pump y no tiene en cuenta el tema de la rotacion. Lo que habria que hacer es : * Terminar bien el pump y elegir una posicion linda para ponerlos * Hacer que solo aparezcan cuando el checkbox esta activo * Creo que seria mas lindo dibujar un circulo que un cuadrado (aunque la deteccion si se haga con un cuadrado que es mas facil) * Hacerle lo mismo al resto de los items --- diff --git a/Constructor/include/item.h b/Constructor/include/item.h index 8ffd14e..9a9ecfc 100644 --- a/Constructor/include/item.h +++ b/Constructor/include/item.h @@ -54,6 +54,9 @@ public: ///Destructor virtual ~CItem(); + + virtual void on_realize(); + ///Dibuja el item cada vez que este evento es llamado por la ventana que lo contiene. virtual bool on_expose_event(GdkEventExpose* event); @@ -163,6 +166,8 @@ protected: ///Numero "unico" que identifica al item. int ID; + Glib::RefPtr gc; + ///Nombre del item Glib::ustring name; @@ -183,7 +188,9 @@ protected: ///Puntero a la ventana de propiedades del item ItemPtyWnd *property_wnd; - + + Gdk::Color blue, red; + ///Posicion del item en el area de trabajo int x, y; }; diff --git a/Constructor/include/pump.h b/Constructor/include/pump.h index dfe3452..f4edf28 100644 --- a/Constructor/include/pump.h +++ b/Constructor/include/pump.h @@ -13,6 +13,7 @@ class Pump : public CItem { ///Destructor virtual ~Pump(); ///Funciones redefinidas de CItem + virtual bool on_expose_event(GdkEventExpose* event); virtual bool on_button_press_event(GdkEventButton *event); virtual void on_menu_popup_rotar(); virtual void on_menu_popup_propiedades(); diff --git a/Constructor/src/item.cpp b/Constructor/src/item.cpp index b4bf541..aa15a33 100644 --- a/Constructor/src/item.cpp +++ b/Constructor/src/item.cpp @@ -4,10 +4,12 @@ bool CItem::logic_connect = false; int CItem::gate_id = -1; -CItem::CItem(const char *filename):Gtk::DrawingArea() +CItem::CItem(const char *filename) { image = Gdk::Pixbuf::create_from_file(filename); set_size_request(image->get_width(), image->get_height()); + + add_events(Gdk::EXPOSURE_MASK); } CItem::CItem() @@ -36,9 +38,24 @@ CItem::~CItem() std::cout << "Item Die" << std::endl; } +void CItem::on_realize() +{ + Gtk::DrawingArea::on_realize(); + Glib::RefPtr window = get_window(); + gc = Gdk::GC::create(window); + + Glib::RefPtr colormap = get_colormap(); + + red = Gdk::Color("red"); + blue = Gdk::Color("blue"); + + colormap->alloc_color(red); + colormap->alloc_color(blue); +} + bool CItem::on_expose_event(GdkEventExpose* event) { - image->render_to_drawable ( get_window(), get_style()->get_black_gc(), 0, 0, 0, 0, image->get_width() ,image->get_height() , + get_window()->draw_pixbuf(gc, image, 0, 0, 0, 0, image->get_width() ,image->get_height(), Gdk::RGB_DITHER_NONE, 0, 0); // XXX Esto no deberia ser necesario! en todo caso devolves false en diff --git a/Constructor/src/pump.cpp b/Constructor/src/pump.cpp index 8fd4e05..9663b0b 100644 --- a/Constructor/src/pump.cpp +++ b/Constructor/src/pump.cpp @@ -32,6 +32,7 @@ Pump::Pump(int orientacion) connect_vec.push_back(temp); } + Pump::~Pump() { } @@ -246,3 +247,17 @@ void Pump::update_logic_position() out_y = y + 32; } } + +bool Pump::on_expose_event(GdkEventExpose* event) +{ + CItem::on_expose_event(event); + Glib::RefPtr window = get_window(); + + gc->set_foreground(red); + gc->set_background(red); + window->draw_rectangle(gc, 1, image->get_width()-32, 0, 32, 16); + gc->set_foreground(blue); + gc->set_background(blue); + window->draw_rectangle(gc, 1, image->get_width()-32, 16, 32, 16); + return true; +}