r2dsvg 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/r2dsvg.rb +106 -25
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e718ce8f5b3d4197dd32f6e8a683e798d6584392ecc9887fe06c407e66c09b8
|
4
|
+
data.tar.gz: 774d9213286656b2e5e07187ae003e2779069a1f739c4b69daedd9d3613659ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f9aabe5d38b712ecdc68e578e8161d1cb88e2f18507b830078f8dea4ae43da99b121982381ce688e6fd2270e4da399f9dac94b7885cffe83cfb4a164e5f4ce2
|
7
|
+
data.tar.gz: 295f9df35ebe9e3e755c771b52ebe86d16ab19ed298c00dd46797f94957b3a38571b80c5acbf74a98e8feff02437a54e2555953e7bbe3c9eac203e831d112f46
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/r2dsvg.rb
CHANGED
@@ -18,10 +18,26 @@ text {fill: red, size: 20}
|
|
18
18
|
|
19
19
|
CSS
|
20
20
|
|
21
|
+
module SvgleX
|
22
|
+
|
23
|
+
refine Svgle::Element do
|
24
|
+
|
25
|
+
def obj=(object)
|
26
|
+
@obj = object
|
27
|
+
end
|
28
|
+
|
29
|
+
def obj()
|
30
|
+
@obj
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
21
36
|
|
22
37
|
class R2dSvg
|
23
38
|
include Ruby2D
|
24
39
|
using ColouredText
|
40
|
+
using SvgleX
|
25
41
|
|
26
42
|
class Render < DomRender
|
27
43
|
|
@@ -37,8 +53,19 @@ class R2dSvg
|
|
37
53
|
h
|
38
54
|
end
|
39
55
|
|
40
|
-
[:embed_audio, sources ]
|
56
|
+
[:embed_audio, sources, e]
|
41
57
|
end
|
58
|
+
|
59
|
+
def image(e, attributes, raw_style)
|
60
|
+
|
61
|
+
style = style_filter(attributes).merge(raw_style)
|
62
|
+
h = attributes
|
63
|
+
|
64
|
+
x, y, width, height = %i(x y width height).map{|x| h[x] ? h[x].to_i : nil }
|
65
|
+
src = h[:'xlink:href']
|
66
|
+
|
67
|
+
[:draw_image, [x, y, width, height], src, style, e, render_all(e)]
|
68
|
+
end
|
42
69
|
|
43
70
|
def rect(e, attributes, raw_style)
|
44
71
|
|
@@ -49,7 +76,7 @@ class R2dSvg
|
|
49
76
|
x1, y1, width, height = %i(x y width height).map{|x| h[x].to_i }
|
50
77
|
x2, y2, = x1 + width, y1 + height
|
51
78
|
|
52
|
-
[:draw_rectangle, [x1, y1, x2, y2], style, render_all(e)]
|
79
|
+
[:draw_rectangle, [x1, y1, x2, y2], style, e, render_all(e)]
|
53
80
|
end
|
54
81
|
|
55
82
|
def script(e, attributes, style)
|
@@ -73,7 +100,7 @@ class R2dSvg
|
|
73
100
|
|
74
101
|
x, y = %i(x y).map{|x| attributes[x].to_i }
|
75
102
|
|
76
|
-
[:draw_text, [x, y], e.text, style, render_all(e)]
|
103
|
+
[:draw_text, [x, y], e.text, style, e, render_all(e)]
|
77
104
|
end
|
78
105
|
|
79
106
|
private
|
@@ -100,9 +127,35 @@ class R2dSvg
|
|
100
127
|
|
101
128
|
end
|
102
129
|
|
130
|
+
def draw_image(args)
|
131
|
+
|
132
|
+
dimensions, src, style, e = args
|
133
|
+
|
134
|
+
x, y, width, height = dimensions
|
135
|
+
|
136
|
+
filepath = Tempfile.new('r2dsvg').path + File.basename(src)
|
137
|
+
puts 'filepath: ' + filepath.inspect if @debug
|
138
|
+
File.write filepath, RXFHelper.read(src).first
|
139
|
+
|
140
|
+
|
141
|
+
if File.exists? filepath then
|
142
|
+
|
143
|
+
obj = Image.new(
|
144
|
+
filepath,
|
145
|
+
x: x, y: y,
|
146
|
+
width: width, height: height,
|
147
|
+
color: style[:fill],
|
148
|
+
z: style[:"z-index"].to_i
|
149
|
+
)
|
150
|
+
|
151
|
+
e.obj = obj if e.respond_to? :obj=
|
152
|
+
@window.add obj
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
103
156
|
def draw_rectangle(args)
|
104
157
|
|
105
|
-
coords, style = args
|
158
|
+
coords, style, e = args
|
106
159
|
|
107
160
|
x1, y1, x2, y2 = coords
|
108
161
|
|
@@ -111,18 +164,20 @@ class R2dSvg
|
|
111
164
|
puts ('style: ' + style.inspect).debug
|
112
165
|
end
|
113
166
|
|
114
|
-
|
167
|
+
obj = Rectangle.new(
|
115
168
|
x: x1, y: y1,
|
116
169
|
width: x2 - x1, height: y2 - y1,
|
117
170
|
color: style[:fill],
|
118
171
|
z: style[:"z-index"].to_i
|
119
172
|
)
|
173
|
+
e.obj = obj if e.respond_to? :obj=
|
174
|
+
@window.add obj
|
120
175
|
|
121
176
|
end
|
122
177
|
|
123
178
|
def draw_text(args)
|
124
179
|
|
125
|
-
coords, text, style = args
|
180
|
+
coords, text, style, e = args
|
126
181
|
|
127
182
|
x, y = coords
|
128
183
|
|
@@ -131,14 +186,16 @@ class R2dSvg
|
|
131
186
|
puts ('style: ' + style.inspect).debug
|
132
187
|
end
|
133
188
|
|
134
|
-
|
189
|
+
obj = Text.new(
|
135
190
|
text,
|
136
191
|
x: x, y: y,
|
137
192
|
#font: 'vera.ttf',
|
138
193
|
size: style[:font_size].to_i,
|
139
194
|
color: style[:color],
|
140
195
|
z: style[:"z-index"].to_i
|
141
|
-
)
|
196
|
+
)
|
197
|
+
e.obj = obj
|
198
|
+
@window.add obj
|
142
199
|
|
143
200
|
end
|
144
201
|
|
@@ -147,21 +204,33 @@ class R2dSvg
|
|
147
204
|
|
148
205
|
def embed_audio(args)
|
149
206
|
|
150
|
-
sources,
|
207
|
+
sources, e = args
|
151
208
|
|
152
209
|
if @debug then
|
153
210
|
puts 'sources: ' + sources.inspect if @debug
|
154
211
|
puts 'inside embed_audio'.info
|
155
212
|
end
|
156
213
|
|
157
|
-
|
158
|
-
|
214
|
+
|
215
|
+
audio_files = sources.map do |source|
|
216
|
+
|
217
|
+
filepath = Tempfile.new('r2dsvg').path + File.basename(source[:src])
|
218
|
+
File.write filepath, RXFHelper.read(source[:src]).first
|
219
|
+
filepath
|
159
220
|
end
|
160
221
|
|
222
|
+
audio = audio_files.find {|file| File.exists? file }
|
223
|
+
|
161
224
|
return unless audio
|
162
225
|
|
163
|
-
file = File.exists?
|
164
|
-
|
226
|
+
file = File.exists?(audio) ? audio : nil
|
227
|
+
puts 'file: ' + file.inspect if @debug
|
228
|
+
file = '/tmp/echo.wav'
|
229
|
+
obj = Sound.new(file)
|
230
|
+
e.obj = obj
|
231
|
+
|
232
|
+
def e.play() self.obj.play() end
|
233
|
+
#@window.add obj
|
165
234
|
|
166
235
|
end
|
167
236
|
|
@@ -214,27 +283,39 @@ class R2dSvg
|
|
214
283
|
@width, @height = %i(width height).map{|x| doc.root.attributes[x].to_i }
|
215
284
|
window.set title: title, width: @width, height: @height
|
216
285
|
|
217
|
-
def doc.element_by_id(id)
|
218
|
-
self.root.element("//*[@id='#{id}']")
|
219
|
-
end
|
220
286
|
|
221
287
|
doc.root.xpath('//script').each {|x| eval x.text.unescape }
|
222
288
|
|
223
289
|
drawing.render instructions
|
224
|
-
|
225
|
-
window.on :mouse_move do |event|
|
226
|
-
|
227
|
-
@doc.root.xpath('//*[@onmousemove]').each do |x|
|
228
|
-
|
229
|
-
eval x.onmousemove() if x.hotspot? event.x, event.y
|
230
|
-
|
231
|
-
end
|
232
290
|
|
291
|
+
@doc = doc
|
292
|
+
|
293
|
+
window.on(:mouse_move) {|event| mouse(:move, event) }
|
294
|
+
|
295
|
+
window.on(:mouse_down) do |event|
|
296
|
+
mouse :down, event if event.button == :left
|
233
297
|
end
|
234
298
|
|
235
|
-
|
299
|
+
|
236
300
|
window.show
|
237
301
|
end
|
302
|
+
|
303
|
+
private
|
304
|
+
|
305
|
+
def mouse(action, event)
|
306
|
+
|
307
|
+
doc = @doc
|
308
|
+
|
309
|
+
@doc.root.xpath("//*[@onmouse#{action}]").each do |x|
|
310
|
+
|
311
|
+
#puts 'x.class: ' + x.inspect if @debug
|
312
|
+
if x.obj and x.obj.contains? event.x, event.y then
|
313
|
+
eval x.method(('onmouse' + action.to_s).to_sym).call()
|
314
|
+
end
|
315
|
+
|
316
|
+
end
|
317
|
+
|
318
|
+
end
|
238
319
|
end
|
239
320
|
|
240
321
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r2dsvg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
version: '0.4'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.4.
|
49
|
+
version: 0.4.5
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version: '0.4'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.4.
|
59
|
+
version: 0.4.5
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: ruby2d
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|