Hello Frederico,
What you are doing is basically hit detection. What I wonder is why you are
doing it the hard way. Why don't you use one of the canvas widgets, e.g.
goocanvas? It allows you to tie events to specific geometric objects.
If you want to do it on your own I first of all suggest that you use cairo,
using gdk_draw_* is considered obsolete. Second you can use the idea of
keeping a second non-visible image as a label image. I've described this
multiple times on the net:
- http://www.mail-archive.com/gtk-perl-l...@gnome.org/msg01428.html
- http://www.mail-archive.com/gtk-l...@gnome.org/msg27934.html
Regarding your approach you can still salvage it by instead of checking for
if((GPOINTER_TO_INT(desenho-parray-pdata[x1]) == x)
(GPOINTER_TO_INT(desenho-parray-pdata[x1+1]) == y))
you check for
int xp = GPOINTER_TO_INT(desenho-parray-pdata[x1]);
int yp = GPOINTER_TO_INT(desenho-parray-pdata[x1+1]);
int posH = GPOINTER_TO_INT(desenho-parray-pdata[x1+2]);
int posV = GPOINTER_TO_INT(desenho-parray-pdata[x1+3]);
if (abs(xp-x)posH abs(yp-y)posV) ...
Regards,
Dov
2009/4/17 frederico schardong frede@gmail.com
Hi,
I have a drawing area, and a window with 2 gtk_range, and them
variable form 1 to 10, and this values go to posH and posV. I'm doing
this to can draw a rectangular with my specification.. max width: 10,
min: 1, max henght:10, min: 1.
This event is called when drawing area is clicked:
static gboolean button_pressed (GtkWidget *a, GdkEventButton *event)
{
gint x = event-x, y = event-y, x1, y1;
for(x1 = (0-posH); x1 posH; x1++)
{
for(y1 = (0-posV); y1 posV; y1++)
{
gdk_draw_point(desenho-drawingArea-window,
desenho-drawingArea-style-fg_gc[GTK_WIDGET_STATE(desenho-drawingArea)],
x+x1, y+y1);
}
}
g_print(\ndrawing x: %d y: %d tamH: %d tamV: %d, x, y, posH,
posV);
g_ptr_array_add(desenho-parray, GINT_TO_POINTER(x));
g_ptr_array_add(desenho-parray, GINT_TO_POINTER(y));
g_ptr_array_add(desenho-parray, GINT_TO_POINTER(posH));
g_ptr_array_add(desenho-parray, GINT_TO_POINTER(posV));
}
But now I must do a eraser function... I do a simple for:
gint x1, x = event-x, y = event-y;
for (x1 = 0; x1 desenho-parray-len; x1 = x1 + 4)
{
if((GPOINTER_TO_INT(desenho-parray-pdata[x1]) == x)
(GPOINTER_TO_INT(desenho-parray-pdata[x1+1]) == y))
{ g_print(\nta no lugar certo mano!);
g_ptr_array_remove_index(desenho-parray, x1);
g_ptr_array_remove_index(desenho-parray, x1);
g_ptr_array_remove_index(desenho-parray, x1);
g_ptr_array_remove_index(desenho-parray, x1);
}
it's work, but not fine... it's only work when i click exactly where
I clicked before to draw this point... but I need to delete from
GPtrArray when I click on somewhere of this rectangle area... not only
center... Can help me list?
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list