Re: signal_button_press_event() not sending signal?
- From: Matthew Ryan Hurne <matthew hurne gmail com>
- To: gtkmm-list gnome org
- Subject: Re: signal_button_press_event() not sending signal?
- Date: Sun, 19 Dec 2004 21:49:21 -0500
On Mon, 2004-12-20 at 02:49 +0100, Antonio Coralles wrote:
> Matthew Ryan Hurne wrote:
>
> > On Sun, 2004-12-19 at 22:59 +0100, Antonio Coralles wrote:
> >> Matthew Ryan Hurne wrote:
> >>
> >> > First of all, let me hint that I am very new to Gtkmm programming, and
> >> > relatively new to C++ programming in general.
> >> >
> >> > I am trying to write a simple program that draws a bezier curve in a
> >> > DrawingArea which can be manipulated by clicking and dragging its
> >> > control points.
> >> >
> >> > Right now the program draws a curve, but I have not yet successfully
> >> > implemented anything to manipulate it. That's what I'm working on.
> >> >
> >> > I figured I'd start by figuring out how to detect a button click on the
> >> > DrawingArea. I know I'll need to get the coordinates of the mouse
> >> > pointer as well. From reading the tutorial, etc. it seemed that
> >> > Widget::signal_button_press_event() is the appropriate method to
> > use. I
> >> > have connected it to a signal handler in my MainWindow class.
> >> > Everything compiles fine but the code in my signal handler doesn't seem
> >> > to execute.
> >> >
> >> > Here's what code it seems you'd need.
> >> > In MainWindow's constructor (curveArea is my DrawingArea):
> >> >
> >> > curveArea.signal_button_press_event().connect(sigc::mem_fun(*this,
> >> > &MainWindow::on_curve_button_press_event));
> >> >
> >> > A protected member of MainWindow:
> >> >
> >> > bool MainWindow::on_curve_button_press_event(GdkEventButton* event)
> >> > {
> >> > std::cout << "The drawing area was clicked" << std::endl;
> >> >
> >> > return true;
> >> > }
> >> >
> >> > I searched the web for a while trying to find any hints, and was only
> >> > able to find something on a mailing list from 2002 that said it was a
> >> > bug. Seems like that wouldn't be relevant anymore. Any help would be
> >> > greatly appreciated. If you want all my source code, I can attach
> > it in
> >> > a future e-mail. I wasn't sure if that was proper mailing list
> >> > etiquette so I figured I'd leave it out in this message. Oh and one
> >> > more thing...I'm having a lot of fun learning all this stuff. :-)
> >> >
> >> > Matthew Hurne
> >> >
> >> > _______________________________________________
> >> > gtkmm-list mailing list
> >> > gtkmm-list gnome org <mailto:> <mailto:>
> >> > http://mail.gnome.org/mailman/listinfo/gtkmm-list
> >>
> >> I would suggest you to read
> >> http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/ch14.html. To
> >> detect mouse clicks i would override bool
> >> Gtk::Widget::on_button_press_event(GdkEventButton* event) ... For
> >> further documentation for the various GdkEvent structs you may look at
> >> http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html.
> >>
> >> antonio
> >> _______________________________________________
> >> gtkmm-list mailing list
> >> gtkmm-list gnome org <mailto:>
> >> http://mail.gnome.org/mailman/listinfo/gtkmm-list
> >
> > Thanks for the tip on reading chapter 14, though I've already done that.
> > I have been able to draw the curve, control points, and lines connected
> > the control points just fine. I haven't coded the interaction between
> > the mouse and the curve, that's where I'm at now.
> >
> > Thanks a TON for the link to the GDK event structures. Though right now
> > I can't use it because it seems the mouse clicks aren't even being
> > "detected", it will definitely be important when it comes to checking
> > the mouse position and whether a control point has been clicked.
> >
> > I did what you suggested, or at least what I think you suggested, with
> > no results. I have inherited my own class, called CurveArea, from
> > DrawingArea. I overloaded its on_button_press_event(GdkEventButton
> > *event) member with the following:
> >
> > bool CurveArea::on_button_press_event(GdkEventButton* event)
> > {
> > if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
> > std::cout << "The drawing area was clicked"
> > << std::endl;
> > }
> >
> > return true;
> > }
> >
> > Here is the relevant line in CurveArea's constructor:
> >
> > this->signal_button_press_event().connect(sigc::mem_fun(*this,
> > &CurveArea::on_button_press_event));
> >
> > I'm guessing I don't need the this->, but I figured being explicit
> > couldn't hurt.
> >
> Yes, you don't need it ....
>
> > When clicking on the CurveArea, nothing is printed to the console.
> > Help! Ahh!
>
> Maybe you've put your drawing area into a widget which doesn't receive X
> events
> [ http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/ch12.html ]. A
> Gtk::EventBox might help ...
> By the way: are you working in windows or linux ?
I have my CurveArea inside a VBox (the top of the VBox contains a
MenuBar). So then, if I put a widget that does receive X events inside
one that doesn't, then it no longer will either? Is there some kind of
layer logic going on? I'm going to try an EventBox...
I am using Linux, by the way. Sorry I never put any of the important
info in my first e-mail, i.e. using gtkmm-2.4, etc.
>
> >
> > Oh, by the way, why does on_button_press_event have to return a bool?
>
> To be honest, i'm not sure about this myself; as far as I know,
> returning true indicates that the event has been handled ....
>
> antonio
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]