Class: WindowGeometry::X::Display

Inherits:
Object
  • Object
show all
Defined in:
lib/window_geometry/x.rb

Instance Method Summary collapse

Constructor Details

#initialize(display = nil) ⇒ Display

Returns a new instance of Display.

Parameters:

  • display (String) (defaults to: nil)


185
186
187
188
# File 'lib/window_geometry/x.rb', line 185

def initialize(display=nil)
  display ||= ENV['DISPLAY']
  @display = X11::XOpenDisplay(display) or raise "Cannot open display: #{display}"
end

Instance Method Details

#default_root_windowObject



202
203
204
# File 'lib/window_geometry/x.rb', line 202

def default_root_window
  Window.new(@display, X11::XDefaultRootWindow(@display))
end

#default_screenObject



190
191
192
# File 'lib/window_geometry/x.rb', line 190

def default_screen
  X11::DefaultScreen(@display)
end

#flushObject



206
207
208
# File 'lib/window_geometry/x.rb', line 206

def flush
  X11::XFlush(@display)
end

#height(screen) ⇒ Object



198
199
200
# File 'lib/window_geometry/x.rb', line 198

def height(screen)
  X11::DisplayHeight(@display, screen)
end

#load_font(font) ⇒ Object



210
211
212
# File 'lib/window_geometry/x.rb', line 210

def load_font(font)
  X11::XLoadFont(@display, font)
end

#next_eventObject



214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/window_geometry/x.rb', line 214

def next_event
  ev_buf = ' ' * 8 * 24
  ev_ptr = Fiddle::Pointer[ev_buf]
  while true
    X11::XNextEvent(@display, ev_ptr)
    ev_type = ev_buf.unpack1('i')
    case ev_type
    when X11::CREATE_NOTIFY
      e = X11::XCreateWindowEvent.new(ev_ptr)
      return CreateWindowEvent.new(e.type, e.serial, e.send_event, @display,
                                   e.parent, Window.new(@display, e.window),
                                   e.x, e.y, e.width, e.height, e.border_width, e.override_redirect)
    when X11::CONFIGURE_NOTIFY
      e = X11::XConfigureEvent.new(ev_ptr)
      return ConfigureEvent.new(e.type, e.serial, e.send_event, @display,
                                e.event, Window.new(@display, e.window),
                                e.x, e.y, e.width, e.height, e.border_width, e.above, e.override_redirect)
    when X11::EXPOSE
      e = X11::XExposeEvent.new(ev_ptr)
      return ExposeEvent.new(e.type, e.serial, e.send_event, @display,
                             Window.new(@display, e.window),
                             e.x, e.y, e.width, e.height, e.count)
    end
  end
end

#width(screen) ⇒ Object



194
195
196
# File 'lib/window_geometry/x.rb', line 194

def width(screen)
  X11::DisplayWidth(@display, screen)
end