uh 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 437af62d5e0ae05ad1fbc597ae4b794527225fc5
4
- data.tar.gz: bfb30aba0989bc588578b0299d42281db3769a85
3
+ metadata.gz: 67b8a1fabce6c90b7171ae772bb59981a4a28c66
4
+ data.tar.gz: 7d25eeec5e12d68dbb23cd63e031ab62df4f89e0
5
5
  SHA512:
6
- metadata.gz: e114af20e2c7cde643b238eaa9be23b09c5ccd09ebd488c012d6ecf087dbf3d5b543252e7c91eea1f852e9167b318111bdf231f9d9bef2716ad0c04e529c9ce8
7
- data.tar.gz: c975dc914792a5772074b355d69cfd3a2c340129f5f0469e7d52212d0acf28d44a4e7763cef0f294d46746a225924ab2dc377f2aacdfea189c92b1742a406a5e
6
+ metadata.gz: e7d98e8cf49dae6a056339fe944beb1d25ed2f21dea828adb4650373c68c82e90db6f8d32a4296311b21c7270371c52b8f7b1dae12c9b97c256ab21217198f4e
7
+ data.tar.gz: 407e4325a030e84365277cc076d1ca37d0ec1f8a3252a90d35b372efca9f178bb90cf5225a3b23bcf329237d04baffda14c7151bcd1528868addbd6209cf5535
data/README.md CHANGED
@@ -1,11 +1,6 @@
1
1
  uh
2
2
  ==
3
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
4
  Minimalistic Xlib toolkit.
10
5
 
11
6
 
@@ -18,17 +13,7 @@ Similar or related code
18
13
  * https://github.com/christopheraue/ruby-xlib (gem, FFI)
19
14
  * https://github.com/rkh/ruby-xlib (C ext)
20
15
  * https://github.com/rramsden/ruby-x11 (pure ruby)
21
-
22
16
  * http://ruby-xlib-wrap.sourceforge.net/ (ext, SWIG)
23
17
  * http://www.moriq.com/ruby/xlib/
24
18
  * http://artengine.ca/matju/RubyX11/
25
19
  * https://github.com/mhanne/ruby-xcb (XCB, FFI)
26
-
27
-
28
-
29
- [badge-version-img]: https://img.shields.io/gem/v/uh.svg?style=flat-square
30
- [badge-version-uri]: https://rubygems.org/gems/uh
31
- [badge-build-img]: https://img.shields.io/travis/tjouan/uh/master.svg?style=flat-square
32
- [badge-build-uri]: https://travis-ci.org/tjouan/uh
33
- [badge-cclimate-img]: https://img.shields.io/codeclimate/github/tjouan/uh.svg?style=flat-square
34
- [badge-cclimate-uri]: https://codeclimate.com/github/tjouan/uh
@@ -133,7 +133,7 @@ VALUE display_open(VALUE self) {
133
133
  SET_DISPLAY(self);
134
134
 
135
135
  if (!(DPY = XOpenDisplay(NULL))) {
136
- rb_raise(eDisplayError, "cannot open display");
136
+ rb_raise(eDisplayError, "cannot open display %s", getenv("DISPLAY"));
137
137
  }
138
138
 
139
139
  XSetErrorHandler(display_x_error_handler);
@@ -7,7 +7,9 @@
7
7
 
8
8
 
9
9
  VALUE event_make_event(VALUE klass, XEvent *xev);
10
+ void event_make_configure_notify(VALUE self);
10
11
  void event_make_configure_request(VALUE self);
12
+ void event_make_expose(VALUE self);
11
13
  void event_make_key_any(VALUE self);
12
14
  void event_make_win_any(VALUE self);
13
15
 
@@ -19,9 +21,10 @@ VALUE event_make(XEvent *xev) {
19
21
  void (*function)(VALUE self);
20
22
  } EvClass;
21
23
  EvClass ev_classes[] = {
24
+ {ConfigureNotify, cConfigureNotify, event_make_configure_notify},
22
25
  {ConfigureRequest, cConfigureRequest, event_make_configure_request},
23
26
  {DestroyNotify, cDestroyNotify, NULL},
24
- {Expose, cExpose, NULL},
27
+ {Expose, cExpose, event_make_expose},
25
28
  {KeyPress, cKeyPress, event_make_key_any},
26
29
  {KeyRelease, cKeyRelease, event_make_key_any},
27
30
  {MapRequest, cMapRequest, NULL},
@@ -93,6 +96,15 @@ VALUE event_make_event(VALUE klass, XEvent *xev) {
93
96
  return event;
94
97
  }
95
98
 
99
+ void event_make_configure_notify(VALUE self) {
100
+ SET_XEV(self);
101
+
102
+ rb_ivar_set(self, rb_intern("@x"), INT2FIX(xev->xconfigure.x));
103
+ rb_ivar_set(self, rb_intern("@y"), INT2FIX(xev->xconfigure.y));
104
+ rb_ivar_set(self, rb_intern("@width"), INT2FIX(xev->xconfigure.width));
105
+ rb_ivar_set(self, rb_intern("@height"), INT2FIX(xev->xconfigure.height));
106
+ }
107
+
96
108
  void event_make_configure_request(VALUE self) {
97
109
  SET_XEV(self);
98
110
 
@@ -118,6 +130,15 @@ void event_make_configure_request(VALUE self) {
118
130
  LONG2NUM(xev->xconfigurerequest.detail));
119
131
  }
120
132
 
133
+ void event_make_expose(VALUE self) {
134
+ SET_XEV(self);
135
+
136
+ rb_ivar_set(self, rb_intern("@x"), INT2FIX(xev->xexpose.x));
137
+ rb_ivar_set(self, rb_intern("@y"), INT2FIX(xev->xexpose.y));
138
+ rb_ivar_set(self, rb_intern("@width"), INT2FIX(xev->xexpose.width));
139
+ rb_ivar_set(self, rb_intern("@height"), INT2FIX(xev->xexpose.height));
140
+ }
141
+
121
142
  void event_make_key_any(VALUE self) {
122
143
  KeySym ks;
123
144
  SET_XEV(self);
@@ -3,7 +3,7 @@ require 'mkmf'
3
3
  %w[X11 Xinerama].each { |e| fail "lib#{e} is required" unless have_library e }
4
4
 
5
5
  $CFLAGS << ' -std=c99 -Wall'
6
- if %w[DEBUG VALGRIND].any? { |e| ENV.key? e }
6
+ if ENV.key? 'DEBUG'
7
7
  $CFLAGS.gsub! /-O\d\s/, '-g '
8
8
  end
9
9
 
@@ -0,0 +1,74 @@
1
+ #include "uh.h"
2
+
3
+
4
+ #define SET_IMAGE(x) \
5
+ UhImage *image;\
6
+ Data_Get_Struct(x, UhImage, image);
7
+
8
+ #define DPY image->dpy
9
+ #define IMAGE image->image
10
+ #define GC image->gc
11
+
12
+
13
+ void image_deallocate(UhImage *image);
14
+
15
+
16
+ VALUE image_s_new(VALUE klass, VALUE rdisplay, VALUE rwidth, VALUE rheight, VALUE rdata) {
17
+ VALUE rimage;
18
+ SET_DISPLAY(rdisplay);
19
+
20
+ rb_funcall(rdisplay, rb_intern("check!"), 0);
21
+
22
+ StringValue(rdata);
23
+ rimage = image_make(
24
+ display->dpy,
25
+ FIX2INT(rwidth),
26
+ FIX2INT(rheight),
27
+ RSTRING_PTR(rdata)
28
+ );
29
+
30
+ return rimage;
31
+ }
32
+
33
+
34
+ VALUE image_put(VALUE self, VALUE rwindow) {
35
+ SET_IMAGE(self);
36
+
37
+ XPutImage(
38
+ DPY,
39
+ FIX2INT(rb_funcall(rwindow, rb_intern("id"), 0)),
40
+ GC,
41
+ IMAGE,
42
+ 0, 0,
43
+ 0, 0,
44
+ IMAGE->width, IMAGE->height
45
+ );
46
+
47
+ return Qnil;
48
+ }
49
+
50
+
51
+ VALUE image_make(Display *dpy, int width, int height, char *data) {
52
+ UhImage *image;
53
+ VALUE rimage;
54
+
55
+ rimage = Data_Make_Struct(cImage, UhImage, 0, image_deallocate, image);
56
+ image->dpy = dpy;
57
+ image->gc = XCreateGC(dpy, ROOT_DEFAULT, 0, NULL);
58
+ image->image = XCreateImage(
59
+ DPY,
60
+ DefaultVisual(DPY, DefaultScreen(DPY)),
61
+ DEPTH_DEFAULT,
62
+ ZPixmap, 0,
63
+ data, width, height,
64
+ 32, 0
65
+ );
66
+
67
+ return rimage;
68
+ }
69
+
70
+
71
+ void image_deallocate(UhImage *image) {
72
+ XDestroyImage(IMAGE);
73
+ free(image);
74
+ }
@@ -8,7 +8,6 @@
8
8
  #define DPY pixmap->dpy
9
9
  #define PIXMAP pixmap->pixmap
10
10
  #define GC pixmap->gc
11
- #define DEPTH_DEFAULT DefaultDepth(DPY, SCREEN_DEFAULT)
12
11
 
13
12
 
14
13
  void pixmap_deallocate(UhPixmap *p);
@@ -5,6 +5,7 @@ void uh_color();
5
5
  void uh_display();
6
6
  void uh_events();
7
7
  void uh_font();
8
+ void uh_image();
8
9
  void uh_pixmap();
9
10
  void uh_screen();
10
11
  void uh_window();
@@ -22,6 +23,7 @@ void Init_uh(void) {
22
23
  uh_display();
23
24
  uh_events();
24
25
  uh_font();
26
+ uh_image();
25
27
  uh_pixmap();
26
28
  uh_screen();
27
29
  uh_window();
@@ -61,6 +63,12 @@ void uh_events() {
61
63
  rb_define_attr(cEvent, "type", 1, 0);
62
64
  rb_define_attr(cEvent, "window", 1, 0);
63
65
 
66
+ cConfigureNotify = rb_define_class_under(mEvents, "ConfigureNotify", cEvent);
67
+ rb_define_attr(cConfigureNotify, "x", 1, 0);
68
+ rb_define_attr(cConfigureNotify, "y", 1, 0);
69
+ rb_define_attr(cConfigureNotify, "width", 1, 0);
70
+ rb_define_attr(cConfigureNotify, "height", 1, 0);
71
+
64
72
  cConfigureRequest = rb_define_class_under(mEvents, "ConfigureRequest", cEvent);
65
73
  rb_define_attr(cConfigureRequest, "x", 1, 0);
66
74
  rb_define_attr(cConfigureRequest, "y", 1, 0);
@@ -73,6 +81,10 @@ void uh_events() {
73
81
  cDestroyNotify = rb_define_class_under(mEvents, "DestroyNotify", cEvent);
74
82
 
75
83
  cExpose = rb_define_class_under(mEvents, "Expose", cEvent);
84
+ rb_define_attr(cExpose, "x", 1, 0);
85
+ rb_define_attr(cExpose, "y", 1, 0);
86
+ rb_define_attr(cExpose, "width", 1, 0);
87
+ rb_define_attr(cExpose, "height", 1, 0);
76
88
 
77
89
  cKeyPress = rb_define_class_under(mEvents, "KeyPress", cEvent);
78
90
  rb_define_attr(cKeyPress, "key", 1, 0);
@@ -97,6 +109,12 @@ void uh_font() {
97
109
  rb_define_attr(cFont, "descent", 1, 0);
98
110
  }
99
111
 
112
+ void uh_image() {
113
+ cImage = rb_define_class_under(mUh, "Image", rb_cObject);
114
+ rb_define_singleton_method(cImage, "new", image_s_new, 4);
115
+ rb_define_method(cImage, "put", image_put, 1);
116
+ }
117
+
100
118
  void uh_pixmap() {
101
119
  cPixmap = rb_define_class_under(mUh, "Pixmap", rb_cObject);
102
120
  rb_define_singleton_method(cPixmap, "new", pixmap_s_new, 3);
@@ -128,6 +146,7 @@ void uh_window() {
128
146
  rb_define_method(cWindow, "configure_event", window_configure_event, 1);
129
147
  rb_define_method(cWindow, "create", window_create, 1);
130
148
  rb_define_method(cWindow, "create_sub", window_create_sub, 1);
149
+ rb_define_method(cWindow, "cursor=", window_cursor_set, 1);
131
150
  rb_define_method(cWindow, "destroy", window_destroy, 0);
132
151
  rb_define_method(cWindow, "focus", window_focus, 0);
133
152
  rb_define_method(cWindow, "icccm_wm_delete", window_icccm_wm_delete, 0);
@@ -15,9 +15,11 @@
15
15
 
16
16
  #define ROOT_DEFAULT DefaultRootWindow(DPY)
17
17
  #define SCREEN_DEFAULT DefaultScreen(DPY)
18
+ #define DEPTH_DEFAULT DefaultDepth(DPY, SCREEN_DEFAULT)
18
19
 
19
20
 
20
21
  typedef struct s_display UhDisplay;
22
+ typedef struct s_image UhImage;
21
23
  typedef struct s_pixmap UhPixmap;
22
24
  typedef struct s_window UhWindow;
23
25
 
@@ -25,6 +27,12 @@ struct s_display {
25
27
  Display *dpy;
26
28
  };
27
29
 
30
+ struct s_image {
31
+ Display *dpy;
32
+ GC gc;
33
+ XImage *image;
34
+ };
35
+
28
36
  struct s_pixmap {
29
37
  Display *dpy;
30
38
  Pixmap pixmap;
@@ -40,9 +48,10 @@ struct s_window {
40
48
  VALUE mUh, mEvents,
41
49
  cColor,
42
50
  cDisplay,
43
- cEvent, cConfigureRequest, cDestroyNotify, cExpose, cKeyPress, cKeyRelease,
44
- cMapRequest, cPropertyNotify, cUnmapNotify,
51
+ cEvent, cConfigureNotify, cConfigureRequest, cDestroyNotify, cExpose,
52
+ cKeyPress, cKeyRelease, cMapRequest, cPropertyNotify, cUnmapNotify,
45
53
  cFont,
54
+ cImage,
46
55
  cPixmap,
47
56
  cScreen,
48
57
  cWindow,
@@ -72,6 +81,10 @@ VALUE event_make(XEvent *xev);
72
81
 
73
82
  VALUE font_s_new(VALUE klass, VALUE rdisplay);
74
83
 
84
+ VALUE image_s_new(VALUE klass, VALUE rdisplay, VALUE rwidth, VALUE rheight, VALUE rdata);
85
+ VALUE image_make(Display *dpy, int w, int h, char *data);
86
+ VALUE image_put(VALUE self, VALUE rwindow);
87
+
75
88
  VALUE pixmap_s_new(VALUE klass, VALUE rdisplay, VALUE rwidth, VALUE rheight);
76
89
  VALUE pixmap_copy(VALUE self, VALUE rwindow);
77
90
  VALUE pixmap_draw_rect(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h);
@@ -88,6 +101,7 @@ VALUE window_configure(VALUE self, VALUE rgeo);
88
101
  VALUE window_configure_event(VALUE self, VALUE rgeo);
89
102
  VALUE window_create(VALUE self, VALUE rgeo);
90
103
  VALUE window_create_sub(VALUE self, VALUE rgeo);
104
+ VALUE window_cursor_set(VALUE self, VALUE cursor);
91
105
  VALUE window_destroy(VALUE self);
92
106
  VALUE window_focus(VALUE self);
93
107
  VALUE window_icccm_wm_delete(VALUE self);
@@ -92,6 +92,16 @@ VALUE window_create_sub(VALUE self, VALUE rgeo) {
92
92
  return window_make(DPY, sub_win);
93
93
  }
94
94
 
95
+ VALUE window_cursor_set(VALUE self, VALUE rcursor) {
96
+ Cursor cursor;
97
+ SET_WINDOW(self);
98
+
99
+ cursor = XCreateFontCursor(DPY, FIX2INT(rcursor));
100
+ XDefineCursor(DPY, WINDOW, cursor);
101
+
102
+ return Qnil;
103
+ }
104
+
95
105
  VALUE window_destroy(VALUE self) {
96
106
  SET_WINDOW(self);
97
107
 
data/lib/uh.rb CHANGED
@@ -10,6 +10,87 @@ require 'uh/version'
10
10
  require 'uh/window'
11
11
 
12
12
  module Uh
13
+ CURSORS = {
14
+ num_glyphs: 154,
15
+ x_cursor: 0,
16
+ arrow: 2,
17
+ based_arrow_down: 4,
18
+ based_arrow_up: 6,
19
+ boat: 8,
20
+ bogosity: 10,
21
+ bottom_left_corner: 12,
22
+ bottom_right_corner: 14,
23
+ bottom_side: 16,
24
+ bottom_tee: 18,
25
+ box_spiral: 20,
26
+ center_ptr: 22,
27
+ circle: 24,
28
+ clock: 26,
29
+ coffee_mug: 28,
30
+ cross: 30,
31
+ cross_reverse: 32,
32
+ crosshair: 34,
33
+ diamond_cross: 36,
34
+ dot: 38,
35
+ dotbox: 40,
36
+ double_arrow: 42,
37
+ draft_large: 44,
38
+ draft_small: 46,
39
+ draped_box: 48,
40
+ exchange: 50,
41
+ fleur: 52,
42
+ gobbler: 54,
43
+ gumby: 56,
44
+ hand1: 58,
45
+ hand2: 60,
46
+ heart: 62,
47
+ icon: 64,
48
+ iron_cross: 66,
49
+ left_ptr: 68,
50
+ left_side: 70,
51
+ left_tee: 72,
52
+ leftbutton: 74,
53
+ ll_angle: 76,
54
+ lr_angle: 78,
55
+ man: 80,
56
+ middlebutton: 82,
57
+ mouse: 84,
58
+ pencil: 86,
59
+ pirate: 88,
60
+ plus: 90,
61
+ question_arrow: 92,
62
+ right_ptr: 94,
63
+ right_side: 96,
64
+ right_tee: 98,
65
+ rightbutton: 100,
66
+ rtl_logo: 102,
67
+ sailboat: 104,
68
+ sb_down_arrow: 106,
69
+ sb_h_double_arrow: 108,
70
+ sb_left_arrow: 110,
71
+ sb_right_arrow: 112,
72
+ sb_up_arrow: 114,
73
+ sb_v_double_arrow: 116,
74
+ shuttle: 118,
75
+ sizing: 120,
76
+ spider: 122,
77
+ spraycan: 124,
78
+ star: 126,
79
+ target: 128,
80
+ tcross: 130,
81
+ top_left_arrow: 132,
82
+ top_left_corner: 134,
83
+ top_right_corner: 136,
84
+ top_side: 138,
85
+ top_tee: 140,
86
+ trek: 142,
87
+ ul_angle: 144,
88
+ umbrella: 146,
89
+ ur_angle: 148,
90
+ watch: 150,
91
+ xterm: 152,
92
+ }
93
+
13
94
  KEY_MODIFIERS = {
14
95
  shift: 1 << 0,
15
96
  lock: 1 << 1,
@@ -20,4 +101,15 @@ module Uh
20
101
  mod4: 1 << 6,
21
102
  mod5: 1 << 7
22
103
  }.freeze
104
+
105
+ class << self
106
+ def open
107
+ display = Display.new.tap &:open
108
+ begin
109
+ yield display
110
+ ensure
111
+ display.close
112
+ end
113
+ end
114
+ end
23
115
  end
@@ -8,19 +8,23 @@ module Uh
8
8
  fail DisplayError, 'display not opened' unless opened?
9
9
  end
10
10
 
11
- def color_by_name(color_name)
12
- Color.new(self, color_name)
11
+ def color_by_name color_name
12
+ Color.new self, color_name
13
13
  end
14
14
 
15
- def create_pixmap(width, height)
16
- Pixmap.new(self, width, height)
15
+ def create_image width, height, image
16
+ Image.new self, width, height, image
17
17
  end
18
18
 
19
- def create_window(geo)
19
+ def create_pixmap width, height
20
+ Pixmap.new self, width, height
21
+ end
22
+
23
+ def create_window geo
20
24
  root.create geo
21
25
  end
22
26
 
23
- def create_subwindow(geo)
27
+ def create_subwindow geo
24
28
  root.create_sub geo
25
29
  end
26
30
 
@@ -33,7 +37,20 @@ module Uh
33
37
  end
34
38
 
35
39
  def query_font
36
- Font.new(self)
40
+ Font.new self
41
+ end
42
+
43
+ def window **opts
44
+ window = create_window Geo.new 0, 0, 320, 240
45
+ listen_events window, opts[:events] if opts.key? :events
46
+ window.cursor opts[:cursor] if opts.key? :cursor
47
+ window.map
48
+ begin
49
+ yield window
50
+ ensure
51
+ window.unmap
52
+ window.destroy
53
+ end
37
54
  end
38
55
  end
39
56
  end
@@ -1,7 +1,7 @@
1
1
  module Uh
2
- class Geo < Struct.new(:x, :y, :width, :height)
2
+ class Geo < Struct.new :x, :y, :width, :height
3
3
  class << self
4
- def format_xgeometry(x, y, width, height)
4
+ def format_xgeometry x, y, width, height
5
5
  '%sx%s+%s+%s' % [
6
6
  width ? width.to_s : ??,
7
7
  height ? height.to_s : ??,
@@ -11,7 +11,7 @@ module Uh
11
11
  end
12
12
  end
13
13
 
14
- def initialize(*args)
14
+ def initialize *args
15
15
  super
16
16
  %i[width height].each do |dimension|
17
17
  check_value dimension, send(dimension)
@@ -22,20 +22,20 @@ module Uh
22
22
  self.class.format_xgeometry *values
23
23
  end
24
24
 
25
- def width=(value)
25
+ def width= value
26
26
  check_value :width, value
27
27
  super value
28
28
  end
29
29
 
30
- def height=(value)
30
+ def height= value
31
31
  check_value :height, value
32
32
  super value
33
33
  end
34
34
 
35
35
 
36
- private
36
+ private
37
37
 
38
- def check_value(name, value)
38
+ def check_value name, value
39
39
  return if value.nil?
40
40
  fail ArgumentError, "invalid #{name.to_s}: #{value}" unless value > 0
41
41
  end
@@ -1,7 +1,7 @@
1
1
  module Uh
2
2
  class Screen
3
3
  def geo
4
- @geo ||= Geo.new(x, y, width, height)
4
+ @geo ||= Geo.new x, y, width, height
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,3 @@
1
1
  module Uh
2
- VERSION = '2.0.2'.freeze
2
+ VERSION = '2.0.3'.freeze
3
3
  end
@@ -4,8 +4,12 @@ module Uh
4
4
  id.to_s
5
5
  end
6
6
 
7
- def ==(other)
7
+ def == other
8
8
  id == other.id
9
9
  end
10
+
11
+ def cursor cursor_name
12
+ self.cursor = Uh::CURSORS[cursor_name]
13
+ end
10
14
  end
11
15
  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.2
4
+ version: 2.0.3
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-05-17 00:00:00.000000000 Z
11
+ date: 2017-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.9'
33
+ version: '1.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.9'
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,21 +66,7 @@ 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'
83
- description: uh
69
+ description:
84
70
  email: tj@a13.fr
85
71
  executables: []
86
72
  extensions:
@@ -94,6 +80,7 @@ files:
94
80
  - ext/uh/event.c
95
81
  - ext/uh/extconf.rb
96
82
  - ext/uh/font.c
83
+ - ext/uh/image.c
97
84
  - ext/uh/pixmap.c
98
85
  - ext/uh/screen.c
99
86
  - ext/uh/uh.c
@@ -129,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
116
  version: '0'
130
117
  requirements: []
131
118
  rubyforge_project:
132
- rubygems_version: 2.4.5
119
+ rubygems_version: 2.6.14
133
120
  signing_key:
134
121
  specification_version: 4
135
122
  summary: Xlib simplified toolkit