uh 2.0.0.pre2 → 2.0.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
data/ext/uh/window.c DELETED
@@ -1,262 +0,0 @@
1
- #include "uh.h"
2
-
3
-
4
- #define SET_WINDOW(x) \
5
- UhWindow *window;\
6
- Data_Get_Struct(x, UhWindow, window);
7
-
8
- #define DPY window->dpy
9
- #define WINDOW window->id
10
-
11
-
12
- VALUE window_destroy(VALUE self) {
13
- SET_WINDOW(self);
14
-
15
- XDestroyWindow(DPY, WINDOW);
16
-
17
- return Qnil;
18
- }
19
-
20
- VALUE window_focus(VALUE self) {
21
- SET_WINDOW(self);
22
-
23
- XSetInputFocus(DPY, WINDOW, RevertToPointerRoot, CurrentTime);
24
-
25
- return Qnil;
26
- }
27
-
28
- VALUE window_icccm_wm_delete(VALUE self) {
29
- XEvent xev;
30
- SET_WINDOW(self);
31
-
32
- xev.type = ClientMessage;
33
- xev.xclient.window = WINDOW;
34
- xev.xclient.message_type = XInternAtom(DPY, "WM_PROTOCOLS", False);
35
- xev.xclient.format = 32;
36
- xev.xclient.data.l[0] = XInternAtom(DPY, "WM_DELETE_WINDOW", False);
37
- xev.xclient.data.l[1] = CurrentTime;
38
- XSendEvent(DPY, WINDOW, False, NoEventMask, &xev);
39
-
40
- return Qnil;
41
- }
42
-
43
- VALUE window_icccm_wm_protocols(VALUE self) {
44
- Atom *win_protocols;
45
- int count;
46
- int i;
47
- char *atom_name;
48
- VALUE protocols;
49
- SET_WINDOW(self);
50
- protocols = rb_ary_new();
51
-
52
- if (XGetWMProtocols(DPY, WINDOW, &win_protocols, &count)) {
53
- for (i = 0; i < count; i++) {
54
- atom_name = XGetAtomName(DPY, win_protocols[i]);
55
- rb_ary_push(protocols, ID2SYM(rb_intern(atom_name)));
56
- XFree(atom_name);
57
- }
58
- }
59
-
60
- return protocols;
61
- }
62
-
63
- VALUE window_kill(VALUE self) {
64
- SET_WINDOW(self);
65
-
66
- XKillClient(DPY, WINDOW);
67
-
68
- return Qnil;
69
- }
70
-
71
- VALUE window_map(VALUE self) {
72
- SET_WINDOW(self);
73
-
74
- XMapWindow(DPY, WINDOW);
75
-
76
- return Qnil;
77
- }
78
-
79
- VALUE window_mask(VALUE self) {
80
- XWindowAttributes wa;
81
- SET_WINDOW(self);
82
-
83
- if (!XGetWindowAttributes(DPY, WINDOW, &wa)) {
84
- rb_raise(rb_eArgError, "cannot get window attributes for `0x%08lx'", WINDOW);
85
- }
86
-
87
- return LONG2FIX(wa.your_event_mask);
88
- }
89
-
90
- VALUE window_mask_set(VALUE self, VALUE mask) {
91
- XSetWindowAttributes attrs;
92
- SET_WINDOW(self);
93
-
94
- attrs.event_mask = FIX2LONG(mask);
95
- XChangeWindowAttributes(DPY, WINDOW, CWEventMask, &attrs);
96
-
97
- return Qnil;
98
- }
99
-
100
- VALUE window_name(VALUE self) {
101
- char *wxname;
102
- VALUE wname;
103
- SET_WINDOW(self);
104
-
105
- if (!XFetchName(DPY, WINDOW, &wxname))
106
- return Qnil;
107
-
108
- wname = rb_str_new_cstr(wxname);
109
- XFree(wxname);
110
-
111
- return wname;
112
- }
113
-
114
- VALUE window_name_set(VALUE self, VALUE name) {
115
- SET_WINDOW(self);
116
-
117
- XStoreName(DPY, WINDOW, RSTRING_PTR(name));
118
-
119
- return Qnil;
120
- }
121
-
122
- VALUE window_override_redirect(VALUE self) {
123
- XWindowAttributes wa;
124
- SET_WINDOW(self);
125
-
126
- if (!XGetWindowAttributes(DPY, WINDOW, &wa))
127
- return Qnil;
128
-
129
- return wa.override_redirect ? Qtrue : Qfalse;
130
- }
131
-
132
- VALUE window_raise(VALUE self) {
133
- SET_WINDOW(self);
134
-
135
- XRaiseWindow(DPY, WINDOW);
136
-
137
- return Qnil;
138
- }
139
-
140
- VALUE window_unmap(VALUE self) {
141
- SET_WINDOW(self);
142
-
143
- XUnmapWindow(DPY, WINDOW);
144
-
145
- return Qnil;
146
- }
147
-
148
- VALUE window_wclass(VALUE self) {
149
- XClassHint ch;
150
- VALUE wclass;
151
- SET_WINDOW(self);
152
-
153
- if (!XGetClassHint(DPY, WINDOW, &ch))
154
- return Qnil;
155
-
156
- wclass = rb_str_new_cstr(ch.res_class);
157
- XFree(ch.res_name);
158
- XFree(ch.res_class);
159
-
160
- return wclass;
161
- }
162
-
163
-
164
- VALUE window__configure(VALUE self, VALUE rx, VALUE ry, VALUE rw, VALUE rh) {
165
- XWindowChanges wc;
166
- unsigned int mask;
167
- SET_WINDOW(self);
168
-
169
- mask = CWX | CWY | CWWidth | CWHeight | CWBorderWidth | CWStackMode;
170
- wc.x = FIX2INT(rx);
171
- wc.y = FIX2INT(ry);
172
- wc.width = FIX2INT(rw);
173
- wc.height = FIX2INT(rh);
174
- wc.border_width = 0;
175
- wc.stack_mode = Above;
176
- XConfigureWindow(DPY, WINDOW, mask, &wc);
177
-
178
- return Qnil;
179
- }
180
-
181
- VALUE window__configure_event(VALUE self, VALUE rx, VALUE ry, VALUE rw, VALUE rh) {
182
- XConfigureEvent ev;
183
- SET_WINDOW(self);
184
-
185
- ev.type = ConfigureNotify;
186
- ev.display = DPY;
187
- ev.event = WINDOW;
188
- ev.window = WINDOW;
189
- ev.x = FIX2INT(rx);
190
- ev.y = FIX2INT(ry);
191
- ev.width = FIX2INT(rw);
192
- ev.height = FIX2INT(rh);
193
- ev.border_width = 0;
194
- ev.above = None;
195
- ev.override_redirect = False;
196
- XSendEvent(DPY, WINDOW, False, StructureNotifyMask, (XEvent *)&ev);
197
-
198
- return Qnil;
199
- }
200
-
201
- VALUE window__create(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h) {
202
- Window win;
203
- SET_WINDOW(self);
204
-
205
- win = XCreateSimpleWindow(DPY, WINDOW,
206
- FIX2INT(x), FIX2INT(y), FIX2INT(w), FIX2INT(h),
207
- 0, BlackPixel(DPY, SCREEN_DEFAULT), BlackPixel(DPY, SCREEN_DEFAULT)
208
- );
209
-
210
- return window_make(DPY, win);
211
- }
212
-
213
- VALUE window__create_sub(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h) {
214
- XSetWindowAttributes wa;
215
- Window sub_win;
216
- SET_WINDOW(self);
217
-
218
- wa.override_redirect = True;
219
- wa.background_pixmap = ParentRelative;
220
- wa.event_mask = ExposureMask;
221
-
222
- sub_win = XCreateWindow(DPY, WINDOW,
223
- FIX2INT(x), FIX2INT(y), FIX2INT(w), FIX2INT(h), 0,
224
- CopyFromParent, CopyFromParent, CopyFromParent,
225
- CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa
226
- );
227
-
228
- return window_make(DPY, sub_win);
229
- }
230
-
231
- VALUE window__moveresize(VALUE self, VALUE x, VALUE y, VALUE width, VALUE height) {
232
- XWindowChanges wc;
233
- SET_WINDOW(self);
234
-
235
- wc.x = NUM2INT(x);
236
- wc.y = NUM2INT(y);
237
- wc.width = NUM2INT(width);
238
- wc.height = NUM2INT(height);
239
- XConfigureWindow(DPY, WINDOW, CWX | CWY | CWWidth | CWHeight, &wc);
240
-
241
- return Qnil;
242
- }
243
-
244
-
245
- int window_id(VALUE self) {
246
- SET_WINDOW(self);
247
-
248
- return WINDOW;
249
- }
250
-
251
- VALUE window_make(Display *display, Window window_id) {
252
- UhWindow *window;
253
- VALUE obj;
254
-
255
- obj = Data_Make_Struct(cWindow, UhWindow, 0, free, window);
256
- window->dpy = display;
257
- window->id = window_id;
258
-
259
- rb_ivar_set(obj, rb_intern("@id"), LONG2NUM(window_id));
260
-
261
- return obj;
262
- }
data/lib/uh/drawable.rb DELETED
@@ -1,7 +0,0 @@
1
- module Uh
2
- module Drawable
3
- def copy(window)
4
- _copy window.id, width, height
5
- end
6
- end
7
- end
data/lib/uh/pixmap.rb DELETED
@@ -1,5 +0,0 @@
1
- module Uh
2
- class Pixmap
3
- include Drawable
4
- end
5
- end
data/test/test_helper.rb DELETED
@@ -1,19 +0,0 @@
1
- #require 'minitest/parallel'
2
- require 'minitest/spec'
3
- require 'minitest/autorun'
4
- require 'minitest/reporters'
5
- require 'uh'
6
-
7
- class Minitest::Test
8
- # FIXME: SpecReporter output is incorrect with pretty diffs or parallel tests
9
- #make_my_diffs_pretty!
10
- #parallelize_me!
11
- end
12
-
13
- class Minitest::Spec
14
- class << self
15
- alias context describe
16
- end
17
- end
18
-
19
- Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
data/test/uh/test_geo.rb DELETED
@@ -1,52 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Uh::Geo do
4
- subject { Uh::Geo.new(0, 0, 640, 480) }
5
-
6
- describe '.new' do
7
- it 'raises error when invalid width is given' do
8
- assert_raises(Uh::ArgumentError) { Uh::Geo.new(0, 0, 0, 480) }
9
- end
10
-
11
- it 'raises error when invalid height is given' do
12
- assert_raises(Uh::ArgumentError) { Uh::Geo.new(0, 0, 640, 0) }
13
- end
14
-
15
- it 'builds a geo without arguments' do
16
- assert_instance_of Uh::Geo, Uh::Geo.new
17
- end
18
- end
19
-
20
- describe '.format_xgeometry' do
21
- it 'formats coordinates and dimensions as X geometry' do
22
- assert_equal '640x480+0+0', Uh::Geo.format_xgeometry(0, 0, 640, 480)
23
- end
24
-
25
- it 'formats missing values as ?' do
26
- assert_equal '?x?+?+?', Uh::Geo.format_xgeometry(*[nil] * 4)
27
- end
28
- end
29
-
30
- describe '#to_s' do
31
- it 'returns .format_xgeometry results' do
32
- assert_equal Uh::Geo.format_xgeometry(*subject.values), subject.to_s
33
- end
34
- end
35
-
36
- %w[width height].each do |dimension|
37
- describe "##{dimension}=" do
38
- it 'assigns given value' do
39
- subject.send "#{dimension}=", 42
40
- assert_equal 42, subject.send(dimension)
41
- end
42
-
43
- it 'raises error when 0 is given' do
44
- assert_raises(Uh::ArgumentError) { subject.send "#{dimension}=", 0 }
45
- end
46
-
47
- it 'raises error when negative value is given' do
48
- assert_raises(Uh::ArgumentError) { subject.send "#{dimension}=", -42 }
49
- end
50
- end
51
- end
52
- end
data/uh.gemspec DELETED
@@ -1,23 +0,0 @@
1
- require File.expand_path('../lib/uh/version', __FILE__)
2
-
3
- Gem::Specification.new do |s|
4
- s.name = 'uh'
5
- s.version = Uh::VERSION.dup
6
- s.summary = 'Xlib simplified toolkit'
7
- s.description = s.name
8
- s.homepage = 'https://rubygems.org/gems/uh'
9
-
10
- s.authors = 'Thibault Jouan'
11
- s.email = 'tj@a13.fr'
12
-
13
- s.files = `git ls-files`.split $/
14
- s.test_files = s.files.grep /\Atest\//
15
-
16
- s.extensions = %w[ext/uh/extconf.rb]
17
-
18
-
19
- s.add_development_dependency 'rake', '~> 10.4'
20
- s.add_development_dependency 'rake-compiler', '~> 0.9'
21
- s.add_development_dependency 'minitest', '~> 5.5'
22
- s.add_development_dependency 'minitest-reporters', '~> 1.0'
23
- end