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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae8112ff62f6b50b0350600aac2b425a32c849a0
4
- data.tar.gz: 7d8b94bfd7fb873c1ec83c46be51864342c64f5f
3
+ metadata.gz: 822c274d968c118bede18ca1963d4581d57a50a7
4
+ data.tar.gz: 70602803d3ef15b5b3af601ae4fc770b606cc36e
5
5
  SHA512:
6
- metadata.gz: f61e009049dbc020a4b09b5b6848f8adc398e98899cf10740325b3e1767497a1b499fcef7f76a6f64562ac3e7253fa75eba99e7041d826eb0fe1771d4470ebb3
7
- data.tar.gz: 3d68373f04fbbe0214b02c76468166502cd0b33e51dd53c50c6b2d4a017311bb80af2b983e634e72df28f1231135dfec748128f5d18ade7b72b721263e990737
6
+ metadata.gz: 85142b605aac3ebbc9937d1a5243e8c4efaa32378fec1c356a410e39c7fd90c558d36d0beac3379cb160ca5777fcaa7e3109d5ce0ccc37e4eb4362c284c782eb
7
+ data.tar.gz: 87e3ae605479e288ecd2ae0d2ae75b4428bdac14515d7a94a3ebd7dd02d9df4ad494e25c2607455616fcfcc4d8af9b52cca1ebc76808d26efe3b77d312f94b3a
data/README.md ADDED
@@ -0,0 +1,18 @@
1
+ uh
2
+ ==
3
+
4
+ [![Version ][badge-version-img]][badge-version-uri]
5
+ [![Build status ][badge-build-img]][badge-build-uri]
6
+ [![Code Climate ][badge-cclimate-img]][badge-cclimate-uri]
7
+
8
+
9
+ Minimalistic Xlib toolkit.
10
+
11
+
12
+
13
+ [badge-version-img]: https://img.shields.io/gem/v/uh.svg?style=flat-square
14
+ [badge-version-uri]: https://rubygems.org/gems/uh
15
+ [badge-build-img]: https://img.shields.io/travis/tjouan/uh/master.svg?style=flat-square
16
+ [badge-build-uri]: https://travis-ci.org/tjouan/uh
17
+ [badge-cclimate-img]: https://img.shields.io/codeclimate/github/tjouan/uh.svg?style=flat-square
18
+ [badge-cclimate-uri]: https://codeclimate.com/github/tjouan/uh
data/ext/uh/extconf.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'mkmf'
2
2
 
3
- fail 'libX11 is required' unless have_library 'X11'
4
- fail 'libXinerama is required' unless have_library 'Xinerama'
3
+ %w[X11 Xinerama].each { |e| fail "lib#{e} is required" unless have_library e }
5
4
 
6
5
  $CFLAGS << ' -std=c99 -Wall'
7
6
  if %w[DEBUG VALGRIND].any? { |e| ENV.key? e }
data/lib/uh.rb CHANGED
@@ -1,21 +1,15 @@
1
1
  require 'uh/uh'
2
2
  require 'uh/display'
3
- require 'uh/drawable'
4
3
  require 'uh/events'
5
4
  require 'uh/events/event'
6
5
  require 'uh/font'
7
6
  require 'uh/geo'
8
7
  require 'uh/geo_accessors'
9
- require 'uh/pixmap'
10
8
  require 'uh/screen'
11
9
  require 'uh/version'
12
10
  require 'uh/window'
13
11
 
14
12
  module Uh
15
- Error = Class.new(StandardError)
16
- RuntimeError = Class.new(RuntimeError)
17
- ArgumentError = Class.new(Error)
18
-
19
13
  KEY_MODIFIERS = {
20
14
  shift: 1 << 0,
21
15
  lock: 1 << 1,
data/lib/uh/display.rb CHANGED
@@ -4,6 +4,18 @@ module Uh
4
4
  ENV['DISPLAY']
5
5
  end
6
6
 
7
+ def check!
8
+ fail DisplayError, 'display not opened' unless opened?
9
+ end
10
+
11
+ def color_by_name(color_name)
12
+ Color.new(self, color_name)
13
+ end
14
+
15
+ def create_pixmap(width, height)
16
+ Pixmap.new(self, width, height)
17
+ end
18
+
7
19
  def create_window(geo)
8
20
  root.create geo
9
21
  end
@@ -19,5 +31,9 @@ module Uh
19
31
  def pending?
20
32
  pending > 0
21
33
  end
34
+
35
+ def query_font
36
+ Font.new(self)
37
+ end
22
38
  end
23
39
  end
data/lib/uh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Uh
2
- VERSION = '2.0.0.pre2'.freeze
2
+ VERSION = '2.0.0.pre3'.freeze
3
3
  end
data/lib/uh/window.rb CHANGED
@@ -7,33 +7,5 @@ module Uh
7
7
  def ==(other)
8
8
  id == other.id
9
9
  end
10
-
11
- def configure(geo)
12
- _configure geo.x, geo.y, geo.width, geo.height
13
- self
14
- end
15
-
16
- def configure_event(geo)
17
- _configure_event geo.x, geo.y, geo.width, geo.height
18
- self
19
- end
20
-
21
- def create(geo)
22
- _create geo.x, geo.y, geo.width, geo.height
23
- end
24
-
25
- def create_sub(geo)
26
- _create_sub geo.x, geo.y, geo.width, geo.height
27
- end
28
-
29
- def moveresize(geo)
30
- _moveresize geo.x, geo.y, geo.width, geo.height
31
- self
32
- end
33
-
34
- def show
35
- map
36
- self
37
- end
38
10
  end
39
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uh
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre2
4
+ version: 2.0.0.pre3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibault Jouan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-21 00:00:00.000000000 Z
11
+ date: 2015-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.5'
47
+ version: '5.6'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.5'
54
+ version: '5.6'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest-reporters
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,46 +66,43 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: headless
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
69
83
  description: uh
70
84
  email: tj@a13.fr
71
85
  executables: []
72
86
  extensions:
73
87
  - ext/uh/extconf.rb
74
- extra_rdoc_files: []
88
+ extra_rdoc_files:
89
+ - README.md
75
90
  files:
76
- - ".gitignore"
77
- - ".travis.yml"
78
- - Gemfile
79
- - Guardfile
80
- - LICENSE
81
- - Rakefile
82
- - ext/uh/color.c
83
- - ext/uh/display.c
84
- - ext/uh/event.c
91
+ - README.md
85
92
  - ext/uh/extconf.rb
86
- - ext/uh/font.c
87
- - ext/uh/pixmap.c
88
- - ext/uh/screen.c
89
- - ext/uh/uh.c
90
- - ext/uh/uh.h
91
- - ext/uh/window.c
92
93
  - lib/uh.rb
93
94
  - lib/uh/display.rb
94
- - lib/uh/drawable.rb
95
95
  - lib/uh/events.rb
96
96
  - lib/uh/events/event.rb
97
97
  - lib/uh/font.rb
98
98
  - lib/uh/geo.rb
99
99
  - lib/uh/geo_accessors.rb
100
- - lib/uh/pixmap.rb
101
100
  - lib/uh/screen.rb
102
101
  - lib/uh/version.rb
103
102
  - lib/uh/window.rb
104
- - test/test_helper.rb
105
- - test/uh/test_geo.rb
106
- - uh.gemspec
107
103
  homepage: https://rubygems.org/gems/uh
108
- licenses: []
104
+ licenses:
105
+ - BSD-3-Clause
109
106
  metadata: {}
110
107
  post_install_message:
111
108
  rdoc_options: []
@@ -127,6 +124,4 @@ rubygems_version: 2.4.5
127
124
  signing_key:
128
125
  specification_version: 4
129
126
  summary: Xlib simplified toolkit
130
- test_files:
131
- - test/test_helper.rb
132
- - test/uh/test_geo.rb
127
+ test_files: []
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- /Gemfile-custom.rb
2
- /Gemfile.lock
3
- /lib/uh/*.so
4
- /tmp/
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2
4
- - ruby-head
5
- - 2.0
6
- - 2.1
7
- - rbx-2
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- eval File.read('Gemfile-custom.rb') if File.exist?('Gemfile-custom.rb')
data/Guardfile DELETED
@@ -1,7 +0,0 @@
1
- directories %w[lib test]
2
-
3
- guard :minitest do
4
- watch(%r{\Atest/(.*)\/?test_(.*)\.rb$})
5
- watch(%r{\Alib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
6
- watch(%r{\Atest/test_helper\.rb$}) { 'test' }
7
- end
data/LICENSE DELETED
@@ -1,30 +0,0 @@
1
- Copyright 2014 Thibault Jouan. All rights reserved.
2
-
3
- Redistribution and use in source and binary forms, with or without
4
- modification, are permitted provided that the following conditions are
5
- met:
6
-
7
- * Redistributions of source code must retain the above copyright
8
- notice, this list of conditions and the following disclaimer.
9
-
10
- * Redistributions in binary form must reproduce the above copyright
11
- notice, this list of conditions and the following disclaimer in
12
- the documentation and/or other materials provided with the
13
- distribution.
14
-
15
- * Neither the name of the software nor the names of its contributors
16
- may be used to endorse or promote products derived from this
17
- software without specific prior written permission.
18
-
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS "AS IS" AND
21
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS
24
- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
27
- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
29
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
30
- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- require 'rake/extensiontask'
2
- require 'rake/testtask'
3
-
4
- task default: :test
5
-
6
- Rake::ExtensionTask.new('uh') do |t|
7
- t.lib_dir = 'lib/uh'
8
- end
9
-
10
- Rake::TestTask.new(test: :compile) do |t|
11
- t.libs << 'lib' << 'test'
12
- t.pattern = 'test/**/test_*.rb'
13
- end
data/ext/uh/color.c DELETED
@@ -1,12 +0,0 @@
1
- #include "uh.h"
2
-
3
-
4
- VALUE color_make(unsigned long pixel) {
5
- VALUE obj;
6
- VALUE args[0];
7
-
8
- obj = rb_class_new_instance(0, args, cColor);
9
- rb_ivar_set(obj, rb_intern("@pixel"), LONG2NUM(pixel));
10
-
11
- return obj;
12
- }
data/ext/uh/display.c DELETED
@@ -1,242 +0,0 @@
1
- #include "uh.h"
2
-
3
-
4
- #define SET_DISPLAY(x) \
5
- UhDisplay *display;\
6
- Data_Get_Struct(x, UhDisplay, display);
7
-
8
- #define DPY display->dpy
9
-
10
-
11
- VALUE rdisplay_error_handler = Qnil;
12
-
13
- int display_x_error_handler(Display *dpy, XErrorEvent *e);
14
-
15
-
16
- VALUE display_s_on_error(VALUE klass) {
17
- if (!rb_block_given_p()) {
18
- rb_raise(rb_eArgError, "no block given");
19
- }
20
-
21
- rdisplay_error_handler = rb_block_proc();
22
- rb_global_variable(&rdisplay_error_handler);
23
-
24
- return Qnil;
25
- }
26
-
27
-
28
- VALUE display_alloc(VALUE klass) {
29
- UhDisplay *display;
30
-
31
- return Data_Make_Struct(klass, UhDisplay, 0, free, display);
32
- }
33
-
34
-
35
- VALUE display_close(VALUE self) {
36
- SET_DISPLAY(self);
37
-
38
- if (DPY) {
39
- XCloseDisplay(DPY);
40
- }
41
- else {
42
- rb_raise(eDisplayError, "cannot close display");
43
- }
44
-
45
- return self;
46
- }
47
-
48
- VALUE display_color_by_name(VALUE self, VALUE rcolor) {
49
- Colormap map;
50
- XColor color;
51
- SET_DISPLAY(self);
52
-
53
- map = DefaultColormap(DPY, SCREEN_DEFAULT);
54
-
55
- if (!XAllocNamedColor(DPY, map, RSTRING_PTR(rcolor), &color, &color))
56
- rb_raise(rb_eArgError, "invalid color name `%s'", RSTRING_PTR(rcolor));
57
-
58
- return color_make(color.pixel);
59
- }
60
-
61
- VALUE display_create_pixmap(VALUE self, VALUE width, VALUE height) {
62
- Pixmap pixmap;
63
- SET_DISPLAY(self);
64
-
65
- pixmap = XCreatePixmap(DPY, ROOT_DEFAULT, FIX2INT(width), FIX2INT(height),
66
- DefaultDepth(DPY, SCREEN_DEFAULT)
67
- );
68
-
69
- return pixmap_make(DPY, pixmap, width, height);
70
- }
71
-
72
- VALUE display_fileno(VALUE self) {
73
- SET_DISPLAY(self);
74
-
75
- return INT2FIX(XConnectionNumber(DPY));
76
- }
77
-
78
- VALUE display_flush(VALUE self) {
79
- SET_DISPLAY(self);
80
-
81
- return INT2FIX(XFlush(DPY));
82
- }
83
-
84
- VALUE display_each_event(VALUE self) {
85
- XEvent xev;
86
- SET_DISPLAY(self);
87
-
88
- while (1) {
89
- XNextEvent(DPY, &xev);
90
- rb_yield(event_make(&xev));
91
- }
92
-
93
- return Qnil;
94
- }
95
-
96
- VALUE display_grab_key(VALUE self, VALUE key, VALUE modifier) {
97
- KeySym ks;
98
- KeyCode kc;
99
- SET_DISPLAY(self);
100
-
101
- ks = XStringToKeysym(RSTRING_PTR(key));
102
- if (ks == NoSymbol)
103
- rb_raise(rb_eArgError, "invalid KeySym %s", RSTRING_PTR(key));
104
-
105
- kc = XKeysymToKeycode(DPY, ks);
106
- if (kc == 0)
107
- rb_raise(rb_eArgError, "keysym XK_%s has no keycode", RSTRING_PTR(key));
108
-
109
- XGrabKey(DPY, kc, FIX2INT(modifier), ROOT_DEFAULT, True,
110
- GrabModeAsync, GrabModeAsync);
111
-
112
- return Qnil;
113
- }
114
-
115
- VALUE display_listen_events(int argc, VALUE *argv, VALUE self) {
116
- VALUE arg1;
117
- VALUE arg2;
118
- Window window;
119
- long mask;
120
- SET_DISPLAY(self);
121
-
122
- if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
123
- window = window_id(arg1);
124
- mask = FIX2LONG(arg2);
125
- }
126
- else {
127
- window = ROOT_DEFAULT;
128
- mask = FIX2LONG(arg1);
129
- }
130
-
131
- XSelectInput(DPY, window, mask);
132
-
133
- return Qnil;
134
- }
135
-
136
- VALUE display_next_event(VALUE self) {
137
- XEvent xev;
138
- SET_DISPLAY(self);
139
-
140
- XNextEvent(DPY, &xev);
141
-
142
- return event_make(&xev);
143
- }
144
-
145
- VALUE display_open(VALUE self) {
146
- SET_DISPLAY(self);
147
-
148
- if (!(DPY = XOpenDisplay(NULL))) {
149
- rb_raise(eDisplayError, "cannot open display");
150
- }
151
-
152
- XSetErrorHandler(display_x_error_handler);
153
-
154
- return self;
155
- }
156
-
157
- VALUE display_pending(VALUE self) {
158
- SET_DISPLAY(self);
159
-
160
- return INT2FIX(XPending(DPY));
161
- }
162
-
163
- VALUE display_query_font(VALUE self) {
164
- XFontStruct *xfs;
165
- VALUE font;
166
- SET_DISPLAY(self);
167
-
168
- if (!(xfs = XQueryFont(DPY,
169
- XGContextFromGC(DefaultGC(DPY, SCREEN_DEFAULT)))))
170
- return Qnil;
171
-
172
- font = font_make(xfs->max_bounds.width, xfs->ascent, xfs->descent);
173
- XFreeFontInfo(NULL, xfs, 1);
174
-
175
- return font;
176
- }
177
-
178
- VALUE display_root(VALUE self) {
179
- SET_DISPLAY(self);
180
-
181
- return window_make(DPY, ROOT_DEFAULT);
182
- }
183
-
184
- VALUE display_screens(VALUE self) {
185
- XineramaScreenInfo *xsi;
186
- int n;
187
- VALUE screens = rb_ary_new();
188
- VALUE args[5];
189
- SET_DISPLAY(self);
190
-
191
- if (XineramaIsActive(DPY)) {
192
- xsi = XineramaQueryScreens(DPY, &n);
193
-
194
- for (int i = 0; i < n; i++) {
195
- args[0] = INT2FIX(i);
196
- args[1] = INT2FIX(xsi[i].x_org);
197
- args[2] = INT2FIX(xsi[i].y_org);
198
- args[3] = INT2FIX(xsi[i].width);
199
- args[4] = INT2FIX(xsi[i].height);
200
-
201
- rb_ary_push(screens, rb_class_new_instance(5, args, cScreen));
202
- }
203
- }
204
- else {
205
- args[0] = INT2FIX(SCREEN_DEFAULT);
206
- args[1] = INT2FIX(0);
207
- args[2] = INT2FIX(0);
208
- args[3] = INT2FIX(XDisplayWidth(DPY, SCREEN_DEFAULT));
209
- args[4] = INT2FIX(XDisplayHeight(DPY, SCREEN_DEFAULT));
210
-
211
- rb_ary_push(screens, rb_class_new_instance(5, args, cScreen));
212
- }
213
-
214
- return screens;
215
- }
216
-
217
- VALUE display_sync(VALUE self, VALUE discard) {
218
- SET_DISPLAY(self);
219
-
220
- XSync(display->dpy, RTEST(discard));
221
-
222
- return Qnil;
223
- }
224
-
225
-
226
- int display_x_error_handler(Display *dpy, XErrorEvent *e) {
227
- char msg[80];
228
- char req[80];
229
- char nb[80];
230
-
231
- XGetErrorText(dpy, e->error_code, msg, sizeof msg);
232
- sprintf(nb, "%d", e->request_code);
233
- XGetErrorDatabaseText(dpy, "XRequest", nb, "<unknown>", req, sizeof req);
234
-
235
- rb_funcall(rdisplay_error_handler, rb_intern("call"), 3,
236
- rb_str_new_cstr(req),
237
- LONG2NUM(e->resourceid),
238
- rb_str_new_cstr(msg)
239
- );
240
-
241
- return 0;
242
- }