Aw: Motion events in a DrawingArea

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Aw: Motion events in a DrawingArea

max.augsburg
Dear Dan,
 
I think the simplest solution would be to use my GooCanvas2 module (see https://metacpan.org/pod/GooCanvas2 ). The module works exactly as the C Api (it's a pure Glib::IO binding). Therefore https://developer.gnome.org/goocanvas/unstable/ is a good starting point... Especially the GooCanvas2::CanvasItem has an item press event and such things: https://developer.gnome.org/goocanvas2/stable/GooCanvasItem.html#GooCanvasItem-button-press-event
 
Perhaps this is helpful...
 
The Gtk3 canvas element (from which I think DrawingArea inherits its painting capabilities) is hard to handle for event purposes...
 
Best wishes,
Max
 
 
Gesendet: Mittwoch, 16. August 2017 um 14:12 Uhr
Von: "Daniel Kasak" <[hidden email]>
An: "gtk-perl mailing list" <[hidden email]>
Betreff: Motion events in a DrawingArea
Hi all.

I'm trying to capture mouse events in a DrawingArea ( in Gtk3 ). I'm
adapting code at http://www.perlmonks.org/?node_id=583578 ... but when
I go:

$self->{drawing_area}->set_events(
[ qw/ exposure-mask
leave-notify-mask
button-press-mask
pointer-motion-mask
pointer-motion-hint-mask
/
]
);

... I get a warning:

Gtk-CRITICAL **: gtk_widget_set_events: assertion
'!_gtk_widget_get_realized (widget)' failed

I've tried putting this later on in the code when I guess the widget
*should* be realized, eg at the end of the render_graph() method which
I hook up thus:

$self->{drawing_area}->signal_connect( draw => sub {
$self->render_graph( @_ ) } );

... but it still gives the same error.

Next I try to connect to a signal handler anyway:

$self->{drawing_area}->signal_connect(
'motion_notify_event'
, sub { $self->handle_graph_mouse_move( @_ ) }
);

... but this handler never gets called.

I guess things have changed in Gtk3? I haven't been able to find an
updated demo, even in C. Any hints as to what I'm missing?

Dan
_______________________________________________
gtk-perl-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-perl-list
 
 

_______________________________________________
gtk-perl-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-perl-list
Reply | Threaded
Open this post in threaded view
|

Re: Motion events in a DrawingArea

Daniel Kasak-4
Thanks for the response Max. I'm already quite invested in the Cairo
path - this is an existing project that I'm enhancing. I'm getting
close to another release of it. Preview:
http://tesla.duckdns.org/images/powercom.jpg

It's a visualisation app for energy stats that lets you plug in data
sets to add new graph series. In my case ( ie screenshot ), I'm
graphing energy production ( solar panels ) in blue, energy sold to
the grid in green, general energy use in red, and controlled load (
hot water circuit ) in black. I'll check out GooCanvas for future
projects, but now I'm just trying to hack in some crosshairs that
follow the mouse and give an exact display of the co-ordinates ...
preferably without a major rewrite.



On Thu, Aug 17, 2017 at 2:36 AM,  <[hidden email]> wrote:

> Dear Dan,
>
> I think the simplest solution would be to use my GooCanvas2 module (see
> https://metacpan.org/pod/GooCanvas2 ). The module works exactly as the C Api
> (it's a pure Glib::IO binding). Therefore
> https://developer.gnome.org/goocanvas/unstable/ is a good starting point...
> Especially the GooCanvas2::CanvasItem has an item press event and such
> things:
> https://developer.gnome.org/goocanvas2/stable/GooCanvasItem.html#GooCanvasItem-button-press-event
>
> Perhaps this is helpful...
>
> The Gtk3 canvas element (from which I think DrawingArea inherits its
> painting capabilities) is hard to handle for event purposes...
>
> Best wishes,
> Max
>
>
> Gesendet: Mittwoch, 16. August 2017 um 14:12 Uhr
> Von: "Daniel Kasak" <[hidden email]>
> An: "gtk-perl mailing list" <[hidden email]>
> Betreff: Motion events in a DrawingArea
> Hi all.
>
> I'm trying to capture mouse events in a DrawingArea ( in Gtk3 ). I'm
> adapting code at http://www.perlmonks.org/?node_id=583578 ... but when
> I go:
>
> $self->{drawing_area}->set_events(
> [ qw/ exposure-mask
> leave-notify-mask
> button-press-mask
> pointer-motion-mask
> pointer-motion-hint-mask
> /
> ]
> );
>
> ... I get a warning:
>
> Gtk-CRITICAL **: gtk_widget_set_events: assertion
> '!_gtk_widget_get_realized (widget)' failed
>
> I've tried putting this later on in the code when I guess the widget
> *should* be realized, eg at the end of the render_graph() method which
> I hook up thus:
>
> $self->{drawing_area}->signal_connect( draw => sub {
> $self->render_graph( @_ ) } );
>
> ... but it still gives the same error.
>
> Next I try to connect to a signal handler anyway:
>
> $self->{drawing_area}->signal_connect(
> 'motion_notify_event'
> , sub { $self->handle_graph_mouse_move( @_ ) }
> );
>
> ... but this handler never gets called.
>
> I guess things have changed in Gtk3? I haven't been able to find an
> updated demo, even in C. Any hints as to what I'm missing?
>
> Dan
> _______________________________________________
> gtk-perl-list mailing list
> [hidden email]
> https://mail.gnome.org/mailman/listinfo/gtk-perl-list
>
>
_______________________________________________
gtk-perl-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-perl-list