goocanvas 2.0.0 → 2.0.1
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.
- data/Rakefile +0 -1
- data/ext/goocanvas/extconf.rb +14 -9
- data/ext/goocanvas/rbgoocanvas.c +23 -180
- data/ext/goocanvas/rbgoocanvas.h +3 -19
- data/{sample/goocanvas-gi.rb → lib/goo/canvas-item.rb} +12 -21
- data/lib/goocanvas.rb +55 -138
- data/sample/scalability-demo.rb +57 -18
- data/sample/simple-demo.rb +1 -3
- data/sample/table-demo.rb +104 -23
- data/sample/units-demo.rb +1 -3
- data/sample/widgets-demo.rb +112 -32
- metadata +8 -25
- data/ext/goocanvas/rbgoo.c +0 -41
- data/ext/goocanvas/rbgoocairomatrix.c +0 -47
- data/ext/goocanvas/rbgoocairopattern.c +0 -47
- data/ext/goocanvas/rbgoocanvasconversions.h +0 -31
- data/ext/goocanvas/rbgoocanvasellipse.c +0 -52
- data/ext/goocanvas/rbgoocanvasgroup.c +0 -44
- data/ext/goocanvas/rbgoocanvasimage.c +0 -48
- data/ext/goocanvas/rbgoocanvasitem.c +0 -265
- data/ext/goocanvas/rbgoocanvaspoints.c +0 -88
- data/ext/goocanvas/rbgoocanvaspolyline.c +0 -45
- data/ext/goocanvas/rbgoocanvasprivate.h +0 -47
- data/ext/goocanvas/rbgoocanvasrect.c +0 -50
- data/ext/goocanvas/rbgoocanvasstyle.c +0 -62
- data/ext/goocanvas/rbgoocanvastable.c +0 -44
- data/ext/goocanvas/rbgoocanvastext.c +0 -51
- data/ext/goocanvas/rbgoocanvaswidget.c +0 -51
- data/ext/goocanvas/rbgooutils.c +0 -45
data/Rakefile
CHANGED
@@ -9,7 +9,6 @@ package = GNOME2Package.new do |_package|
|
|
9
9
|
_package.dependency.gem.runtime = ["gtk2"]
|
10
10
|
_package.win32.packages = ["goocanvas"]
|
11
11
|
_package.win32.dependencies = []
|
12
|
-
_package.post_install_message = "This library is experimental."
|
13
12
|
end
|
14
13
|
package.define_tasks
|
15
14
|
|
data/ext/goocanvas/extconf.rb
CHANGED
@@ -20,7 +20,7 @@ end
|
|
20
20
|
$LOAD_PATH.unshift(mkmf_gnome2_dir.to_s)
|
21
21
|
|
22
22
|
module_name = "goocanvas"
|
23
|
-
package_id = "goocanvas"
|
23
|
+
package_id = "goocanvas-2.0"
|
24
24
|
|
25
25
|
begin
|
26
26
|
require 'mkmf-gnome2'
|
@@ -30,9 +30,19 @@ rescue LoadError
|
|
30
30
|
require 'mkmf-gnome2'
|
31
31
|
end
|
32
32
|
|
33
|
-
[
|
33
|
+
[
|
34
|
+
"glib2",
|
35
|
+
"atk",
|
36
|
+
"pango",
|
37
|
+
"gdk_pixbuf2",
|
38
|
+
"gdk3",
|
39
|
+
"gtk3",
|
40
|
+
"gobject-introspection",
|
41
|
+
].each do |package|
|
34
42
|
directory = "#{package}#{version_suffix}"
|
35
|
-
|
43
|
+
build_base_path = "#{directory}/tmp/#{RUBY_PLATFORM}"
|
44
|
+
package_library_name = package.gsub(/-/, "_")
|
45
|
+
build_dir = "#{build_base_path}/#{package_library_name}/#{RUBY_VERSION}"
|
36
46
|
add_depend_package(package, "#{directory}/ext/#{package}",
|
37
47
|
top_dir.to_s,
|
38
48
|
:top_build_dir => top_build_dir.to_s,
|
@@ -55,15 +65,10 @@ check_cairo(rcairo_options) or exit(false)
|
|
55
65
|
|
56
66
|
setup_win32(module_name, base_dir)
|
57
67
|
|
58
|
-
unless required_pkg_config_package(package_id
|
59
|
-
:debian => "libgoocanvas-dev",
|
60
|
-
:fedora => "goocanvas-devel",
|
61
|
-
:macports => "goocanvas")
|
68
|
+
unless required_pkg_config_package(package_id)
|
62
69
|
exit(false)
|
63
70
|
end
|
64
71
|
|
65
|
-
make_version_header("GOO_CANVAS", package_id, ".")
|
66
|
-
|
67
72
|
create_pkg_config_file("Ruby/GooCanvas", package_id)
|
68
73
|
$defs << "-DRUBY_GOO_CANVAS_COMPILATION"
|
69
74
|
create_makefile(module_name)
|
data/ext/goocanvas/rbgoocanvas.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
3
|
+
* Copyright (C) 2011-2013 Ruby-GNOME2 Project Team
|
4
4
|
* Copyright (C) 2007 Vincent Isambart <vincent.isambart@gmail.com>
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
@@ -19,197 +19,40 @@
|
|
19
19
|
* MA 02110-1301 USA
|
20
20
|
*/
|
21
21
|
|
22
|
-
#include "
|
22
|
+
#include "rbgoocanvas.h"
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
void
|
28
|
-
rb_goo_canvas_initialize_item_object(VALUE obj, GooCanvasItem *item)
|
29
|
-
{
|
30
|
-
g_object_ref_sink(item);
|
31
|
-
G_INITIALIZE(obj, item);
|
32
|
-
}
|
33
|
-
|
34
|
-
static VALUE
|
35
|
-
rg_initialize(VALUE self)
|
36
|
-
{
|
37
|
-
RBGTK_INITIALIZE(self, goo_canvas_new());
|
38
|
-
return Qnil;
|
39
|
-
}
|
40
|
-
|
41
|
-
static VALUE
|
42
|
-
rg_set_bounds(VALUE self, VALUE left, VALUE top,
|
43
|
-
VALUE right, VALUE bottom)
|
44
|
-
{
|
45
|
-
goo_canvas_set_bounds(SELF(self), NUM2DBL(left), NUM2DBL(top),
|
46
|
-
NUM2DBL(right), NUM2DBL(bottom));
|
47
|
-
return self;
|
48
|
-
}
|
49
|
-
|
50
|
-
static VALUE
|
51
|
-
rg_root_item(VALUE self)
|
52
|
-
{
|
53
|
-
VALUE root;
|
54
|
-
|
55
|
-
root = GOBJ2RVAL(goo_canvas_get_root_item(SELF(self)));
|
56
|
-
G_CHILD_ADD(self, root);
|
57
|
-
|
58
|
-
return root;
|
59
|
-
}
|
60
|
-
|
61
|
-
static VALUE
|
62
|
-
rg_grab_focus(int argc, VALUE *argv, VALUE self)
|
24
|
+
static void
|
25
|
+
rgoo_canvas_mark(gpointer object)
|
63
26
|
{
|
64
|
-
|
27
|
+
GooCanvas *canvas = object;
|
28
|
+
GooCanvasItem *root_item;
|
65
29
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
30
|
+
rbgobj_gc_mark_instance(object);
|
31
|
+
root_item = goo_canvas_get_root_item(canvas);
|
32
|
+
if (root_item) {
|
33
|
+
rbgobj_gc_mark_instance(root_item);
|
70
34
|
}
|
71
|
-
|
72
|
-
return self;
|
73
35
|
}
|
74
36
|
|
75
|
-
static
|
76
|
-
|
37
|
+
static void
|
38
|
+
rgoo_canvas_item_mark(gpointer object)
|
77
39
|
{
|
78
|
-
|
79
|
-
|
80
|
-
NUM2INT(event_mask),
|
81
|
-
(GdkCursor *)RVAL2BOXED(cursor, GDK_TYPE_CURSOR),
|
82
|
-
NIL_P(etime) ? 0 : NUM2UINT(etime)),
|
83
|
-
GDK_TYPE_GRAB_STATUS);
|
84
|
-
}
|
40
|
+
GooCanvasItem *item = object;
|
41
|
+
gint i, n_children;
|
85
42
|
|
86
|
-
|
87
|
-
rg_pointer_ungrab(VALUE self, VALUE item, VALUE etime)
|
88
|
-
{
|
89
|
-
goo_canvas_pointer_ungrab(SELF(self), RVAL2GOOCANVASITEM(item),
|
90
|
-
NIL_P(etime) ? 0 : NUM2UINT(etime));
|
91
|
-
return self;
|
92
|
-
}
|
43
|
+
rbgobj_gc_mark_instance(object);
|
93
44
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
RVAL2GCBOUNDS(rb_bounds, &bounds),
|
101
|
-
NUM2DBL(scale));
|
102
|
-
return self;
|
103
|
-
}
|
104
|
-
|
105
|
-
static VALUE
|
106
|
-
rg_scroll_to(VALUE self, VALUE left, VALUE top)
|
107
|
-
{
|
108
|
-
goo_canvas_scroll_to(SELF(self), NUM2DBL(left), NUM2DBL(top));
|
109
|
-
return self;
|
110
|
-
}
|
111
|
-
|
112
|
-
static VALUE
|
113
|
-
rg_update(VALUE self)
|
114
|
-
{
|
115
|
-
goo_canvas_update(SELF(self));
|
116
|
-
return self;
|
117
|
-
}
|
118
|
-
|
119
|
-
static VALUE
|
120
|
-
rg_request_update(VALUE self)
|
121
|
-
{
|
122
|
-
goo_canvas_request_update(SELF(self));
|
123
|
-
return self;
|
124
|
-
}
|
125
|
-
|
126
|
-
static VALUE
|
127
|
-
rg_convert_from_pixels(VALUE self, VALUE rb_x, VALUE rb_y)
|
128
|
-
{
|
129
|
-
double x = NUM2DBL(rb_x);
|
130
|
-
double y = NUM2DBL(rb_y);
|
131
|
-
goo_canvas_convert_from_pixels(SELF(self), &x, &y);
|
132
|
-
return rb_ary_new3(2, INT2NUM(x), INT2NUM(y));
|
133
|
-
}
|
134
|
-
|
135
|
-
static VALUE
|
136
|
-
rg_convert_to_pixels(VALUE self, VALUE rb_x, VALUE rb_y)
|
137
|
-
{
|
138
|
-
double x = NUM2DBL(rb_x);
|
139
|
-
double y = NUM2DBL(rb_y);
|
140
|
-
goo_canvas_convert_to_pixels(SELF(self), &x, &y);
|
141
|
-
return rb_ary_new3(2, INT2NUM(x), INT2NUM(y));
|
142
|
-
}
|
143
|
-
|
144
|
-
static VALUE
|
145
|
-
rg_get_item_at(VALUE self, VALUE x, VALUE y, VALUE b)
|
146
|
-
{
|
147
|
-
GooCanvasItem *item;
|
148
|
-
item = goo_canvas_get_item_at(SELF(self),
|
149
|
-
NUM2DBL(x),
|
150
|
-
NUM2DBL(y),
|
151
|
-
RVAL2CBOOL(b));
|
152
|
-
return GOBJ2RVAL(item);
|
153
|
-
}
|
154
|
-
|
155
|
-
static VALUE
|
156
|
-
rg_get_items_at(VALUE self, VALUE x, VALUE y, VALUE b)
|
157
|
-
{
|
158
|
-
return GLIST2ARYF(goo_canvas_get_items_at(SELF(self),
|
159
|
-
NUM2DBL(x),
|
160
|
-
NUM2DBL(y),
|
161
|
-
RVAL2CBOOL(b)));
|
162
|
-
}
|
163
|
-
|
164
|
-
static VALUE
|
165
|
-
rg_bounds(VALUE self)
|
166
|
-
{
|
167
|
-
double left, top, right, bottom;
|
168
|
-
goo_canvas_get_bounds(SELF(self),
|
169
|
-
&left,
|
170
|
-
&top,
|
171
|
-
&right,
|
172
|
-
&bottom);
|
173
|
-
return rb_ary_new3(4, INT2NUM(left), INT2NUM(top), INT2NUM(right), INT2NUM(bottom));
|
45
|
+
n_children = goo_canvas_item_get_n_children(item);
|
46
|
+
for (i = 0; i < n_children; i++) {
|
47
|
+
GooCanvasItem *child;
|
48
|
+
child = goo_canvas_item_get_child(item, i);
|
49
|
+
rbgobj_gc_mark_instance(child);
|
50
|
+
}
|
174
51
|
}
|
175
52
|
|
176
53
|
void
|
177
54
|
Init_goocanvas(void)
|
178
55
|
{
|
179
|
-
|
180
|
-
|
181
|
-
VALUE RG_TARGET_NAMESPACE;
|
182
|
-
|
183
|
-
RG_TARGET_NAMESPACE = G_DEF_CLASS(GOO_TYPE_CANVAS, "Canvas", mGoo);
|
184
|
-
VALUE mCairo = rb_const_get(rb_mKernel, rb_intern("Cairo"));
|
185
|
-
|
186
|
-
RG_DEF_METHOD(initialize, 0);
|
187
|
-
RG_DEF_METHOD(set_bounds, 4);
|
188
|
-
RG_DEF_METHOD(bounds, 0);
|
189
|
-
RG_DEF_METHOD(root_item, 0);
|
190
|
-
RG_DEF_METHOD(grab_focus, -1);
|
191
|
-
RG_DEF_METHOD(pointer_grab, 4);
|
192
|
-
RG_DEF_METHOD(pointer_ungrab, 2);
|
193
|
-
RG_DEF_METHOD(render, 3);
|
194
|
-
RG_DEF_METHOD(scroll_to, 2);
|
195
|
-
RG_DEF_METHOD(update, 0);
|
196
|
-
RG_DEF_METHOD(request_update, 0);
|
197
|
-
RG_DEF_METHOD(convert_from_pixels, 2);
|
198
|
-
RG_DEF_METHOD(convert_to_pixels, 2);
|
199
|
-
RG_DEF_METHOD(get_item_at, 3);
|
200
|
-
RG_DEF_METHOD(get_items_at, 3);
|
201
|
-
|
202
|
-
Init_goocanvasitem(mGoo); /* Goo::CanvasItem */
|
203
|
-
Init_goocanvastext(mGoo); /* Goo::CanvasText */
|
204
|
-
Init_goocanvasrect(mGoo); /* Goo::CanvasRect */
|
205
|
-
Init_goocanvasellipse(mGoo); /* Goo::CanvasEllipse */
|
206
|
-
Init_goocanvaspolyline(mGoo); /* Goo::CanvasPolyline */
|
207
|
-
Init_goocanvaspoints(mGoo); /* Goo::CanvasPoints */
|
208
|
-
Init_goocanvasimage(mGoo); /* Goo::CanvasImage */
|
209
|
-
Init_goocanvastable(mGoo); /* Goo::CanvasTable */
|
210
|
-
Init_goocanvaswidget(mGoo); /* Goo::CanvasWidget */
|
211
|
-
Init_goocanvasstyle(mGoo); /* Goo::CanvasStyle */
|
212
|
-
Init_goocanvasgroup(mGoo); /* Goo::CanvasGroup */
|
213
|
-
Init_goocairopattern(mCairo);
|
214
|
-
Init_goocairomatrix(mCairo);
|
56
|
+
rbgobj_register_mark_func(GOO_TYPE_CANVAS, rgoo_canvas_mark);
|
57
|
+
rbgobj_register_mark_func(GOO_TYPE_CANVAS_ITEM, rgoo_canvas_item_mark);
|
215
58
|
}
|
data/ext/goocanvas/rbgoocanvas.h
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
* Copyright (C) 2011 Ruby-GNOME2 Project Team
|
4
|
-
* Copyright (C) 2007 Vincent Isambart <vincent.isambart@gmail.com>
|
3
|
+
* Copyright (C) 2011-2013 Ruby-GNOME2 Project Team
|
5
4
|
*
|
6
5
|
* This library is free software; you can redistribute it and/or
|
7
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -22,24 +21,9 @@
|
|
22
21
|
#ifndef __RBGOOCANVAS_H__
|
23
22
|
#define __RBGOOCANVAS_H__
|
24
23
|
|
25
|
-
#include <
|
26
|
-
#include <rbgtk.h>
|
24
|
+
#include <rbgobject.h>
|
27
25
|
#include <goocanvas.h>
|
28
26
|
|
29
|
-
|
30
|
-
#include "rbgoocanvasconversions.h"
|
31
|
-
|
32
|
-
#define RVAL2GCBOUNDS(obj, bounds) \
|
33
|
-
(ruby_to_goo_canvas_bounds(obj, bounds))
|
34
|
-
|
35
|
-
#define RVAL2GTKWIDGET(obj) GTK_WIDGET(RVAL2GOBJ(obj))
|
36
|
-
|
37
|
-
#define RB_GOO_CANVAS_ITEM_INITIALIZE(obj, item) \
|
38
|
-
(rb_goo_canvas_initialize_item_object(obj, GOO_CANVAS_ITEM(item)))
|
39
|
-
|
40
|
-
void rb_goo_canvas_initialize_item_object(VALUE obj, GooCanvasItem *item);
|
41
|
-
GooCanvasBounds *ruby_to_goo_canvas_bounds(VALUE rb_bounds, GooCanvasBounds *dest_bounds);
|
42
|
-
|
43
|
-
extern VALUE mGoo;
|
27
|
+
extern void Init_goocanvas(void);
|
44
28
|
|
45
29
|
#endif /* __RBGOOCANVAS_H__ */
|
@@ -14,28 +14,19 @@
|
|
14
14
|
# License along with this library; if not, write to the Free Software
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
16
|
|
17
|
-
require "gtk3"
|
18
|
-
require "gobject-introspection"
|
19
|
-
|
20
|
-
base_dir = Pathname.new(__FILE__).dirname.dirname.dirname.expand_path
|
21
|
-
vendor_dir = base_dir + "vendor" + "local"
|
22
|
-
vendor_bin_dir = vendor_dir + "bin"
|
23
|
-
GLib.prepend_environment_path(vendor_bin_dir)
|
24
|
-
|
25
17
|
module Goo
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
18
|
+
module CanvasItem
|
19
|
+
alias_method :remove_child_raw, :remove_child
|
20
|
+
private :remove_child_raw
|
21
|
+
def remove_child(child_or_position)
|
22
|
+
if child_or_position.is_a?(CanvasItem)
|
23
|
+
child = child_or_position
|
24
|
+
position = find_child(child)
|
25
|
+
else
|
26
|
+
position = child_or_position
|
27
|
+
child = get_child(position)
|
28
|
+
end
|
29
|
+
remove_child_raw(position)
|
36
30
|
end
|
37
31
|
end
|
38
|
-
|
39
|
-
class Loader < GObjectIntrospection::Loader
|
40
|
-
end
|
41
32
|
end
|
data/lib/goocanvas.rb
CHANGED
@@ -1,155 +1,72 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Copyright (C) 2013 Ruby-GNOME2 Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
3
16
|
|
4
|
-
|
17
|
+
require "gtk3"
|
18
|
+
require "gobject-introspection"
|
19
|
+
|
20
|
+
base_dir = Pathname.new(__FILE__).dirname.dirname.dirname.expand_path
|
5
21
|
vendor_dir = base_dir + "vendor" + "local"
|
6
22
|
vendor_bin_dir = vendor_dir + "bin"
|
7
23
|
GLib.prepend_dll_path(vendor_bin_dir)
|
8
|
-
begin
|
9
|
-
major, minor, micro, = RUBY_VERSION.split(/\./)
|
10
|
-
require "#{major}.#{minor}/goocanvas.so"
|
11
|
-
rescue LoadError
|
12
|
-
require 'goocanvas.so'
|
13
|
-
end
|
14
|
-
|
15
|
-
module Goo
|
16
|
-
LOG_DOMAIN="Goo"
|
17
|
-
|
18
|
-
def self.args_to_hash(args)
|
19
|
-
hash = args.pop if args.last.respond_to?(:to_hash)
|
20
|
-
hash ||= Hash.new
|
21
|
-
(args.length/2).times do |i|
|
22
|
-
key_index, value_index = i*2, i*2+1
|
23
|
-
hash[args[key_index]] = args[value_index]
|
24
|
-
end
|
25
|
-
hash
|
26
|
-
end
|
27
|
-
|
28
|
-
module PropsInit
|
29
|
-
def init_props(*args)
|
30
|
-
hash = Goo.args_to_hash(args)
|
31
|
-
hash.each_pair { |key, value| set_property(key.to_s.gsub(/-/, '_').to_sym, value) }
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.append_features(klass)
|
35
|
-
super
|
36
|
-
arity = klass.instance_method(:initialize).arity
|
37
|
-
raise 'the initialize method of a class including PropsInit must have a fixed arity' if arity < 0
|
38
|
-
args_list = (1..arity).collect { |i| "param#{i}" }.join(", ")
|
39
|
-
klass.module_eval <<-END
|
40
|
-
alias :_initialize :initialize
|
41
|
-
def initialize(#{args_list}, *args)
|
42
|
-
_initialize(#{args_list})
|
43
|
-
init_props(*args)
|
44
|
-
end
|
45
|
-
|
46
|
-
alias :_set_property :set_property
|
47
|
-
def set_property(prop_name, value)
|
48
|
-
pspec = self.class.property(prop_name)
|
49
|
-
value = value.to_goo if pspec.value_type.name =~ /^GooCairo/ and value.respond_to?(:to_goo)
|
50
|
-
_set_property(prop_name, value)
|
51
|
-
end
|
52
|
-
END
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
module CanvasItem
|
57
|
-
def set_child_properties(child, *args)
|
58
|
-
hash = Goo.args_to_hash(args)
|
59
|
-
hash.each_pair { |key, value| set_child_property(child, key, value) }
|
60
|
-
end
|
61
|
-
|
62
|
-
def bounds
|
63
|
-
[x1, x2, y1, y2]
|
64
|
-
end
|
65
|
-
|
66
|
-
def width
|
67
|
-
x2 - x1
|
68
|
-
end
|
69
|
-
|
70
|
-
def height
|
71
|
-
y2 - y1
|
72
|
-
end
|
73
|
-
|
74
|
-
def x
|
75
|
-
x1
|
76
|
-
end
|
77
|
-
|
78
|
-
def y
|
79
|
-
y1
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
class CanvasText
|
84
|
-
include PropsInit
|
85
|
-
end
|
86
24
|
|
87
|
-
|
88
|
-
|
25
|
+
if vendor_dir.exist?
|
26
|
+
begin
|
27
|
+
require "gobject-introspection"
|
28
|
+
vendor_girepository_dir = vendor_dir + "lib" + "girepository-1.0"
|
29
|
+
GObjectIntrospection.prepend_typelib_path(vendor_girepository_dir)
|
30
|
+
rescue LoadError
|
89
31
|
end
|
32
|
+
end
|
90
33
|
|
91
|
-
|
92
|
-
|
93
|
-
|
34
|
+
module Goo
|
35
|
+
LOG_DOMAIN = "GooCanvas"
|
36
|
+
GLib::Log.set_log_domain(LOG_DOMAIN)
|
94
37
|
|
95
|
-
class
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
init_props(*args)
|
101
|
-
end
|
102
|
-
|
103
|
-
def set_points(points)
|
104
|
-
points = CanvasPoints.new(points) unless points.instance_of?(CanvasPoints)
|
105
|
-
set_property(:points, points)
|
106
|
-
end
|
107
|
-
alias :points= :set_points
|
108
|
-
|
109
|
-
def self.new_line(parent, x1, y1, x2, y2, *args)
|
110
|
-
self.new(parent, false, [ x1, y1, x2, y2 ], *args)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class CanvasPoints
|
115
|
-
alias :_initialize :initialize
|
116
|
-
def initialize(arg)
|
117
|
-
if arg.respond_to?(:to_ary)
|
118
|
-
points = arg.flatten
|
119
|
-
num_points = points.length / 2
|
120
|
-
_initialize(num_points)
|
121
|
-
num_points.times { |i| self[i] = [ points[i*2], points[i*2+1] ] }
|
38
|
+
class << self
|
39
|
+
def const_missing(name)
|
40
|
+
init
|
41
|
+
if const_defined?(name)
|
42
|
+
const_get(name)
|
122
43
|
else
|
123
|
-
|
44
|
+
super
|
124
45
|
end
|
125
46
|
end
|
126
|
-
|
127
|
-
def each
|
128
|
-
num_points.times { |i| yield self[i] }
|
129
|
-
end
|
130
47
|
|
131
|
-
def
|
132
|
-
|
133
|
-
|
134
|
-
|
48
|
+
def init
|
49
|
+
loader = Loader.new(self)
|
50
|
+
loader.load("GooCanvas")
|
51
|
+
begin
|
52
|
+
major, minor, _ = RUBY_VERSION.split(/\./)
|
53
|
+
require "#{major}.#{minor}/goocanvas.so"
|
54
|
+
rescue LoadError
|
55
|
+
require "goocanvas.so"
|
56
|
+
end
|
57
|
+
require "goo/canvas-item"
|
58
|
+
class << self
|
59
|
+
remove_method(:init)
|
60
|
+
remove_method(:const_missing)
|
61
|
+
end
|
135
62
|
end
|
136
63
|
end
|
137
64
|
|
138
|
-
class
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
end
|
145
|
-
|
146
|
-
class CanvasWidget
|
147
|
-
include PropsInit
|
148
|
-
end
|
149
|
-
|
150
|
-
class CanvasImage
|
151
|
-
include PropsInit
|
65
|
+
class Loader < GObjectIntrospection::Loader
|
66
|
+
private
|
67
|
+
def load_field(info, i, field_info, klass)
|
68
|
+
return if field_info.name == "parent"
|
69
|
+
super
|
70
|
+
end
|
152
71
|
end
|
153
72
|
end
|
154
|
-
|
155
|
-
GLib::Log.set_log_domain(Goo::LOG_DOMAIN)
|