ruby-x11/lib/X11/type.rb
2012-05-19 11:59:21 -07:00

70 lines
1.6 KiB
Ruby

# This module is used for encoding Ruby Objects to binary
# data. The types Int8, Int16, etc. are data-types defined
# in the X11 protocol. We wrap each data-type in a lambda expression
# which gets evaluated when a packet is created.
module X11
module Type
def self.define(type, directive, bytesize)
eval %{
class X11::Type::#{type}
def self.pack(x)
[x].pack(\"#{directive}\")
end
def self.unpack(x)
x.unpack(\"#{directive}\").first
end
def self.size
#{bytesize}
end
end
}
end
# Primitive Types
define "Int8", "c", 1
define "Int16", "s", 2
define "Int32", "l", 4
define "Uint8", "C", 1
define "Uint16", "S", 2
define "Uint32", "L", 4
class String8
def self.pack(x)
x + "\x00"*(-x.length & 3)
end
def self.unpack(socket, size)
val = socket.read(size)
unused_padding = (4 - (size % 4)) % 4
socket.read(unused_padding)
val
end
end
KeyCode = Uint8
Signifigance = Uint8
Bool = Uint8
BitGravity = Uint8
WinGravity = Uint8
BackingStore = Uint8
Bitmask = Uint32
Window = Uint32
Pixmap = Uint32
Cursor = Uint32
Colornum = Uint32
Font = Uint32
Gcontext = Uint32
Colormap = Uint32
Drawable = Uint32
Fontable = Uint32
Atom = Uint32
VisualID = Uint32
Mask = Uint32
Timestamp = Uint32
end
end