Advertisement
Guest User

main2.cpp

a guest
Feb 28th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include <gtkmm.h>
  2. #define TITLE "Test"
  3.  
  4. enum Size : unsigned int { WIDTH = 640, HEIGHT = 480 };
  5.  
  6. class DrawingArea : public Gtk::DrawingArea
  7. {
  8.     public:
  9.         DrawingArea()
  10.         {
  11.             _dimensions.set_x(0);
  12.             _dimensions.set_y(0);
  13.             _dimensions.set_width(Size::WIDTH);
  14.             _dimensions.set_height(Size::HEIGHT);
  15.             set_size_request(_dimensions.get_width(), _dimensions.get_height());
  16.             signal_draw().connect(sigc::mem_fun(*this, &DrawingArea::draw_draw));
  17.         }
  18.  
  19.         void set_mouse()
  20.         {
  21.             get_window()->set_events(Gdk::EventMask::BUTTON1_MOTION_MASK);
  22.             signal_button_press_event().connect(sigc::mem_fun(*this, &DrawingArea::draw_get_mouse), false);
  23.         }
  24.  
  25.     private:
  26.         bool draw_draw(const Cairo::RefPtr<Cairo::Context>& cr)
  27.         {
  28.             cr->set_source_rgb(0.0, 0.0, 0.0);
  29.             cr->rectangle(_dimensions.get_x(), _dimensions.get_y(), _dimensions.get_width(), _dimensions.get_height());
  30.             cr->fill();
  31.  
  32.             return true;
  33.         }
  34.  
  35.         // this doesn't work
  36.         bool draw_get_mouse(const GdkEventButton *button)
  37.         {
  38.             g_print("%0.0f\t%0.0f\n", button->x, button->y);
  39.             return true;
  40.         }
  41.  
  42.         Gdk::Rectangle _dimensions;
  43. };
  44.  
  45. class Window : public Gtk::Window
  46. {
  47.     public:
  48.         Window()
  49.         {
  50.             set_default_size(Size::WIDTH, Size::HEIGHT);
  51.             set_title(TITLE);
  52.  
  53.             _scrolled_window.set_overlay_scrolling(true);
  54.             _scrolled_window.set_policy(Gtk::PolicyType::POLICY_AUTOMATIC, Gtk::PolicyType::POLICY_AUTOMATIC);
  55.  
  56.             _scrolled_window.add(_drawing_area);
  57.             add(_scrolled_window);
  58.  
  59.             _drawing_area.queue_draw();
  60.         }
  61.  
  62.         void set_mouse()
  63.         {
  64.             _drawing_area.set_mouse();
  65.         }
  66.     private:
  67.         Gtk::ScrolledWindow _scrolled_window;
  68.         DrawingArea _drawing_area;
  69. };
  70.  
  71. int main(int argc, char **argv)
  72. {
  73.     Glib::RefPtr<Gtk::Application> app = Gtk::Application::create();
  74.     Window win;
  75.     win.show_all();
  76.     win.set_mouse();
  77.     return app->run(win);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement