class EventAxesDemo

# Copyright © 2017 Ruby-GNOME2 Project Team # This program is licenced under the same licence as Ruby-GNOME2. #

Touch and Drawing Tablets

Demonstrates advanced handling of event information from exotic
input devices.

On one hand, this snippet demonstrates management of drawing tablets,
those contain additional information for the pointer other than
X/Y coordinates. Tablet pads events are mapped to actions, which
are both defined and interpreted by the application.

Input axes are dependent on hardware devices, on linux/unix you
can see the device axes through xinput list <device>. Each time
a different hardware device is used to move the pointer, the
master device will be updated to match the axes it provides,
these changes can be tracked through GdkDevice::changed, or
checking gdk_event_get_source_device().

On the other hand, this demo handles basic multitouch events,
each event coming from an specific touchpoint will contain a
GdkEventSequence that's unique for its lifetime, so multiple
touchpoints can be tracked.

Constants

AXES_INFO
COLORS
EVENT_DATA
PAD_ACTIONS

type index mode label action_name

PAD_ACTION_RESULTS

Public Class Methods

new(main_window) click to toggle source
# File gtk3/sample/gtk-demo/event_axes.rb, line 53
def initialize(main_window)
  @cur_color = 0
  @window = Gtk::Window.new(:toplevel)
  @window.screen = main_window.screen
  @window.title = "Event Axes"
  @window.set_default_size(400, 400)

  box = Gtk::EventBox.new
  @window.add(box)
  box.support_multidevice = true
  box.add_events([:pointer_motion_mask, :button_press_mask,
                  :button_release_mask, :smooth_scroll_mask,
                  :enter_notify_mask, :leave_notify_mask,
                  :touch_mask])

  @event_data = EVENT_DATA.new({}, {})

  box.signal_connect "event" do |widget, event|
    update_axes_from_event(event)
    widget.queue_draw
    false
  end

  box.signal_connect "draw" do |widget, cr|
    y = 0
    allocation = widget.allocation

    # Draw Abs info
    @event_data.pointer_info.each do |_key, value|
      draw_axes_info(cr, value, allocation)
    end

    @event_data.touch_info.each do |_key, value|
      draw_axes_info(cr, value, allocation)
    end

    # Draw name, color legend and misc data
    @event_data.pointer_info.each do |_key, value|
      y = draw_device_info(widget, cr, nil, y, value)
    end

    @event_data.touch_info.each do |key, value|
      y = draw_device_info(widget, cr, key, y, value)
    end

    false
  end

  @label = Gtk::Label.new("")
  @label.use_markup = true
  box.add(@label)
  init_pad_controller
end

Public Instance Methods

run() click to toggle source
# File gtk3/sample/gtk-demo/event_axes.rb, line 107
def run
  if !@window.visible?
    @window.show_all
  else
    @window.destroy
  end
  @window
end