soby 0.1.0 → 0.1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/soby/presentation.rb +83 -81
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40ca6eed485167e4e748ae296923bcfb926caf41
|
4
|
+
data.tar.gz: 7e75b024e1246f547bf608e1c5d8c93145f09d11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db03a0890923583db6da54e5efad62774c7e72a7542f92d8041233c5a59952ca218d639841fb21e54e7b6c0053b83f5d197ff43c6040bb3806c552a0ceab6c82
|
7
|
+
data.tar.gz: a1be61b2207d228fa3634e7524b3bb97ba09cde88ced8767ff82ced3b6307c1dad7b5d1b8525c7676f295e33c071cf57369cc778e66332111dee9787d7405d3c
|
data/lib/soby/presentation.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'base64'
|
3
3
|
|
4
|
-
class Presentation
|
4
|
+
class Presentation
|
5
5
|
|
6
6
|
include_package 'processing.core'
|
7
7
|
|
8
|
-
include Soby
|
9
|
-
|
8
|
+
include Soby
|
9
|
+
|
10
10
|
attr_accessor :geometry, :slides, :pshape, :svg, :transform
|
11
11
|
attr_accessor :width, :height, :matrix, :videos
|
12
12
|
attr_reader :nb_slides, :debug, :program, :url
|
@@ -28,7 +28,7 @@ class Presentation
|
|
28
28
|
@pshape = PShapeSVG.new(xml)
|
29
29
|
@svg = Nokogiri::XML(open(@url)).children[1];
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def reset
|
33
33
|
load_files
|
34
34
|
build_internal
|
@@ -38,15 +38,15 @@ class Presentation
|
|
38
38
|
def height ; @pshape.getHeight; end
|
39
39
|
|
40
40
|
|
41
|
-
def build_internal
|
41
|
+
def build_internal
|
42
42
|
|
43
|
-
# Create the frames..
|
43
|
+
# Create the frames..
|
44
44
|
@slides = {}
|
45
45
|
@nb_slides = 0
|
46
46
|
@playing_videos = []
|
47
47
|
|
48
48
|
puts "Svg null, look for the error... !" if @svg == nil
|
49
|
-
return if @svg == nil
|
49
|
+
return if @svg == nil
|
50
50
|
|
51
51
|
load_frames
|
52
52
|
load_videos
|
@@ -62,25 +62,25 @@ class Presentation
|
|
62
62
|
def load_frames
|
63
63
|
|
64
64
|
puts "Loading the frames..."
|
65
|
-
@svg.children.each do |child|
|
66
|
-
|
65
|
+
@svg.children.each do |child|
|
66
|
+
|
67
67
|
next unless child.name =~ /frame/
|
68
68
|
|
69
|
-
## ignore if it references nothing.
|
69
|
+
## ignore if it references nothing.
|
70
70
|
attr = child.attributes
|
71
71
|
next if attr["refid"] == nil
|
72
72
|
|
73
|
-
slide = Slide.new(child)
|
74
|
-
|
73
|
+
slide = Slide.new(child)
|
74
|
+
|
75
75
|
# get the element associated with each slide...
|
76
76
|
@svg.search("[id=" + slide.refid + "]").each do |elem|
|
77
77
|
|
78
|
-
case elem.name
|
78
|
+
case elem.name
|
79
79
|
when "rect", "image"
|
80
80
|
add_rect_or_image_frame(elem, slide)
|
81
|
-
when "g"
|
81
|
+
when "g"
|
82
82
|
add_group(elem, slide)
|
83
|
-
else
|
83
|
+
else
|
84
84
|
puts "Slide type not supported ! " + elem.name
|
85
85
|
end # end case
|
86
86
|
end # search
|
@@ -100,15 +100,15 @@ class Presentation
|
|
100
100
|
id = slide.title
|
101
101
|
refid = slide.refid
|
102
102
|
|
103
|
-
add_slide(slide)
|
103
|
+
add_slide(slide)
|
104
104
|
|
105
105
|
# set the geometry & transformation
|
106
106
|
transform = get_global_transform element
|
107
|
-
@slides[id].set_geometry(element, transform[0])
|
107
|
+
@slides[id].set_geometry(element, transform[0])
|
108
108
|
pshape_element = @pshape.getChild(refid)
|
109
109
|
|
110
110
|
# hide the element
|
111
|
-
if pshape_element == nil
|
111
|
+
if pshape_element == nil
|
112
112
|
puts "Error: rect or Image ID: #{refid} not found. CHECK THE PROCESSING VERSION."
|
113
113
|
else
|
114
114
|
pshape_element.setVisible(!@slides[id].hide) if element.name == "rect"
|
@@ -117,60 +117,60 @@ class Presentation
|
|
117
117
|
puts "Slide #{id} created from a rect : #{refid}" if element.name == "rect"
|
118
118
|
puts "Slide #{id} created from an image: #{refid}" if element.name == "image"
|
119
119
|
end
|
120
|
-
|
121
|
-
|
122
|
-
def add_group(group, slide)
|
123
|
-
|
120
|
+
|
121
|
+
|
122
|
+
def add_group(group, slide)
|
123
|
+
|
124
124
|
id = slide.title
|
125
125
|
refid = slide.refid
|
126
|
-
add_slide(slide)
|
126
|
+
add_slide(slide)
|
127
127
|
|
128
128
|
# TODO: Find the bounding box of any group..
|
129
129
|
# TODO: Hide the whole group ?
|
130
130
|
surf_max = 0
|
131
131
|
biggest_rect = nil
|
132
|
-
|
132
|
+
|
133
133
|
## biggest_rect surface..
|
134
134
|
group.css("rect").each do |rect|
|
135
135
|
# (group.css("rect") + group.css("image")).each do |rect|
|
136
|
-
|
137
|
-
if biggest_rect == nil
|
136
|
+
|
137
|
+
if biggest_rect == nil
|
138
138
|
biggest_rect = rect
|
139
139
|
end
|
140
|
-
|
140
|
+
|
141
141
|
surf_rect = rect.attributes["width"].value.to_i \
|
142
142
|
* rect.attributes["height"].value.to_i
|
143
143
|
|
144
|
-
if(surf_rect > surf_max)
|
145
|
-
biggest_rect = rect
|
144
|
+
if(surf_rect > surf_max)
|
145
|
+
biggest_rect = rect
|
146
146
|
surf_max = surf_rect
|
147
147
|
end
|
148
|
-
end # rect.each
|
149
|
-
|
148
|
+
end # rect.each
|
149
|
+
|
150
150
|
rect_id = biggest_rect.attributes["id"].value
|
151
151
|
transform = get_global_transform biggest_rect
|
152
|
-
@slides[id].set_geometry(biggest_rect, transform[0])
|
152
|
+
@slides[id].set_geometry(biggest_rect, transform[0])
|
153
153
|
|
154
|
-
# The description (code to excute) might be in the group and not in the rect.
|
154
|
+
# The description (code to excute) might be in the group and not in the rect.
|
155
155
|
## TODO: check if it should really be the first ?
|
156
156
|
desc = group.css("desc").first
|
157
157
|
title = group.css("title").first
|
158
158
|
|
159
|
-
if desc != nil
|
159
|
+
if desc != nil
|
160
160
|
if title == nil || (title.text.match(/animation/) == nil and title.text.match(/video/) == nil)
|
161
|
-
puts "Group Description read #{desc.text}"
|
162
|
-
|
161
|
+
puts "Group Description read #{desc.text}"
|
162
|
+
|
163
163
|
@slides[id].description = desc.text
|
164
164
|
end
|
165
165
|
end
|
166
|
-
|
166
|
+
|
167
167
|
e = @pshape.getChild(rect_id)
|
168
168
|
# hide the rect
|
169
|
-
if e == nil
|
169
|
+
if e == nil
|
170
170
|
puts "Error: rect ID: #{rect_id} not found "
|
171
171
|
else
|
172
172
|
@pshape.getChild(rect_id).setVisible(!@slides[id].hide)
|
173
|
-
end
|
173
|
+
end
|
174
174
|
|
175
175
|
puts "Slide #{id} created from a group, and the rectangle: #{rect_id}"
|
176
176
|
|
@@ -186,14 +186,14 @@ class Presentation
|
|
186
186
|
@svg.css("rect").each do |rect|
|
187
187
|
|
188
188
|
return if rect.attributes["id"] == nil
|
189
|
-
id = rect.attributes["id"].value #get the id
|
189
|
+
id = rect.attributes["id"].value #get the id
|
190
190
|
|
191
191
|
title = rect.css("title")
|
192
|
-
next if title == nil
|
192
|
+
next if title == nil
|
193
193
|
|
194
|
-
is_video = title.text.match(/video/) != nil
|
194
|
+
is_video = title.text.match(/video/) != nil
|
195
195
|
next unless is_video
|
196
|
-
|
196
|
+
|
197
197
|
t = rect.css("desc").text.split("\n")
|
198
198
|
slide_id = t[0]
|
199
199
|
path = t[1]
|
@@ -201,13 +201,13 @@ class Presentation
|
|
201
201
|
puts ("Loading the video : " + path)
|
202
202
|
|
203
203
|
# Get the transformation
|
204
|
-
tr = get_global_transform rect
|
204
|
+
tr = get_global_transform rect
|
205
205
|
|
206
|
-
video = MyVideo.new(path, @slides[slide_id], tr[0], tr[1], tr[2])
|
206
|
+
video = MyVideo.new(path, @slides[slide_id], tr[0], tr[1], tr[2])
|
207
207
|
|
208
|
-
if @slides[slide_id] == nil
|
209
|
-
puts "Error -> The video #{id} is linked to the slide #{slide_id} which is not found !"
|
210
|
-
else
|
208
|
+
if @slides[slide_id] == nil
|
209
|
+
puts "Error -> The video #{id} is linked to the slide #{slide_id} which is not found !"
|
210
|
+
else
|
211
211
|
|
212
212
|
@slides[slide_id].add_video(video)
|
213
213
|
puts "Video #{id} loaded with #{slide_id}"
|
@@ -235,11 +235,11 @@ class Presentation
|
|
235
235
|
|
236
236
|
id = elem.attributes["id"].value
|
237
237
|
|
238
|
-
# Get the animation information
|
238
|
+
# Get the animation information
|
239
239
|
t = elem.css("desc").text.split("\n")
|
240
240
|
|
241
241
|
# 1. which slide
|
242
|
-
# 2. when
|
242
|
+
# 2. when
|
243
243
|
slide_id = t[0]
|
244
244
|
anim_id = t[1].to_i
|
245
245
|
|
@@ -248,12 +248,12 @@ class Presentation
|
|
248
248
|
|
249
249
|
puts "Animation found on slide #{slide_id} with element #{animation.pshape_elem}"
|
250
250
|
|
251
|
-
if @slides[slide_id] == nil
|
252
|
-
puts "Error -> The animation #{id} is linked to the slide #{slide_id} which is not found !"
|
253
|
-
else
|
251
|
+
if @slides[slide_id] == nil
|
252
|
+
puts "Error -> The animation #{id} is linked to the slide #{slide_id} which is not found !"
|
253
|
+
else
|
254
254
|
# add the animation
|
255
255
|
@slides[slide_id].add_animation(anim_id, animation)
|
256
|
-
|
256
|
+
|
257
257
|
# hide the group !
|
258
258
|
animation.pshape_elem.setVisible(false) unless animation.pshape_elem == nil
|
259
259
|
puts "Animation #{id} loaded with #{slide_id}"
|
@@ -263,44 +263,45 @@ class Presentation
|
|
263
263
|
end
|
264
264
|
|
265
265
|
def display_videos
|
266
|
-
if not @app.is_moving
|
266
|
+
if not @app.is_moving
|
267
267
|
|
268
268
|
slide_no = @app.current_slide_no
|
269
269
|
|
270
270
|
# # Display the videos
|
271
|
-
if slide_no > 0 and @slides[slide_no].has_videos?
|
272
|
-
|
271
|
+
if slide_no > 0 and @slides[slide_no].has_videos?
|
272
|
+
|
273
273
|
|
274
274
|
# draw the object
|
275
275
|
@graphics.imageMode(Processing::App::CORNER)
|
276
|
-
|
277
|
-
@slides[slide_no].videos.each do |my_video|
|
276
|
+
|
277
|
+
@slides[slide_no].videos.each do |my_video|
|
278
278
|
@graphics.push_matrix
|
279
279
|
@graphics.modelview.apply(my_video.matrix)
|
280
|
-
|
280
|
+
|
281
281
|
# when the video is loaded it is saved... so that the memory can
|
282
282
|
# hopefully be freed
|
283
|
-
@playing_videos << my_video if my_video.play
|
283
|
+
@playing_videos << my_video if my_video.play
|
284
284
|
|
285
|
-
|
285
|
+
## force reading here..
|
286
|
+
my_video.video.read if my_video.video.available?
|
286
287
|
# my_video.video.read
|
287
288
|
@graphics.image(my_video.video, 0, 0, my_video.width, my_video.height)
|
288
289
|
|
289
|
-
|
290
|
+
|
290
291
|
@graphics.pop_matrix
|
291
292
|
end # videos.each
|
292
|
-
|
293
|
+
|
293
294
|
else # has_videos
|
294
295
|
|
295
|
-
## no video, free some memory
|
296
|
+
## no video, free some memory
|
296
297
|
@playing_videos.each do |my_video|
|
297
298
|
puts "Saving memory. "
|
298
299
|
my_video.video.stop
|
299
|
-
my_video.video = nil
|
300
|
-
System.gc
|
300
|
+
my_video.video = nil
|
301
|
+
Java::JavaLang::System.gc
|
301
302
|
end
|
302
303
|
@playing_videos = []
|
303
|
-
end
|
304
|
+
end
|
304
305
|
end
|
305
306
|
end
|
306
307
|
|
@@ -314,39 +315,40 @@ class Presentation
|
|
314
315
|
|
315
316
|
attr_reader :matrix, :width, :height, :slide
|
316
317
|
attr_accessor :video
|
317
|
-
|
318
|
-
def initialize(path, slide, matrix, width, height)
|
318
|
+
|
319
|
+
def initialize(path, slide, matrix, width, height)
|
319
320
|
@path = path
|
320
321
|
@width = width
|
321
322
|
@height = height
|
322
323
|
@matrix = matrix
|
323
324
|
@slide = slide
|
324
325
|
end
|
325
|
-
|
326
|
-
def play
|
327
|
-
if @video == nil
|
326
|
+
|
327
|
+
def play
|
328
|
+
if @video == nil
|
328
329
|
|
329
330
|
absolute_path = $app.sketchPath "" << @path
|
330
331
|
|
331
332
|
puts ("loading the video : " + absolute_path)
|
332
333
|
vid = Movie.new($app, absolute_path)
|
333
334
|
|
335
|
+
vid.play
|
334
336
|
# vid = Movie.new($app, @path)
|
335
|
-
puts "Loaded "
|
337
|
+
puts "Loaded "
|
336
338
|
puts vid, vid.width, vid.height
|
337
|
-
|
339
|
+
|
338
340
|
@video = vid
|
339
|
-
true
|
340
|
-
else
|
341
|
+
true
|
342
|
+
else
|
341
343
|
false
|
342
344
|
end
|
343
345
|
end
|
344
|
-
|
346
|
+
|
345
347
|
end
|
346
348
|
|
347
349
|
|
348
|
-
def to_s
|
349
|
-
"Slides #{@slides.size}"
|
350
|
+
def to_s
|
351
|
+
"Slides #{@slides.size}"
|
350
352
|
end
|
351
353
|
|
352
|
-
end
|
354
|
+
end
|
metadata
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Laviole
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.6'
|
16
19
|
- - ">="
|
17
20
|
- !ruby/object:Gem::Version
|
18
21
|
version: 1.6.3
|
@@ -21,12 +24,18 @@ dependencies:
|
|
21
24
|
type: :runtime
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.6'
|
24
30
|
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
26
32
|
version: 1.6.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
requirement: !ruby/object:Gem::Requirement
|
29
35
|
requirements:
|
36
|
+
- - "~>"
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0.8'
|
30
39
|
- - ">="
|
31
40
|
- !ruby/object:Gem::Version
|
32
41
|
version: 0.8.0
|
@@ -35,6 +44,9 @@ dependencies:
|
|
35
44
|
type: :runtime
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.8'
|
38
50
|
- - ">="
|
39
51
|
- !ruby/object:Gem::Version
|
40
52
|
version: 0.8.0
|