47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/X11/form.rb', line 47
def to_packet(dpy)
structs = self.class.structs
structs.map do |s|
value = s.type == :unused ? nil : instance_variable_get("@#{s.name}")
case s.type
when :field
if s.value
if s.value.respond_to?(:call)
value = s.value.call(self)
else
value = s.value
end
end
if value.is_a?(BaseForm)
v = value.to_packet(dpy)
else
v = s.type_klass.pack(value, dpy)
end
v
when :unused
sz = s.size.respond_to?(:call) ? s.size.call(self) : s.size
"\x00" * sz
when :length, :format_length
s.type_klass.pack(value.size, dpy)
when :string
s.type_klass.pack(value, dpy)
when :list
Array(value).collect do |obj|
if obj.is_a?(BaseForm)
obj.to_packet(dpy)
else
s.type_klass.pack(obj, dpy)
end
end
end
end.join
end
|