#include #define TITLE "Test" enum Size : unsigned int { WIDTH = 640, HEIGHT = 480 }; class DrawingArea : public Gtk::DrawingArea { public: DrawingArea() { _dimensions.set_x(0); _dimensions.set_y(0); _dimensions.set_width(Size::WIDTH); _dimensions.set_height(Size::HEIGHT); set_size_request(_dimensions.get_width(), _dimensions.get_height()); signal_draw().connect(sigc::mem_fun(*this, &DrawingArea::draw_draw)); } void set_mouse() { get_window()->set_events(Gdk::EventMask::BUTTON1_MOTION_MASK); signal_button_press_event().connect(sigc::mem_fun(*this, &DrawingArea::draw_get_mouse)); } private: bool draw_draw(const Cairo::RefPtr& cr) { cr->set_source_rgb(0.0, 0.0, 0.0); cr->rectangle(_dimensions.get_x(), _dimensions.get_y(), _dimensions.get_width(), _dimensions.get_height()); cr->fill(); return true; } // this doesn't work bool draw_get_mouse(const GdkEventButton *button) { g_print("%0.0f\t%0.0f\n", button->x, button->y); return true; } Gdk::Rectangle _dimensions; }; class Window : public Gtk::Window { public: Window() { set_default_size(Size::WIDTH, Size::HEIGHT); set_title(TITLE); _scrolled_window.set_overlay_scrolling(true); _scrolled_window.set_policy(Gtk::PolicyType::POLICY_AUTOMATIC, Gtk::PolicyType::POLICY_AUTOMATIC); _scrolled_window.add(_drawing_area); add(_scrolled_window); _drawing_area.queue_draw(); } void set_mouse() { _drawing_area.set_mouse(); } private: Gtk::ScrolledWindow _scrolled_window; DrawingArea _drawing_area; }; int main(int argc, char **argv) { Glib::RefPtr app = Gtk::Application::create(); Window win; win.show_all(); win.set_mouse(); return app->run(win); }