GTK+ Forums

Discussion forum for GTK+ and Programming. Ask questions, troubleshoot problems, view and post example code, or express your opinions.
It is currently Mon Sep 22, 2014 6:17 pm

All times are UTC




Post new topic Reply to topic  [ 4 posts ] 
Author Message
 Post subject: Reseting drawing_area
PostPosted: Fri May 18, 2007 5:00 pm 
Offline
Familiar Face

Joined: Fri May 18, 2007 4:40 pm
Posts: 8
I´ve been madifyng(sorry about my english) the Scrible example Gtk and I have a question:is there any form to reset(clear) the drawing_area?This is the code that I´ve done(it´s poor):

#include <stdlib.h>
#include <gtk/gtk.h>
/* Backing pixmap for drawing area */
static GdkPixmap *pixmap = NULL;



GtkWidget *drawing_area;
GdkFont *font;

/* Create a new backing pixmap of the appropriate size */
static gint configure_event( GtkWidget *widget,
GdkEventConfigure *event )
{
if (pixmap)
gdk_pixmap_unref(pixmap);

pixmap = gdk_pixmap_new(widget->window,
widget->allocation.width,
widget->allocation.height,
-1);
gdk_draw_rectangle (pixmap,
widget->style->white_gc,
TRUE,
0,0,
widget->allocation.width,
widget->allocation.height);

//pinto escalas
gdk_draw_line(pixmap,drawing_area->style->black_gc,10,190,390,190);
gdk_draw_line(pixmap,drawing_area->style->black_gc,190,10,190,390);

font=gdk_font_load("-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*");

//Se pinta la
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,200,10,"Vdelante");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,200,390,"Vatras");
//Se pinta la
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,10,200,"Wantihorario");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,345,200,"Whorario");
return TRUE;
}
/* Redraw the screen from the backing pixmap */
static gint expose_event( GtkWidget *widget,
GdkEventExpose *event )
{
gdk_draw_pixmap(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);

return FALSE;
}
static void draw_brush( GtkWidget *widget,
gdouble x,
gdouble y)
{
GdkRectangle update_rect;

update_rect.x = x - 1.5;
update_rect.y = y - 1.5;
update_rect.width = 3;
update_rect.height = 3;
gdk_draw_rectangle (pixmap,
widget->style->black_gc,
TRUE,
update_rect.x, update_rect.y,
update_rect.width, update_rect.height);
gtk_widget_draw (widget, &update_rect);

gdk_draw_line(pixmap,drawing_area->style->black_gc,10,190,390,190);
gdk_draw_line(pixmap,drawing_area->style->black_gc,190,10,190,390);

font=gdk_font_load("-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*");

//Se pinta la
gdk_draw_string(pixmap,font,widget->style->black_gc,200,10,"Vdelante");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,200,390,"Vatras");
//Se pinta la
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,10,200,"Wantihorario");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,345,200,"Whorario");
}
static gint button_press_event( GtkWidget *widget,
GdkEventButton *event )
{
if (event->button == 1 && pixmap != NULL)
draw_brush (widget, event->x, event->y);

return TRUE;
}
static gint motion_notify_event( GtkWidget *widget,
GdkEventMotion *event )
{
int x, y;
GdkModifierType state;

if (event->is_hint)
gdk_window_get_pointer (event->window, &x, &y, &state);
else
{
x = event->x;
y = event->y;
state = event->state;
}

if (state & GDK_BUTTON1_MASK && pixmap != NULL)
//draw_brush (widget, x, y);

return TRUE;
}

/**** salgo de la aplicaion***/
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit ();
return(FALSE);
}
void quit ()
{
gtk_exit (0);
}
void limpiardraw ( GtkWidget *widget, GdkEventExpose *event )
{
/******** aqui limpio el drawing_area*****************/
gdk_window_clear(drawing_area->window);
/* if (pixmap)
gdk_pixmap_unref(pixmap);*/

/* pixmap = gdk_pixmap_new(widget->window,
widget->allocation.width,
widget->allocation.height,
-1);*/
/*gdk_draw_rectangle (pixmap,
widget->style->white_gc,
TRUE,
0,0,
widget->allocation.width,
widget->allocation.height);*/

//pinto escalas
gdk_draw_line(pixmap,drawing_area->style->black_gc,10,190,390,190);
gdk_draw_line(pixmap,drawing_area->style->black_gc,190,10,190,390);

font=gdk_font_load("-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*");

//Se pinta la
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,200,10,"Vdelante");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,200,390,"Vatras");
//Se pinta la
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,10,200,"Wantihorario");
gdk_draw_string(pixmap,font,drawing_area->style->black_gc,345,200,"Whorario");
}
int main( int argc,
char *argv[] )
{
GtkWidget *Teleoperacion;
GtkWidget *vbox;
GtkWidget *button;
GtkWidget *limpiar;


/*
GtkWidget *button;
GtkWidget *limpiar;*/

gtk_init (&argc, &argv);

Teleoperacion = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(Teleoperacion,410,410);
gtk_widget_set_name (GTK_WIDGET(Teleoperacion), "Teleoperacion");

vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (Teleoperacion), vbox);
gtk_widget_show (vbox);
/* Crear el drawing area */

drawing_area = gtk_drawing_area_new ();
gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 200, 200);
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);

gtk_widget_show (drawing_area);
/* Señales del pixmap*/

gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
(GtkSignalFunc) expose_event, NULL);
gtk_signal_connect (GTK_OBJECT(drawing_area),"configure_event",
(GtkSignalFunc) configure_event, NULL);
/* Event signals */

gtk_signal_connect (GTK_OBJECT (drawing_area), "motion_notify_event",
(GtkSignalFunc) motion_notify_event, NULL);
gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
(GtkSignalFunc) button_press_event, NULL);

gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
| GDK_LEAVE_NOTIFY_MASK
| GDK_BUTTON_PRESS_MASK
| GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK);


/******* conecto las señales ****************/
gtk_signal_connect (GTK_OBJECT (Teleoperacion), "delete_event",
GTK_SIGNAL_FUNC (delete_event), NULL);

/* .. boton de limpiar */
limpiar=gtk_button_new_with_label ("Limpiar");
gtk_box_pack_start (GTK_BOX (vbox), limpiar, FALSE, FALSE, 0);
// le conecto para destruir la aplicacion
gtk_signal_connect_object (GTK_OBJECT (limpiar), "clicked",
GTK_SIGNAL_FUNC (limpiardraw),
NULL);
/* .. boton de salir */
button = gtk_button_new_with_label ("Quit");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
// le conecto para destruir la aplicacion
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (quit),
GTK_OBJECT (Teleoperacion));
gtk_widget_show (limpiar);
gtk_widget_show (button);


gtk_widget_show (Teleoperacion);

gtk_main ();

return 0;
}


I want to clear the drawing_area but not clear the lines(the scales)
Thanks
javigis

PD: limpiar=clear


Top
 Profile  
 
 Post subject:
PostPosted: Sat May 19, 2007 4:40 pm 
Offline
Familiar Face

Joined: Fri May 18, 2007 4:40 pm
Posts: 8
Please, can respond somebody to me?
I only need to reset the drawing_area, but keeping the line scales.
Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Sat May 19, 2007 8:13 pm 
Offline
Familiar Face

Joined: Tue Feb 13, 2007 3:45 pm
Posts: 30
Location: Madrid, Spain
[Spanish] Crea una segunda drawing_area en blanco, dibuja en ella las líneas de escala, e intercámbiala por la primera. Así limpias la drawing_area sin que haya parpadeo ni se vea el redibujado.

[English] Create a second drawing_area, draw on it the scale lines and swap it with the first one. That way, you can clean the drawing_area with no flicker nor redraw effects.

_________________
David Vilches


Top
 Profile  
 
 Post subject:
PostPosted: Sun May 20, 2007 3:18 pm 
Offline
Familiar Face

Joined: Fri May 18, 2007 4:40 pm
Posts: 8
[Spanish]Gracias por responder paisano.Como intercambio esas drawing_area?Las intercambio en expose_event?
[English]Thanks to respond countryman. How interchange those drawing_area? Them interchange in expose_event?

Gracias de uevo por responder


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 4 posts ] 

All times are UTC


Who is online

Users browsing this forum: Google [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group