class Gdk::Loader

Private Instance Methods

apply_pending_constants() click to toggle source
# File lib/gdk3/loader.rb, line 84
def apply_pending_constants
  @pending_constants.each do |info|
    case info.name
    when /\AEVENT_/
      event_class.const_set($POSTMATCH, info.value)
    end
  end
end
convert_event_classes() click to toggle source
# File lib/gdk3/loader.rb, line 107
def convert_event_classes
  event_map = {
    EventType::EXPOSE              => EventExpose,
    EventType::MOTION_NOTIFY       => EventMotion,
    EventType::BUTTON_PRESS        => EventButton,
    EventType::BUTTON2_PRESS       => EventButton,
    EventType::BUTTON3_PRESS       => EventButton,
    EventType::BUTTON_RELEASE      => EventButton,
    EventType::KEY_PRESS           => EventKey,
    EventType::KEY_RELEASE         => EventKey,
    EventType::ENTER_NOTIFY        => EventCrossing,
    EventType::LEAVE_NOTIFY        => EventCrossing,
    EventType::FOCUS_CHANGE        => EventFocus,
    EventType::CONFIGURE           => EventConfigure,
    EventType::PROPERTY_NOTIFY     => EventProperty,
    EventType::SELECTION_CLEAR     => EventSelection,
    EventType::SELECTION_REQUEST   => EventSelection,
    EventType::SELECTION_NOTIFY    => EventSelection,
    EventType::PROXIMITY_IN        => EventProximity,
    EventType::PROXIMITY_OUT       => EventProximity,
    EventType::DRAG_ENTER          => EventDND,
    EventType::DRAG_LEAVE          => EventDND,
    EventType::DRAG_MOTION         => EventDND,
    EventType::DRAG_STATUS         => EventDND,
    EventType::DROP_START          => EventDND,
    EventType::DROP_FINISHED       => EventDND,
    EventType::VISIBILITY_NOTIFY   => EventVisibility,
    EventType::SCROLL              => EventScroll,
    EventType::WINDOW_STATE        => EventWindowState,
    EventType::SETTING             => EventSetting,
    EventType::OWNER_CHANGE        => EventOwnerChange,
    EventType::GRAB_BROKEN         => EventGrabBroken,
    EventType::DAMAGE              => EventExpose,
    EventType::TOUCH_BEGIN         => EventTouch,
    EventType::TOUCH_UPDATE        => EventTouch,
    EventType::TOUCH_END           => EventTouch,
    EventType::TOUCH_CANCEL        => EventTouch,
  }
  self.class.register_boxed_class_converter(Event.gtype) do |event|
    event_map[event.type] || Event
  end
end
define_enum(info) click to toggle source
Calls superclass method
# File lib/gdk3/loader.rb, line 238
def define_enum(info)
  case info.name
  when /\AWindowWindow/
    self.class.define_class(info.gtype, $POSTMATCH, window_class)
  when /\AWindow/
    self.class.define_class(info.gtype, $POSTMATCH, window_class)
  when "EventType"
    self.class.register_constant_rename_map("2BUTTON_PRESS",
                                            "BUTTON2_PRESS")
    self.class.register_constant_rename_map("3BUTTON_PRESS",
                                            "BUTTON3_PRESS")
    super
  else
    super
  end
end
define_keyval_module() click to toggle source
# File lib/gdk3/loader.rb, line 43
def define_keyval_module
  @keyval_module = Module.new
  @base_module.const_set("Keyval", @keyval_module)
end
define_selection_constants() click to toggle source
# File lib/gdk3/loader.rb, line 150
def define_selection_constants
  selections = {
    "PRIMARY"         => "PRIMARY",
    "SECONDARY"       => "SECONDARY",
    "CLIPBOARD"       => "CLIPBOARD",
    "TARGET_BITMAP"   => "BITMAP",
    "TARGET_COLORMAP" => "COLORMAP",
    "TARGET_DRAWABLE" => "DRAWABLE",
    "TARGET_PIXMAP"   => "PIXMAP",
    "TARGET_STRING"   => "STRING",
    "TYPE_ATOM"       => "ATOM",
    "TYPE_BITMAP"     => "BITMAP",
    "TYPE_COLORMAP"   => "COLORMAP",
    "TYPE_DRAWABLE"   => "DRAWABLE",
    "TYPE_INTEGER"    => "INTEGER",
    "TYPE_PIXMAP"     => "PIXMAP",
    "TYPE_WINDOW"     => "WINDOW",
    "TYPE_STRING"     => "STRING",
  }
  selections.each do |key, value|
    # TODO: Gdk::Atom.intern is not working yet.
    #@selection_module.const_set(key, Gdk::Atom.intern(value))
  end
end
define_selection_module() click to toggle source
# File lib/gdk3/loader.rb, line 48
def define_selection_module
  @selection_module = Module.new
  @base_module.const_set("Selection", @selection_module)
end
event_class() click to toggle source
# File lib/gdk3/loader.rb, line 24
def event_class
  @event_class ||= @base_module.const_get(:Event)
end
event_motion_class() click to toggle source
# File lib/gdk3/loader.rb, line 28
def event_motion_class
  @event_motion_class ||= @base_module.const_get(:EventMotion)
end
find_cairo_rectangle_int_info() click to toggle source
# File lib/gdk3/loader.rb, line 63
def find_cairo_rectangle_int_info
  repository = GObjectIntrospection::Repository.default
  repository.each("cairo") do |info|
    if info.name == "RectangleInt"
      return info
    end
  end
  nil
end
load_cairo_rectangle_int() click to toggle source
# File lib/gdk3/loader.rb, line 53
def load_cairo_rectangle_int
  info = find_cairo_rectangle_int_info
  klass = self.class.define_class(info.gtype,
                                  "Rectangle",
                                  @base_module,
                                  :size => info.size)
  load_fields(info, klass)
  load_methods(info, klass)
end
load_constant_info(info) click to toggle source
Calls superclass method
# File lib/gdk3/loader.rb, line 255
def load_constant_info(info)
  case info.name
  when /\AEVENT_/
    @pending_constants << info
  when /\AKEY_/
    @keyval_module.const_set(info.name, info.value)
  else
    super
  end
end
load_function_info(info) click to toggle source
Calls superclass method
# File lib/gdk3/loader.rb, line 175
def load_function_info(info)
  name = info.name
  case name
  when "init", /_get_type\z/
    # ignore
  when /\Arectangle_/
    define_method(info, rectangle_class, $POSTMATCH)
  when /\Apixbuf_/
    target_class = nil
    case $POSTMATCH
    when "get_from_window"
      target_class = window_class
    when "get_from_surface"
      target_class = Cairo::Surface
    end
    if target_class
      define_method(info, target_class, "to_pixbuf")
    else
      super
    end
  when /\Aevent_/
    name = $POSTMATCH
    case name
    when "request_motions"
      define_method(info, event_motion_class, "request")
    else
      super # TODO
    end
  when /\Acairo_/
    name = $POSTMATCH
    case name
    when "create"
      define_method(info, window_class, "create_cairo_context")
    when "set_source_color"
      define_method(info, Cairo::Context, "set_source_gdk_color")
    when "set_source_rgba"
      define_method(info, Cairo::Context, "set_source_gdk_rgba")
    when "rectangle"
      define_method(info, Cairo::Context, "gdk_rectangle")
    when "region_create_from_surface"
      # TODO
    when "surface_create_from_pixbuf"
      # TODO
    else
      define_method(info, Cairo::Context, name)
    end
  else
    super
  end
end
load_struct_info(info) click to toggle source
# File lib/gdk3/loader.rb, line 226
def load_struct_info(info)
  return if info.gtype_struct?

  options = {}
  case info.name
  when /\AEvent/
    options[:parent] = event_class
  end

  define_struct(info, options)
end
post_load(repository, namespace) click to toggle source
# File lib/gdk3/loader.rb, line 73
def post_load(repository, namespace)
  apply_pending_constants
  require_libraries
  convert_event_classes
  define_selection_constants
end
pre_load(repository, namespace) click to toggle source
# File lib/gdk3/loader.rb, line 36
def pre_load(repository, namespace)
  setup_pending_constants
  define_keyval_module
  define_selection_module
  load_cairo_rectangle_int
end
rectangle_class() click to toggle source
# File lib/gdk3/loader.rb, line 32
def rectangle_class
  @rectangle_class ||= @base_module.const_get(:Rectangle)
end
require_libraries() click to toggle source
# File lib/gdk3/loader.rb, line 93
def require_libraries
  require "gdk3/atom"
  require "gdk3/color"
  require "gdk3/event"
  require "gdk3/rectangle"
  require "gdk3/rgba"
  require "gdk3/window"
  require "gdk3/window-attr"

  require "gdk3/cairo"

  require "gdk3/deprecated"
end
setup_pending_constants() click to toggle source
# File lib/gdk3/loader.rb, line 80
def setup_pending_constants
  @pending_constants = []
end
window_class() click to toggle source
# File lib/gdk3/loader.rb, line 20
def window_class
  @window_class ||= @base_module.const_get(:Window)
end