Re: how to draw something on GtkDrawingArea when I click a button?



On Fri, Mar 19, 2010 at 2:46 PM, Claudio Saavedra <csaavedra gnome org>wrote:

El vie, 19-03-2010 a las 13:34 +0800, Tolic Ma escribió:
Hi,everyone!

I want to draw something on GtkDrawingArea when I click a GtkButton,but I
don't know how to do this...

this is my code(it doesn't work...):

*void click_button(void){



gdk_draw_line(drawing_area,drawing_area->style->white_gc,x,y,width+x,height+y);

}

You shouldn't draw directly in your callback for the button. Instead,
you should call gtk_widget_queue_draw() to tell GTK+ to schedule a paint
of the widget.

How will the widget be painted? GTK+ will tell your code that the widget
needs to be painted by emitting the GtkWidget::expose-event signal.
Then, you should connect to that signal and paint in your callback.

Last but no least, don't forget to paint to the GdkWindow of the drawing
area, since that's the drawable.

More or less (untested code, just for clarity):

*void
click_button(GtkButton *button, gpointer data)
{
  button_clicked = TRUE;
  gtk_widget_queue_draw (drawing_area);
  ...
}

gboolean
expose_drawing_area (GtkWidget *area,
                    GdkExposureEvent *event,
                    gpointer data)
{
  ...
  if (button_clicked) {
     gdk_draw_line(drawing_area->window,
                    drawing_area->style->white_gc,x,y,width+x,height+y);
  }
  ...
}

int main(int argc,char *argv[]){
  ...
  g_signal_connect(button,"clicked",G_CALLBACK(click_button),NULL);

g_signal_connect(drawing_area,"expose-event",G_CALLBACK(expose_drawing_area),NULL);
  ...
}


Claudio

--
Claudio Saavedra <csaavedra gnome org>

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list




Thank you!

I solved my problem by following your instruction.

Thank you very much!!!



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]