green_shoes 0.201.0 → 0.207.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,7 +8,7 @@ This is **Green Shoes** written in Ruby. One of the colorful [Shoes](http://shoe
8
8
 
9
9
  Fantastic logo icon was created by [Zachary Scott](https://github.com/zacharyscott). Thanks!
10
10
 
11
- Now, there are 50 [samples](https://github.com/ashbb/green_shoes/tree/master/samples). Each has a [snapshot](https://github.com/ashbb/green_shoes/tree/master/snapshots).
11
+ Now, there are 51 [samples](https://github.com/ashbb/green_shoes/tree/master/samples). Each has a [snapshot](https://github.com/ashbb/green_shoes/tree/master/snapshots).
12
12
 
13
13
 
14
14
  Tiny Streaming Flash videos
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.201.0
1
+ 0.207.0
data/lib/green_shoes.rb CHANGED
@@ -19,6 +19,8 @@ module Shoes
19
19
  LINKHOVER_DEFAULT = "<span underline='single' underline_color='#039' foreground='#039' weight='normal'>"
20
20
  ROTATE = [Gdk::Pixbuf::ROTATE_NONE, Gdk::Pixbuf::ROTATE_CLOCKWISE, Gdk::Pixbuf::ROTATE_UPSIDEDOWN, Gdk::Pixbuf::ROTATE_COUNTERCLOCKWISE]
21
21
  VERSION = IO.read(File.join(DIR, '../VERSION')).chomp
22
+ BASIC_ATTRIBUTES_DEFAULT = {left: 0, top: 0, width: 0, height: 0, angle: 0, curve: 0}
23
+ SLOT_ATTRIBUTES_DEFAULT = {left: nil, top: nil, width: 1.0, height: 0}
22
24
  end
23
25
 
24
26
  class Object
data/lib/shoes/app.rb CHANGED
@@ -31,7 +31,7 @@ class Shoes
31
31
  attr_accessor :cslot, :cmask, :top_slot, :contents, :canvas, :app, :mccs, :mrcs, :mmcs,
32
32
  :mhcs, :mlcs, :shcs, :mcs, :win, :swin, :width_pre, :height_pre, :order, :dics
33
33
  attr_writer :mouse_button, :mouse_pos
34
- attr_reader :link_style, :linkhover_style, :animates, :owner
34
+ attr_reader :link_style, :linkhover_style, :animates, :owner, :textcursors
35
35
 
36
36
  def visit url
37
37
  if url =~ /^(http|https):\/\//
@@ -73,9 +73,7 @@ class Shoes
73
73
  args = msg.last.class == Hash ? msg.pop : {}
74
74
  args = basic_attributes args
75
75
  args[:markup] = msg.map(&:to_s).join
76
- attr_list, dummy_text = Pango.parse_markup args[:markup].gsub('\u0026', '@')
77
- dummy_attr_list, text = Pango.parse_markup args[:markup]
78
- text = text.gsub('\u0026', '&')
76
+ text, attr_list = make_pango_attr args[:markup]
79
77
  args[:size] ||= font_size
80
78
  args[:font] ||= (@font_family or 'sans')
81
79
  args[:align] ||= 'left'
@@ -92,19 +90,8 @@ class Shoes
92
90
 
93
91
  if args[:create_real] or !layout_control
94
92
  args[:width] = 1 if args[:width] <= 0
95
- surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, args[:width], args[:height]
96
- context = Cairo::Context.new surface
97
- layout = context.create_pango_layout
98
- layout.width = args[:width] * Pango::SCALE
99
- layout.wrap = Pango::WRAP_WORD
100
- layout.spacing = 5 * Pango::SCALE
101
- layout.text = text
102
- layout.alignment = eval "Pango::ALIGN_#{args[:align].upcase}"
103
- fd = Pango::FontDescription.new
104
- fd.family = args[:font]
105
- fd.size = args[:size] * Pango::SCALE
106
- layout.font_description = fd
107
- layout.attributes = attr_list
93
+ layout, context, surface =
94
+ make_pango_layout args[:size], args[:width], args[:height], args[:align], args[:font], text, attr_list
108
95
  context.show_pango_layout layout
109
96
  context.show_page
110
97
 
@@ -114,6 +101,7 @@ class Shoes
114
101
  img = create_tmp_png surface
115
102
  @canvas.put img, args[:left], args[:top]
116
103
  img.show_now
104
+ @canvas.remove img if args[:hidden]
117
105
  args[:real], args[:noorder] = img, layout_control
118
106
  else
119
107
  args[:real] = false
@@ -152,6 +140,7 @@ class Shoes
152
140
  end
153
141
  @canvas.put img, args[:left], args[:top]
154
142
  img.show_now
143
+ @canvas.remove img if args[:hidden]
155
144
  args[:real], args[:app] = img, self
156
145
  Image.new(args).tap{|s| @dics.push([s, d, tmpname]) if downloading}
157
146
  end
@@ -343,6 +332,7 @@ class Shoes
343
332
  img = Gtk::Image.new img.pixbuf.rotate(ROTATE[@pixbuf_rotate])
344
333
  @canvas.put img, args[:left], args[:top]
345
334
  img.show_now
335
+ @canvas.remove img if args[:hidden]
346
336
  args[:real], args[:app] = img, self
347
337
  Oval.new args
348
338
  end
@@ -388,6 +378,7 @@ class Shoes
388
378
  img = Gtk::Image.new img.pixbuf.rotate(ROTATE[@pixbuf_rotate])
389
379
  @canvas.put img, args[:left], args[:top]
390
380
  img.show_now
381
+ @canvas.remove img if args[:hidden]
391
382
  args[:real], args[:app] = img, self
392
383
  Rect.new args
393
384
  end
@@ -447,6 +438,7 @@ class Shoes
447
438
  img = create_tmp_png surface
448
439
  @canvas.put img, (args[:left]-=cw), (args[:top]-=cw)
449
440
  img.show_now
441
+ @canvas.remove img if args[:hidden]
450
442
  args[:real], args[:app] = img, self
451
443
  Line.new args
452
444
  end
@@ -485,6 +477,7 @@ class Shoes
485
477
  img = Gtk::Image.new img.pixbuf.rotate(ROTATE[@pixbuf_rotate])
486
478
  @canvas.put img, args[:left], args[:top]
487
479
  img.show_now
480
+ @canvas.remove img if args[:hidden]
488
481
  args[:real], args[:app] = img, self
489
482
  klass.new args
490
483
  end
@@ -530,7 +523,7 @@ class Shoes
530
523
  line_to w*0.58, w*0.5*0.2
531
524
  line_to w, w*0.5
532
525
  line_to w*0.58, w*(1-0.5*0.2)
533
- line_to w*0.58, w*(1-0.5*0.6)
526
+ line_to w*0.58, w*(1-0.5*0.6)
534
527
  line_to 0, w*(1-0.5*0.6)
535
528
  line_to 0, w*0.5*0.6
536
529
  end
data/lib/shoes/basic.rb CHANGED
@@ -25,7 +25,8 @@ class Shoes
25
25
  @proc = nil
26
26
  [:app, :real].each{|k| args.delete k}
27
27
  @args = args
28
- @hided, @shows, @hovered = false, true, false
28
+ @hovered = false
29
+ @hidden ? (@hided, @shows = true, false) : (@hided, @shows = false, true)
29
30
  end
30
31
 
31
32
  attr_reader :args, :shows, :initials
@@ -66,6 +67,7 @@ class Shoes
66
67
  @app.shcs.delete self
67
68
  @app.shcs << self
68
69
  @shows = true
70
+ @args.delete :hidden
69
71
  self
70
72
  end
71
73
 
@@ -164,7 +166,7 @@ class Shoes
164
166
  end
165
167
 
166
168
  def text= s
167
- style markup: s
169
+ style markup: s if !@hided or @args[:hidden]
168
170
  end
169
171
 
170
172
  alias :replace :text=
@@ -178,6 +180,24 @@ class Shoes
178
180
  self.text = @args[:markup]
179
181
  super
180
182
  end
183
+
184
+ def remove
185
+ flag = @args[:hidden] ? @shows : @hided
186
+ @app.canvas.remove @real unless flag
187
+ end
188
+
189
+ def cursor=(n)
190
+ if !n
191
+ @app.textcursors[self][1].clear if @app.textcursors[self][1]
192
+ @app.textcursors.delete self
193
+ else
194
+ @app.textcursors[self] ? (@app.textcursors[self][0] = n) : (@app.textcursors[self] = [n, nil])
195
+ end
196
+ end
197
+
198
+ def cursor
199
+ @app.textcursors[self][0]
200
+ end
181
201
  end
182
202
 
183
203
  class Banner < TextBlock; end
@@ -36,8 +36,8 @@ class Shoes
36
36
 
37
37
  module Mod2
38
38
  def init_app_vars
39
- @contents, @mccs, @mrcs, @mmcs, @mhcs, @mlcs, @shcs, @mcs, @order, @dics, @animates, @radio_groups =
40
- [], [], [], [], [], [], [], [], [], [], [], {}
39
+ @contents, @mccs, @mrcs, @mmcs, @mhcs, @mlcs, @shcs, @mcs, @order, @dics, @animates, @radio_groups, @textcursors =
40
+ [], [], [], [], [], [], [], [], [], [], [], {}, {}
41
41
  @cmask = nil
42
42
  @mouse_button, @mouse_pos = 0, [0, 0]
43
43
  @fill, @stroke = black, black
@@ -62,13 +62,13 @@ class Shoes
62
62
 
63
63
  class App
64
64
  def basic_attributes args={}
65
- default = {left: 0, top: 0, width: 0, height: 0, angle: 0, curve: 0}
65
+ default = BASIC_ATTRIBUTES_DEFAULT
66
66
  default.merge!({nocontrol: true}) if @nolayout
67
67
  default.merge args
68
68
  end
69
69
 
70
70
  def slot_attributes args={}
71
- default = {left: nil, top: nil, width: 1.0, height: 0}
71
+ default = SLOT_ATTRIBUTES_DEFAULT
72
72
  default.merge args
73
73
  end
74
74
 
@@ -81,7 +81,7 @@ class Shoes
81
81
  start, links = 0, []
82
82
  msg.each do |e|
83
83
  len = e.to_s.gsub(/<\/.*?>/, '').gsub(/<.*?>/, '').length
84
- (links << e; e.index = [start, start + len - 1]) if e.is_a? Link
84
+ (links << e; e.index = [start, start + len]) if e.is_a? Link
85
85
  start += len
86
86
  end
87
87
  links
@@ -90,10 +90,43 @@ class Shoes
90
90
  def make_link_pos links, layout, line_height
91
91
  links.each do |e|
92
92
  e.pos = [layout.index_to_pos(e.index[0]).x / Pango::SCALE, layout.index_to_pos(e.index[0]).y / Pango::SCALE]
93
- e.pos << (layout.index_to_pos(e.index[1]).x / Pango::SCALE + line_height / 2) << (layout.index_to_pos(e.index[1]).y / Pango::SCALE)
93
+ e.pos << (layout.index_to_pos(e.index[1]).x / Pango::SCALE) << (layout.index_to_pos(e.index[1]).y / Pango::SCALE)
94
94
  e.pos << line_height
95
95
  end
96
96
  end
97
+
98
+ def make_textcursor_pos tb, n
99
+ markup, size, width, height, align, font =
100
+ %w[@markup @size @width @height @align @font].map{|v| tb.instance_variable_get v}
101
+ text, attr_list = make_pango_attr markup
102
+ layout, = make_pango_layout size, width, height, align, font, text, attr_list
103
+ n = tb.text.length if n == -1
104
+ return layout.index_to_pos(n).x / Pango::SCALE, layout.index_to_pos(n).y / Pango::SCALE
105
+ end
106
+
107
+ def make_pango_attr markup
108
+ attr_list, dummy_text = Pango.parse_markup markup.gsub('\u0026', '@')
109
+ dummy_attr_list, text = Pango.parse_markup markup
110
+ text = text.gsub('\u0026', '&')
111
+ return text, attr_list
112
+ end
113
+
114
+ def make_pango_layout size, width, height, align, font, text, attr_list
115
+ surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, width, height
116
+ context = Cairo::Context.new surface
117
+ layout = context.create_pango_layout
118
+ layout.width = width * Pango::SCALE
119
+ layout.wrap = Pango::WRAP_WORD
120
+ layout.spacing = 5 * Pango::SCALE
121
+ layout.text = text
122
+ layout.alignment = eval "Pango::ALIGN_#{align.upcase}"
123
+ fd = Pango::FontDescription.new
124
+ fd.family = font
125
+ fd.size = size * Pango::SCALE
126
+ layout.font_description = fd
127
+ layout.attributes = attr_list
128
+ return layout, context, surface
129
+ end
97
130
  end
98
131
 
99
132
  def self.contents_alignment slot
@@ -135,6 +168,15 @@ class Shoes
135
168
  end
136
169
  end
137
170
  end
171
+
172
+ def self.repaint_textcursors app
173
+ app.textcursors.each do |tb, v|
174
+ n, cursor = v
175
+ x, y = app.make_textcursor_pos(tb, n)
176
+ x += tb.left; y += tb.top
177
+ cursor ? cursor.move(x, y) : app.textcursors[tb][1] = app.line(x, y, x, y+tb.size*1.7)
178
+ end
179
+ end
138
180
 
139
181
  def self.call_back_procs app
140
182
  init_contents app.cslot.contents
@@ -143,6 +185,7 @@ class Shoes
143
185
  repaint_all app.cslot
144
186
  mask_control app
145
187
  repaint_all_by_order app
188
+ repaint_textcursors app
146
189
  app.canvas.set_size 0, scrollable_height unless app.prjct
147
190
  true
148
191
  end
@@ -194,6 +237,7 @@ class Shoes
194
237
 
195
238
  def self.mouse_link_control app
196
239
  app.mlcs.each do |tb|
240
+ next if tb.hided
197
241
  link_proc, = mouse_on_link(tb, app)
198
242
  link_proc.call if link_proc
199
243
  end
@@ -207,10 +251,11 @@ class Shoes
207
251
  end
208
252
 
209
253
  app.mlcs.each do |tb|
254
+ return false if tb.hided
210
255
  tb.text = tb.text unless tb.real
211
256
  tb.real.window.cursor = ARROW if tb.real.window
212
257
  if ret = mouse_on_link(tb, app)
213
- tb.real.window.cursor = HAND
258
+ tb.real.window.cursor = HAND if tb.real.window
214
259
  unless tb.links[ret[1]].link_hover
215
260
  markup = tb.args[:markup].gsub(app.linkhover_style, app.link_style)
216
261
  links = markup.mindex app.link_style
data/lib/shoes/slot.rb CHANGED
@@ -20,7 +20,16 @@ class Shoes
20
20
  @contents = []
21
21
  (@parent.contents << self) unless @nocontrol
22
22
  if block_given?
23
+ if args[:hidden]
24
+ BASIC_ATTRIBUTES_DEFAULT.merge! hidden: true
25
+ SLOT_ATTRIBUTES_DEFAULT.merge! hidden: true
26
+ @hidden_flag = true unless @parent.instance_variable_get '@hidden'
27
+ end
23
28
  yield
29
+ if @hidden_flag
30
+ BASIC_ATTRIBUTES_DEFAULT.delete :hidden
31
+ SLOT_ATTRIBUTES_DEFAULT.delete :hidden
32
+ end
24
33
  @app.cslot = @parent
25
34
  else
26
35
  @left = @top = 0
@@ -102,6 +111,16 @@ class Shoes
102
111
  n = n ? n+1 : contents.length
103
112
  prepend n, &blk
104
113
  end
114
+
115
+ def show
116
+ @contents.each &:show
117
+ self
118
+ end
119
+
120
+ def hide
121
+ @contents.each &:hide
122
+ self
123
+ end
105
124
  end
106
125
 
107
126
  class Stack < Slot; end
data/lib/shoes/style.rb CHANGED
@@ -2,17 +2,17 @@ class Shoes
2
2
  class App
3
3
  def style klass, args={}
4
4
  if klass == Shoes::Link
5
- @link_style = LINK_DEFAULT
6
- @link_style.sub!('single', 'none') if args[:underline] == false
7
- @link_style.sub!("foreground='#06E'", "foreground='#{args[:stroke]}'") if args[:stroke]
8
- @link_style.sub!('>', " background='#{args[:fill]}'>") if args[:fill]
9
- @link_style.sub!('normal', "#{args[:weight]}") if args[:weight]
5
+ @link_style = LINK_DEFAULT
6
+ @link_style.sub!('single', 'none') if args[:underline] == false
7
+ @link_style.sub!("foreground='#06E'", "foreground='#{args[:stroke]}'") if args[:stroke]
8
+ @link_style.sub!('>', " background='#{args[:fill]}'>") if args[:fill]
9
+ @link_style.sub!('normal', "#{args[:weight]}") if args[:weight]
10
10
  elsif klass == Shoes::LinkHover
11
- @linkhover_style = LINKHOVER_DEFAULT
12
- @linkhover_style.sub!('single', 'none') if args[:underline] == false
13
- @linkhover_style.sub!("foreground='#039'", "foreground='#{args[:stroke]}'") if args[:stroke]
14
- @linkhover_style.sub!('>', " background='#{args[:fill]}'>") if args[:fill]
15
- @linkhover_style.sub!('normal', "#{args[:weight]}") if args[:weight]
11
+ @linkhover_style = LINKHOVER_DEFAULT
12
+ @linkhover_style.sub!('single', 'none') if args[:underline] == false
13
+ @linkhover_style.sub!("foreground='#039'", "foreground='#{args[:stroke]}'") if args[:stroke]
14
+ @linkhover_style.sub!('>', " background='#{args[:fill]}'>") if args[:fill]
15
+ @linkhover_style.sub!('normal', "#{args[:weight]}") if args[:weight]
16
16
  end
17
17
  end
18
18
  end
@@ -55,6 +55,7 @@ class Shoes
55
55
  tb = @app.send(m, *args)
56
56
  @real, @height = tb.real, tb.height
57
57
  @args[:markup], @args[:size], @args[:font], @args[:align] = tb.markup, tb.size, tb.font, tb.align
58
+ @markup, @size, @font, @align = @args[:markup], @args[:size], @args[:font], @args[:align]
58
59
  end
59
60
  end
60
61
 
data/samples/sample44.rb CHANGED
@@ -33,7 +33,7 @@ Shoes.app height: 260, width: 250 do
33
33
  _y = radius_local * Math.cos( time * Math::PI / unit )
34
34
  stroke color
35
35
  strokewidth sw
36
- line(@centerx, @centery, @centerx + _x, @centery - _y)
36
+ line @centerx, @centery, @centerx + _x, @centery - _y, hidden: true
37
37
  end
38
38
 
39
39
  @radius, @centerx, @centery = 90, 126, 140
@@ -43,9 +43,9 @@ Shoes.app height: 260, width: 250 do
43
43
  @msg = para '', margin: 4, align: 'center'
44
44
  end
45
45
  hour, min, sec = [], [], []
46
- 12.times{|i| 5.times{|j| hour << clock_hand(i+(j/5.0), 8, 6).hide}}
47
- 60.times{|i| 4.times{|j| min << clock_hand(i+(j/4.0), 5).hide}}
48
- 60.times{|i| 8.times{|j| sec << clock_hand(i+(j/8.0), 2, 30, red).hide}}
46
+ 12.times{|i| 5.times{|j| hour << clock_hand(i+(j/5.0), 8, 6)}}
47
+ 60.times{|i| 4.times{|j| min << clock_hand(i+(j/4.0), 5)}}
48
+ 60.times{|i| 8.times{|j| sec << clock_hand(i+(j/8.0), 2, 30, red)}}
49
49
 
50
50
  animate 8 do |i|
51
51
  t = Time.new
@@ -0,0 +1,30 @@
1
+ require '../lib/green_shoes'
2
+
3
+ # The same as gallery2 : http://shoes-tutorial-note.heroku.com/html/01110_Fancy_Gallery_1-5.html
4
+ # But revised for Green Shoes
5
+
6
+ Shoes.app width: 200, height: 200 do
7
+ background mintcream
8
+ flow margin: 5 do
9
+ flow height: 190 do
10
+ background './shell.png', curve: 5
11
+ @line = para ' '
12
+ @line.cursor = -1
13
+ end
14
+ end
15
+
16
+ keypress do |k|
17
+ #p k
18
+ msg = case k
19
+ when 'BackSpace'; @line.text[0..-2]
20
+ when 'Return'; @line.text + "\n"
21
+ when 'space'; @line.text + ' '
22
+ when 'exclam'; @line.text + '!'
23
+ when 'period'; @line.text + '.'
24
+ else
25
+ k.length == 1 ? @line.text + k : nil
26
+ end
27
+ (@line.text = strong fg msg, white) if msg
28
+ flush
29
+ end
30
+ end
data/samples/shell.png ADDED
Binary file
Binary file
data/static/manual-en.txt CHANGED
@@ -1335,10 +1335,25 @@ being 100%.)
1335
1335
 
1336
1336
  For: ''all slots and elements''.
1337
1337
 
1338
- Hides or shows this object. Any object with `:hidden => true` are not
1338
+ Hides or shows this object. Any object with `hidden: true` are not
1339
1339
  displayed on the screen. Neither are its children.
1340
1340
 
1341
- '''Note:''' Green Shoes doesn't support `:hidden` style.
1341
+ {{{
1342
+ Shoes.app do
1343
+ slot = stack hidden: true do
1344
+ title 'hello'
1345
+ flow do
1346
+ image File.join DIR, '../samples/loogink.png'
1347
+ end
1348
+ para link('Go go!'){alert 'hi'}
1349
+ end
1350
+ timer(2){slot.show}
1351
+ timer(5){slot.hide}
1352
+ end
1353
+ }}}
1354
+
1355
+ '''Note:''' Green Shoes supports `:hidden` style for only slots, shapes, textblocks
1356
+ and images so far.
1342
1357
 
1343
1358
  === :inner » a number ===
1344
1359
 
@@ -3347,7 +3362,8 @@ To create an image, use the `image` method in a slot:
3347
3362
  #!ruby
3348
3363
  Shoes.app do
3349
3364
  para "Nice, nice, very nice. Busy, busy, busy."
3350
- image "../static/shoes-manual-apps.png"
3365
+ image File.join DIR,
3366
+ "../static/shoes-manual-apps.png"
3351
3367
  end
3352
3368
  }}}
3353
3369
 
@@ -3676,6 +3692,38 @@ TextBlock's contents.
3676
3692
 
3677
3693
  '''Note:''' Green Shoes doesn't support `to_s` method.
3678
3694
 
3695
+ === cursor() » an index ===
3696
+
3697
+ Return a text cursor position. That is an index of the text which is a string
3698
+ of all of the characters in this text box.
3699
+
3700
+ === cursor = an index or nil ===
3701
+
3702
+ Shows or hides the text cursor.
3703
+ Using `cursor = 3`, for instance, shows the text cursor at index 3 from the front.
3704
+ Using `cursor = -1` shows the text cursor at the end of the text.
3705
+ Using `cursor = nil` hides the text cursor.
3706
+
3707
+ {{{
3708
+ Shoes.app do
3709
+ msg = para 'hello ' * 20
3710
+ msg.cursor = -1
3711
+ keypress do |k|
3712
+ n = case k
3713
+ when 'Left'; -1
3714
+ when 'Right'; 1
3715
+ else
3716
+ next
3717
+ end
3718
+ n += msg.cursor
3719
+ len = msg.text.length
3720
+ n = len unless n > -1
3721
+ msg.cursor = n % (len+1)
3722
+ flush
3723
+ end
3724
+ end
3725
+ }}}
3726
+
3679
3727
  == Timers ==
3680
3728
 
3681
3729
  Green Shoes contains three timers: the animate, every and
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 201
7
+ - 207
8
8
  - 0
9
- version: 0.201.0
9
+ version: 0.207.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - ashbb
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-04 00:00:00 +09:00
17
+ date: 2011-04-16 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -195,11 +195,13 @@ files:
195
195
  - samples/sample49.rb
196
196
  - samples/sample5.rb
197
197
  - samples/sample50.rb
198
+ - samples/sample51.rb
198
199
  - samples/sample6.rb
199
200
  - samples/sample7.rb
200
201
  - samples/sample8.rb
201
202
  - samples/sample9.rb
202
203
  - samples/sample99.rb
204
+ - samples/shell.png
203
205
  - samples/splash-hand.png
204
206
  - snapshots/helloworld.png
205
207
  - snapshots/mini-hh.png
@@ -252,6 +254,7 @@ files:
252
254
  - snapshots/sample49.png
253
255
  - snapshots/sample5.png
254
256
  - snapshots/sample50.png
257
+ - snapshots/sample51.png
255
258
  - snapshots/sample6.png
256
259
  - snapshots/sample7.png
257
260
  - snapshots/sample8.png