pure-x11 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/example/test.rb +24 -23
- data/lib/X11/display.rb +13 -5
- data/lib/X11/version.rb +1 -1
- data/lib/X11/window.rb +39 -0
- data/lib/X11.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d50a871d744420a3fc90c8ca3cff7defb5d4917bce297469502c94e64ae12790
|
4
|
+
data.tar.gz: e17c0019823b08847fca5b33b35f2d618bde521fd3e86bf5a5168eb68807383a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36892209167f3aea6ccc68309e64f0e45f56e036ce8a547ffab37460f2169902429d6d1b4f11b7156d64a45151a155a7a46df693b2db86203ba75c9b99fe41ff
|
7
|
+
data.tar.gz: 6c7d7c83efef12e9e9303526cf2b92b5d40ad4e7d726af5a5fe59117f1396a171d8d79e452b7a5ede941d2d1bf0fcef05b7e60fc0cfd180b7f7dce95b5c0289c
|
data/Gemfile.lock
CHANGED
data/example/test.rb
CHANGED
@@ -14,7 +14,7 @@ dpy = display = X11::Display.new
|
|
14
14
|
screen = dpy.screens.first
|
15
15
|
root = screen.root
|
16
16
|
|
17
|
-
|
17
|
+
window = X11::Window.create(dpy,
|
18
18
|
0, 0, # x,y
|
19
19
|
1000, 600, # w,h
|
20
20
|
# FIXME: WTH isn't depth: 32 working here?
|
@@ -32,17 +32,18 @@ wid = dpy.create_window(
|
|
32
32
|
#dpy.next_packet
|
33
33
|
#exit(0)
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
|
36
|
+
def set_window_opacity(window, opacity)
|
37
|
+
window.change_property(
|
37
38
|
:replace,
|
38
|
-
|
39
|
+
"_NET_WM_WINDOW_OPACITY",
|
39
40
|
:cardinal, 32,
|
40
41
|
[(0xffffffff * opacity).to_i].pack("V").unpack("C*")
|
41
42
|
)
|
42
43
|
end
|
43
44
|
|
44
45
|
|
45
|
-
set_window_opacity(
|
46
|
+
set_window_opacity(window, 0.8)
|
46
47
|
|
47
48
|
#p dpy.display_info
|
48
49
|
|
@@ -87,11 +88,11 @@ def lookup_keysym(dpy, event)
|
|
87
88
|
end
|
88
89
|
|
89
90
|
puts "Mapping"
|
90
|
-
|
91
|
+
window.map
|
91
92
|
|
92
|
-
$gc = gc =
|
93
|
-
$gc2 =
|
94
|
-
$gc3 =
|
93
|
+
$gc = gc = window.create_gc(foreground: 0xff0000)
|
94
|
+
$gc2 = window.create_gc(foreground: 0xffffff, background: 0x444444)
|
95
|
+
$gc3 = window.create_gc
|
95
96
|
|
96
97
|
|
97
98
|
puts "Main loop"
|
@@ -123,7 +124,7 @@ $sft = SFT.new($f)
|
|
123
124
|
$sft.x_scale = 15
|
124
125
|
$sft.y_scale = 15
|
125
126
|
$glyphcache = {}
|
126
|
-
def render_glyph(
|
127
|
+
def render_glyph(window, x,y, ch)
|
127
128
|
gid = $sft.lookup(ch.ord)
|
128
129
|
mtx = $sft.gmetrics(gid)
|
129
130
|
data = $glyphcache[gid]
|
@@ -135,45 +136,45 @@ def render_glyph(display, wid, x,y, ch)
|
|
135
136
|
# p img
|
136
137
|
data = img.pixels.map {|px|
|
137
138
|
"\0\0"+px.chr+"\0" #+ "\0\0\0"
|
138
|
-
}.join.
|
139
|
+
}.join.b
|
139
140
|
$glyphcache[gid] = data
|
140
141
|
end
|
141
142
|
depth = 24
|
142
143
|
# p data
|
143
144
|
#p img
|
144
145
|
# p ch
|
145
|
-
|
146
|
-
:ZPixmap,
|
146
|
+
window.put_image(
|
147
|
+
:ZPixmap, $gc2,
|
147
148
|
mtx.min_width,mtx.min_height,
|
148
149
|
x, y - mtx.y_offset, 0, depth, data
|
149
150
|
)
|
150
151
|
mtx.advance_width
|
151
152
|
end
|
152
153
|
|
153
|
-
def render_str(
|
154
|
+
def render_str(window, x,y, str)
|
154
155
|
str.each_byte do |ch|
|
155
|
-
off = render_glyph(
|
156
|
+
off = render_glyph(window, x, y, ch.chr)
|
156
157
|
x+= off
|
157
158
|
end
|
158
159
|
end
|
159
160
|
|
160
|
-
def redraw(
|
161
|
-
|
162
|
-
|
163
|
-
|
161
|
+
def redraw(window, gc)
|
162
|
+
window.poly_fill_rectangle(gc, [20,20, 60, 80])
|
163
|
+
window.clear_area(false, 30, 30, 5, 5)
|
164
|
+
window.image_text16($gc2, 30, 70, "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ")
|
164
165
|
#"\u25f0\u25ef Hello World")
|
165
|
-
|
166
|
-
:ZPixmap,
|
166
|
+
window.put_image(
|
167
|
+
:ZPixmap, $gc2,
|
167
168
|
$png.width, $png.height, 80, 120, 0, 24, $data
|
168
169
|
)
|
169
|
-
render_str(
|
170
|
+
render_str(window, 30,90, 'HelloWorld')
|
170
171
|
end
|
171
172
|
|
172
173
|
loop do
|
173
174
|
pkt = display.next_packet
|
174
175
|
if pkt
|
175
176
|
p pkt
|
176
|
-
redraw(
|
177
|
+
redraw(window, gc) if pkt.is_a?(X11::Form::Expose)
|
177
178
|
|
178
179
|
if pkt.is_a?(X11::Form::KeyPress)
|
179
180
|
lookup_keysym(dpy,pkt)
|
data/lib/X11/display.rb
CHANGED
@@ -3,10 +3,16 @@ require 'stringio'
|
|
3
3
|
|
4
4
|
module X11
|
5
5
|
|
6
|
-
class DisplayError <
|
7
|
-
class ConnectionError <
|
8
|
-
class AuthorizationError <
|
9
|
-
class ProtocolError <
|
6
|
+
class DisplayError < X11::BasicError; end
|
7
|
+
class ConnectionError < X11::BasicError; end
|
8
|
+
class AuthorizationError < X11::BasicError; end
|
9
|
+
class ProtocolError < X11::BasicError; end
|
10
|
+
class Error < X11::BasicError
|
11
|
+
def initialize(pkt)
|
12
|
+
super("Error: #{pkt.error}, code=#{pkt.code}, seq=#{pkt.sequence_number}, resource=#{pkt.bad_resource_id}, major=#{pkt.major_opcode}, minor=#{pkt.minor_opcode}")
|
13
|
+
@error = pkt
|
14
|
+
end
|
15
|
+
end
|
10
16
|
|
11
17
|
class Display
|
12
18
|
attr_accessor :socket
|
@@ -189,7 +195,7 @@ module X11
|
|
189
195
|
STDERR.puts "write_sync_req: #{ob.inspect}" if @debug
|
190
196
|
pkt = q.shift
|
191
197
|
STDERR.puts "write_sync_rep: #{pkt.inspect}" if @debug
|
192
|
-
raise(pkt) if pkt.is_a?(X11::Form::Error)
|
198
|
+
raise(X11::Error.new(pkt)) if pkt.is_a?(X11::Form::Error)
|
193
199
|
return pkt if !pkt.is_a?(String)
|
194
200
|
reply ? reply.from_packet(StringIO.new(pkt)) : pkt
|
195
201
|
end
|
@@ -520,6 +526,8 @@ module X11
|
|
520
526
|
send_event(propagate, destination, mask, event)
|
521
527
|
end
|
522
528
|
|
529
|
+
def query_tree(...) = write_sync(X11::Form::QueryTree.new(...), X11::Form::QueryTreeReply)
|
530
|
+
|
523
531
|
def put_image(*args) = write_request(X11::Form::PutImage.new(*args))
|
524
532
|
def clear_area(*args) = write_request(X11::Form::ClearArea.new(*args))
|
525
533
|
def copy_area(*args) = write_request(X11::Form::CopyArea.new(*args))
|
data/lib/X11/version.rb
CHANGED
data/lib/X11/window.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
module X11
|
3
|
+
|
4
|
+
# A simple helper class that makes requests where the
|
5
|
+
# target object is a specific window a bit more convenient
|
6
|
+
class Window
|
7
|
+
attr_reader :dpy, :wid
|
8
|
+
|
9
|
+
def initialize(dpy,wid)
|
10
|
+
@dpy, @wid = dpy,wid
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create(dpy, ...)
|
14
|
+
wid = dpy.create_window(...)
|
15
|
+
Window.new(dpy,wid)
|
16
|
+
end
|
17
|
+
|
18
|
+
def query_tree = dpy.query_tree(@wid)
|
19
|
+
def map = dpy.map_window(@wid)
|
20
|
+
def unmap = dpy.unmap_window(@wid)
|
21
|
+
def destroy = dpy.destroy_window(@wid)
|
22
|
+
def get_geometry = dpy.get_geometry(@wid)
|
23
|
+
def configure(...) = dpy.configure_window(@wid, ...)
|
24
|
+
def get_property(...) = dpy.get_property(@wid,...)
|
25
|
+
def grab_key(arg, ...) = dpy.grab_key(arg, @wid, ...)
|
26
|
+
def grab_button(arg,...) = dpy.grab_button(arg, @wid, ...)
|
27
|
+
def change_property(mode, ...) = dpy.change_property(mode, @wid, ...)
|
28
|
+
def set_input_focus(mode) = dpy.set_input_focus(mode, @wid)
|
29
|
+
def select_input(...) = dpy.select_input(@wid,...)
|
30
|
+
def get_window_attributes(...) = dpy.get_window_attributes(@wid,...)
|
31
|
+
def change_attributes(...) = dpy.change_window_attributes(@wid,...)
|
32
|
+
|
33
|
+
def image_text16(...) = dpy.image_text16(@wid, ...)
|
34
|
+
def clear_area(arg, ...) = dpy.clear_area(arg, @wid, ...)
|
35
|
+
def poly_fill_rectangle(...) = dpy.poly_fill_rectangle(@wid, ...)
|
36
|
+
def put_image(type, ...) = dpy.put_image(type, @wid, ...)
|
37
|
+
def create_gc(...) = dpy.create_gc(@wid, ...)
|
38
|
+
end
|
39
|
+
end
|
data/lib/X11.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module X11
|
2
|
-
class
|
2
|
+
class BasicError < StandardError; end
|
3
3
|
end
|
4
4
|
|
5
5
|
require 'socket'
|
@@ -9,4 +9,5 @@ require_relative './X11/display'
|
|
9
9
|
require_relative './X11/screen'
|
10
10
|
require_relative './X11/type'
|
11
11
|
require_relative './X11/form'
|
12
|
+
require_relative './X11/window'
|
12
13
|
require_relative './X11/keysyms'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pure-x11
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vidar Hokstad
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-01-
|
12
|
+
date: 2024-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Pure Ruby X11 bindings
|
15
15
|
email:
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/X11/screen.rb
|
39
39
|
- lib/X11/type.rb
|
40
40
|
- lib/X11/version.rb
|
41
|
+
- lib/X11/window.rb
|
41
42
|
- ruby-x11.gemspec
|
42
43
|
- test/core_test.rb
|
43
44
|
- test/form_test.rb
|