class ShapeSampleBasic

Public Class Methods

new(xpm_file, x, y, px, py, type) click to toggle source
Calls superclass method
# File gtk2/sample/testgtk/shapedwindow.rb, line 19
def initialize(xpm_file, x, y, px, py, type)
  super(type)
  @destroyed = false
  signal_connect("destroy"){destroy}

  realize

  @@root_win = Gdk::Window.default_root_window unless @@root_win

  window.set_events(window.events | Gdk::Event::BUTTON_MOTION_MASK |
             Gdk::Event::POINTER_MOTION_HINT_MASK |
             Gdk::Event::BUTTON_PRESS_MASK)

  signal_connect("button_press_event") do |w, event|
    if (event.event_type == Gdk::Event::BUTTON_PRESS)
      @x = event.x
      @y = event.y
      Gtk.grab_add(self)
      Gdk.pointer_grab(window, true,
                          Gdk::Event::BUTTON_RELEASE_MASK |
                          Gdk::Event::BUTTON_MOTION_MASK |
                          Gdk::Event::POINTER_MOTION_HINT_MASK,
                          nil, nil, 0)
    end
  end
  signal_connect("button_release_event") do
    Gtk.grab_remove(self)
    Gdk.pointer_ungrab(0)
  end
  signal_connect("motion_notify_event") do
    xp, yp, mask = @@root_win.pointer
    move(xp  - @x, yp  - @y)
  end

  move(x, y)

  style = Gtk::Widget.default_style

  fixed = Gtk::Fixed.new
  fixed.set_size_request(100, 100)
  add(fixed)

  gdk_pixmap, gdk_pixmap_mask =
    Gdk::Pixmap::create_from_xpm(window,
                                 style.bg(Gtk::STATE_NORMAL),
                                 xpm_file)
  pixmap = Gtk::Image.new(gdk_pixmap, gdk_pixmap_mask)

  fixed.put(pixmap, px, py)

  shape_combine_mask(gdk_pixmap_mask, px, py)
end