purple_shoes 0.0.101 → 0.0.115

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -49,6 +49,8 @@ jruby -J-XstartOnFirstThread --1.9 sample2.rb
49
49
  Open the built-in manual
50
50
  -----------------------
51
51
 
52
+ **Note**: Need to install Hpricot: `jruby --1.9 -S gem install hpricot`
53
+
52
54
  ```
53
55
  jruby --1.9 -S pshoes -m
54
56
  ```
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.101
1
+ 0.0.115
data/lib/purple_shoes.rb CHANGED
@@ -9,6 +9,7 @@ Types = module Shoes; self end
9
9
 
10
10
  module Shoes
11
11
  DIR = Pathname.new(__FILE__).realpath.dirname.to_s
12
+ FONTS = []
12
13
  SHOES_VERSION = IO.read(File.join(DIR, '../VERSION')).chomp
13
14
  BASIC_ATTRIBUTES_DEFAULT = {left: 0, top: 0, width: 0, height: 0, angle: 0, curve: 0}
14
15
  SLOT_ATTRIBUTES_DEFAULT = {left: nil, top: nil, width: 1.0, height: 0}
data/lib/shoes/app.rb CHANGED
@@ -19,7 +19,15 @@ class Shoes
19
19
 
20
20
  def visit url
21
21
  if url =~ /^(http|https):\/\//
22
- system "start #{url}"
22
+ require 'rbconfig'
23
+ Thread.new do
24
+ case RbConfig::CONFIG['host_os']
25
+ when /mswin/; system "start #{url}"
26
+ when /linux/; system("/etc/alternatives/x-www-browser #{url} &")
27
+ else
28
+ puts "Sorry, your platform [#{RUBY_PLATFORM}] is not supported..."
29
+ end
30
+ end
23
31
  else
24
32
  $urls.each{|k, v| clear{init_app_vars; @location = url; v.call self, $1} if k =~ url}
25
33
  end
@@ -87,7 +95,7 @@ class Shoes
87
95
  instance_eval do
88
96
  define_method :paintControl do |e|
89
97
  gc = e.gc
90
- s.dps << gc
98
+ Shoes.dps_reset s.dps, gc
91
99
  tl.setText s.markup
92
100
  s.app.set_styles s, args
93
101
  tl.setWidth s.width if s.width > 0
@@ -125,7 +133,7 @@ class Shoes
125
133
  instance_eval do
126
134
  define_method :paintControl do |e|
127
135
  gc = e.gc
128
- s.dps << gc
136
+ Shoes.dps_reset s.dps, gc
129
137
  unless s.hided
130
138
  Shoes.set_rotate e.gc, *s.rotate do
131
139
  if s.initials[:width].zero? and s.initials[:height].zero?
@@ -273,7 +281,7 @@ class Shoes
273
281
  define_method :paintControl do |e|
274
282
  unless s.hided
275
283
  gc = e.gc
276
- s.dps << gc
284
+ Shoes.dps_reset s.dps, gc
277
285
  gc.setAntialias Swt::SWT::ON
278
286
  sw, pat1, pat2 = s.strokewidth, s.stroke, s.fill
279
287
  Shoes.set_rotate gc, *s.rotate do
@@ -324,7 +332,7 @@ class Shoes
324
332
  define_method :paintControl do |e|
325
333
  unless s.hided
326
334
  gc = e.gc
327
- s.dps << gc
335
+ Shoes.dps_reset s.dps, gc
328
336
  gc.setAntialias Swt::SWT::ON
329
337
  sw, pat1, pat2 = s.strokewidth, s.stroke, s.fill
330
338
  Shoes.set_rotate gc, *s.rotate do
@@ -374,7 +382,7 @@ class Shoes
374
382
  define_method :paintControl do |e|
375
383
  unless s.hided
376
384
  gc = e.gc
377
- s.dps << gc
385
+ Shoes.dps_reset s.dps, gc
378
386
  gc.setAntialias Swt::SWT::ON
379
387
  sw, pat1, pat2 = s.strokewidth, s.stroke, s.fill
380
388
  Shoes.set_rotate gc, *s.rotate do
@@ -442,7 +450,7 @@ class Shoes
442
450
  define_method :paintControl do |e|
443
451
  unless s.hided
444
452
  gc = e.gc
445
- s.dps << gc
453
+ Shoes.dps_reset s.dps, gc
446
454
  gc.setAntialias Swt::SWT::ON
447
455
  sw, pat = s.strokewidth, s.stroke
448
456
  Shoes.set_rotate gc, *s.rotate do
@@ -485,7 +493,7 @@ class Shoes
485
493
  define_method :paintControl do |e|
486
494
  unless s.hided
487
495
  gc = e.gc
488
- s.dps << gc
496
+ Shoes.dps_reset s.dps, gc
489
497
  gc.setAntialias Swt::SWT::ON
490
498
  sw, pat1, pat2 = s.strokewidth, s.stroke, s.fill
491
499
  outer, inner, points, left, top = s.outer, s.inner, s.points, s.left, s.top
@@ -588,7 +596,7 @@ class Shoes
588
596
  define_method :paintControl do |e|
589
597
  unless s.hided
590
598
  gc = e.gc
591
- s.dps << gc
599
+ Shoes.dps_reset s.dps, gc
592
600
  gc.setAntialias Swt::SWT::ON
593
601
  Shoes.set_pattern s, gc, pat
594
602
  gc.fillRoundRectangle s.left, s.top, s.width, s.height, s.curve*2, s.curve*2
@@ -619,7 +627,7 @@ class Shoes
619
627
  define_method :paintControl do |e|
620
628
  unless s.hided
621
629
  gc = e.gc
622
- s.dps << gc
630
+ Shoes.dps_reset s.dps, gc
623
631
  gc.setAntialias Swt::SWT::ON
624
632
  Shoes.set_pattern s, gc, pat, :Foreground
625
633
  if sw > 0
@@ -669,6 +677,10 @@ class Shoes
669
677
  shell.getVerticalBar.getMaximum - 10
670
678
  end
671
679
 
680
+ def close
681
+ @shell.close
682
+ end
683
+
672
684
  def flush
673
685
  unless @cs.isDisposed
674
686
  Shoes.call_back_procs self
@@ -684,5 +696,16 @@ class Shoes
684
696
  @cs.redraw unless @cs.isDisposed
685
697
  end
686
698
  end
699
+
700
+ [:append, :prepend].each do |m|
701
+ define_method m do |*args, &blk|
702
+ top_slot.send m, *args, &blk
703
+ end
704
+ end
705
+
706
+ def gray *attrs
707
+ g, a = attrs
708
+ g ? rgb(g*255, g*255, g*255, a) : rgb(128, 128, 128)[0..2]
709
+ end
687
710
  end
688
711
  end
data/lib/shoes/basic.rb CHANGED
@@ -155,7 +155,17 @@ class Shoes
155
155
  class Rect < ShapeBase; end
156
156
  class Oval < ShapeBase; end
157
157
  class Line < ShapeBase; end
158
- class Star < ShapeBase; end
158
+ class Star < ShapeBase
159
+ def move3 x, y
160
+ unless @app.cs.isDisposed
161
+ w, h = @width + 1, @height + 1
162
+ hw, hh = w / 2, h / 2
163
+ @app.cs.redraw @left - hw, @top - hh, w, h, false
164
+ @app.cs.redraw x-hw, y - hh, w, h, false
165
+ end
166
+ @left, @top = x, y
167
+ end
168
+ end
159
169
  class Shape < ShapeBase
160
170
  def move_to x, y
161
171
  real.moveTo x + left, y + top
data/lib/shoes/help.rb CHANGED
@@ -120,6 +120,7 @@ class Manual < Shoes
120
120
  $1.split(/^ \* /).each do |txt|
121
121
  image File.join(DIR, '../static/purple_shoes-icon.png'), width: 20, height: 20
122
122
  flow(width: 510){show_paragraph txt, intro, i, term}
123
+ para NL
123
124
  end
124
125
  else
125
126
  show_paragraph text, intro, i, term
@@ -129,9 +130,7 @@ class Manual < Shoes
129
130
  end
130
131
 
131
132
  def show_paragraph txt, intro, i, term = nil
132
- txt = txt.gsub("\n", ' ').gsub(/`(.+?)`/m){fg code($1), rgb(255, 30, 0)}.
133
- gsub(/\^(.+?)\^/m, '\1').gsub(/'''(.+?)'''/m){strong($1)}.gsub(/''(.+?)''/m){em($1)}.
134
- gsub(/\[\[BR\]\]/i, "\n")
133
+ txt = txt.gsub("\n", ' ').gsub(/\^(.+?)\^/m, '\1').gsub(/\[\[BR\]\]/i, "\n")
135
134
  txts = txt.split(/(\[\[\S+?\]\])/m).map{|s| s.split(/(\[\[\S+? .+?\]\])/m)}.flatten
136
135
  case txts[0]
137
136
  when /\A==== (.+) ====/; caption *marker($1, term), size: 24
@@ -141,7 +140,7 @@ class Manual < Shoes
141
140
  when /\A\{COLORS\}/; flow{color_page}
142
141
  when /\A\{SAMPLES\}/; flow{sample_page}
143
142
  else
144
- para *mk_links(txts, term).flatten, NL, (intro and i.zero?) ? {size: 16} : ''
143
+ para *mk_deco(mk_links(txts, term).flatten), NL, (intro and i.zero?) ? {size: 16} : ''
145
144
  txt.gsub IMAGE_RE do
146
145
  para NL
147
146
  image File.join(DIR, "../static/#{$3}"), eval("{#{$2 or "margin_left: 50"}}")
@@ -457,6 +456,27 @@ class Manual < Shoes
457
456
  [txt]
458
457
  end
459
458
  end
459
+
460
+ def mk_deco datas
461
+ datas = decoration(datas, /`(.+?)`/m){|s| fg code(s), rgb(255, 30, 0)}
462
+ datas = decoration(datas, /'''(.+?)'''/m){|s| strong s}
463
+ decoration(datas, /''(.+?)''/m){|s| em s}
464
+ end
465
+
466
+ def decoration datas, re, &blk
467
+ datas.map do |data|
468
+ if data.is_a? String
469
+ txts = [data]
470
+ data.match re do |md|
471
+ n = data.index md[0]
472
+ txts = [data[0...n], blk[md[1]], decoration([data[n+md[0].length..-1]], re, &blk)]
473
+ end
474
+ txts
475
+ else
476
+ data
477
+ end
478
+ end.flatten
479
+ end
460
480
 
461
481
  IMAGE_RE = /\!(\{([^}\n]+)\})?([^!\n]+\.\w+)\!/
462
482
  CODE_RE = /\{{3}(?:\s*\#![^\n]+)?(.+?)\}{3}/m
@@ -292,4 +292,10 @@ class Shoes
292
292
  tr.translate -left, -top
293
293
  gc.setTransform tr
294
294
  end
295
+
296
+ def self.dps_reset dps, gc
297
+ dps.each{|dp| dp.dispose if dp}
298
+ dps.clear
299
+ dps << gc
300
+ end
295
301
  end
data/lib/shoes/main.rb CHANGED
@@ -14,6 +14,7 @@ class Shoes
14
14
  args[:top] ||= 0
15
15
 
16
16
  @display ||= Swt::Display.new
17
+ (@display.getFontList(nil, true).each{|f| FONTS << f.getName}; FONTS.uniq!) if FONTS.empty?
17
18
  shell = Swt::Shell.new @display, Swt::SWT::SHELL_TRIM | Swt::SWT::V_SCROLL
18
19
  shell.setSize args[:width] + 16, args[:height] + 38
19
20
  shell.setText args[:title]
@@ -51,6 +52,7 @@ class Shoes
51
52
  shell.addControlListener cl
52
53
 
53
54
  vb = shell.getVerticalBar
55
+ vb.setIncrement 10
54
56
  vb.setVisible false
55
57
  ln = Swt::SelectionListener.new
56
58
  class << ln; self end.
data/lib/shoes/ruby.rb CHANGED
@@ -15,6 +15,13 @@ class Object
15
15
  mb.open
16
16
  end
17
17
 
18
+ def confirm msg
19
+ shell = Swt::Shell.new Shoes.display
20
+ mb = Swt::MessageBox.new shell, Swt::SWT::YES | Swt::SWT::NO | Swt::SWT::ICON_QUESTION
21
+ mb.setMessage msg.to_s
22
+ mb.open == Swt::SWT::YES ? true : false
23
+ end
24
+
18
25
  def ask_open_file
19
26
  dialog_chooser 'Open File...'
20
27
  end
@@ -37,6 +44,18 @@ class Object
37
44
  fd.setText title
38
45
  fd.open
39
46
  end
47
+
48
+ def ask_color title = 'Pick a color...'
49
+ shell = Swt::Shell.new Shoes.display
50
+ cd = Swt::ColorDialog.new shell
51
+ cd.setText title
52
+ color = cd.open
53
+ color ? [color.red, color.green, color.blue] : [255, 255, 255]
54
+ end
55
+
56
+ def ask msg, args={}
57
+ AskDialog.new(Swt::Shell.new, msg, args).open
58
+ end
40
59
  end
41
60
 
42
61
  class Array
@@ -59,3 +78,40 @@ class Array
59
78
  r + g + b > 0xAA * 3
60
79
  end
61
80
  end
81
+
82
+ class AskDialog < Swt::Dialog
83
+ def initialize shell, msg, args
84
+ @shell, @msg, @args= shell, msg, args
85
+ super shell
86
+ end
87
+
88
+ def open
89
+ display = getParent.getDisplay
90
+ icon = Swt::Image.new display, File.join(DIR, '../static/purple_shoes-icon.png')
91
+ @shell.setImage icon
92
+ @shell.setSize 300, 125
93
+ @shell.setText 'Purple Shoes asks:'
94
+ label = Swt::Label.new @shell, Swt::SWT::NONE
95
+ label.setText @msg
96
+ label.setLocation 10, 10
97
+ label.pack
98
+ text = Swt::Text.new @shell, Swt::SWT::BORDER | Swt::SWT::SINGLE
99
+ text.setLocation 10, 30
100
+ text.setSize 270, 20
101
+ b = Swt::Button.new @shell, Swt::SWT::NULL
102
+ b.setText 'OK'
103
+ b.setLocation 180, 55
104
+ b.pack
105
+ b.addSelectionListener{|e| @ret = text.getText; @shell.close}
106
+ b = Swt::Button.new @shell, Swt::SWT::NULL
107
+ b.setText 'CANCEL'
108
+ b.setLocation 222, 55
109
+ b.pack
110
+ b.addSelectionListener{|e| @ret = nil; @shell.close}
111
+ @shell.open
112
+ while !@shell.isDisposed do
113
+ display.sleep unless display.readAndDispatch
114
+ end
115
+ @ret
116
+ end
117
+ end
data/lib/shoes/slot.rb CHANGED
@@ -77,6 +77,19 @@ class Shoes
77
77
  end
78
78
  @app.flush
79
79
  end
80
+
81
+ def append &blk
82
+ prepend contents.length, &blk
83
+ end
84
+
85
+ def prepend n = 0
86
+ self.contents, tmp = contents[0...n], contents[n..-1]
87
+ cslot, @app.cslot = @app.cslot, self
88
+ yield
89
+ self.contents += tmp
90
+ @app.cslot = cslot
91
+ Shoes.call_back_procs @app
92
+ end
80
93
 
81
94
  def show
82
95
  @hided = true
Binary file
Binary file
Binary file
data/static/manual-en.txt CHANGED
@@ -38,7 +38,7 @@ just check out some screenshots, to give you an idea of what you can do.
38
38
 
39
39
  ==== Mac OS X ====
40
40
 
41
- Purple Shoes is confirmed on Apple Mac OSX10.5 PPC via X11.
41
+ Purple Shoes is confirmed on Apple Mac OS X.
42
42
  !{margin_left: 100}../snapshots/sample3-osx.png!
43
43
 
44
44
  This is the `sample3.rb` on Mac OS X.
@@ -48,19 +48,16 @@ All circles are drawn randomly. You can draw and animate shapes in Purple Shoes.
48
48
  ==== Windows ====
49
49
 
50
50
  Purple Shoes is confirmed to run on '''Microsoft Windows XP''' and '''Windows 7'''.
51
- !{margin_left: 0}../snapshots/sample33.png!
51
+ !{margin_left: 100}../snapshots/sample21.png!
52
52
 
53
- Above is pictured the `sample33.rb` running on Windows 7. Purple Shoes
54
- has three extended libraries for chipmunk physics, bloopsaphone and 3D texture
55
- mapping. First two are binary libraries, so far work on Windows only.
53
+ Above is pictured the `sample21.rb` running on Windows 7.
56
54
 
57
55
  ==== Linux ====
58
56
 
59
- Here's a screenshot of the `sample44.rb` running on '''Ubuntu
60
- on VirtualBox for Windows'''. !{margin_left: 130}../snapshots/sample44-linux.png!
57
+ Here's a screenshot of the `sample44.rb` running on '''Ubuntu'''. !{margin_left: 130}../snapshots/sample44-linux.png!
61
58
 
62
59
  This example is also draws ovals and lines to build the clock, which is animated to
63
- show or hide itself several times each second.
60
+ rotate clock hands several times each second.
64
61
 
65
62
  Notice the text on the top of the app, showing the current time. Purple Shoes has the
66
63
  skills to layout words using any color, bold, italics, underlines, and supports
@@ -71,22 +68,22 @@ loading fonts.
71
68
  Okay, on to installing Purple Shoes. I'm sure you're wondering: do I need to install
72
69
  Ruby? Do I need to unzip anything? What commands do I need to type?
73
70
 
74
- Yeah. You need to install Ruby and Gems. But, no need to worry about it.
71
+ Yeah. You need to install JRuby and Gems. But, no need to worry about it.
75
72
  We'll talk through all the steps.
76
73
 
77
74
  ==== Step 1: Installing Purple Shoes ====
78
75
 
79
- At first, install Ruby. On '''Windows''',
80
- visit the site of [[http://rubyinstaller.org/ RubyInstaller for Windows]] to
81
- download the latest '''RubyInstaller 1.9.2 or 1.9.3'''.
76
+ At first, install JRuby. On '''Windows''',
77
+ visit the site of [[http://jruby.org/download JRuby Downloads]] to
78
+ download the latest '''JRuby 1.6.7 Windows Executable'''.
82
79
 
83
80
  Then just do the following one line.
84
81
 
85
- * gem install green_shoes
82
+ * jruby --1.9 -S gem install purple_shoes
86
83
 
87
84
  That's all. Too easy?
88
85
 
89
- '''Note:''' green_shoes gem is on [[http://rubygems.org/gems/green_shoes RubyGems.org]].
86
+ '''Note:''' purple_shoes gem is on [[http://rubygems.org/gems/purple_shoes RubyGems.org]].
90
87
  If you get some errors of rdoc, try to add `--no-ri --no-rdoc` option.
91
88
 
92
89
  ==== Step 2: Start a New Text File ====
@@ -102,7 +99,7 @@ Here are a few ways to create a blank text file:
102
99
  Now, in your blank window, type in the following:
103
100
 
104
101
  {{{
105
- require 'green_shoes'
102
+ require 'purple_shoes'
106
103
  Shoes.app do
107
104
  para "Welcome to Shoes"
108
105
  end
@@ -114,7 +111,7 @@ Save to your desktop as `welcome.rb`.
114
111
 
115
112
  To run your program, just open console window and run the following.
116
113
 
117
- * ruby welcome.rb !man-editor-osx.png!
114
+ * jruby --1.9 welcome.rb !man-editor-osx.png!
118
115
 
119
116
  So, not much of a program yet. But it's something! You've got the knack of it, at least!
120
117
 
@@ -129,10 +126,9 @@ Still, Shoes does have a few widgets like buttons and edit boxes. And many
129
126
  missing elements (like tabbed controls or toolbars) can be simulated with
130
127
  images.
131
128
 
132
- Shoes is written in part thanks to a very good art engine called Cairo, which
133
- is used for drawing with shapes and colors. Also thanks to an awesome text
134
- lay out engine called Pango. In this way, Shoes is inspired by
135
- NodeBox and Processing, two very good languages for drawing animated graphics.
129
+ Shoes is written in part thanks to a very good graphical widget toolkit called '''SWT'''.
130
+ In this way, Shoes is inspired by NodeBox and Processing, two very good languages
131
+ for drawing animated graphics.
136
132
 
137
133
  == The Rules of Purple Shoes ==
138
134
 
@@ -186,7 +182,7 @@ block changes `self`.
186
182
 
187
183
  The other block is the `stack` block. That block does NOT change self.
188
184
 
189
- '''For what reason does the `app` block change self?''' Let's start by
185
+ '''For what reason does the''' `app` '''block change self?''' Let's start by
190
186
  spelling out that last example completely.
191
187
 
192
188
  {{{
@@ -217,7 +213,7 @@ All of the `self`s in the above example are the App object. Purple Shoes uses R
217
213
 
218
214
  These instance variables will all end up inside the App object.
219
215
 
220
- '''Whenever you create a new Shoes.app window, `self` is also changed.'''
216
+ '''Whenever you create a new Shoes.app window,''' `self` '''is also changed.'''
221
217
 
222
218
  {{{
223
219
  Shoes.app title: "MAIN" do
@@ -311,7 +307,7 @@ As you can imagine, the `app` object changes `self` to the App object.
311
307
 
312
308
  So the rules here are:
313
309
 
314
- 1. '''Methods named "app" or which create new windows alter `self` to the App
310
+ 1. '''Methods named "app" or which create new windows alter''' `self` '''to the App
315
311
  object.'''[[BR]](This is true for both Shoes.app and Slot.app, as well as
316
312
  [[Element.window]] and [[Element.dialog]].)[[BR]]
317
313
  2. '''Blocks attached to stacks, flows or any manipulation method (such as
@@ -352,6 +348,7 @@ One difference between normal slots and nested window slots is that the latter
352
348
  can have scrollbars.
353
349
 
354
350
  {{{
351
+ # Not yet available
355
352
  Shoes.app do
356
353
  stack width: 200, height: 200, scroll: true do
357
354
  background "#DFA"
@@ -367,8 +364,8 @@ These nested windows require more memory. They tax the application a bit more.
367
364
  So if you're experiencing some slowness with hundreds of fixed-height slots,
368
365
  try a different approach.
369
366
 
370
- '''Note:''' Fixed height magic (the slot becomes a nested window) is implemented
371
- in Purple Shoes as a trial so far. Need to add `flush` method.
367
+ '''Note:''' Fixed height magic (the slot becomes a nested window) is not implemented
368
+ in Purple Shoes.
372
369
 
373
370
  {{{
374
371
  Shoes.app do
@@ -628,19 +625,20 @@ are trying to sniff out what release of Purple Shoes is running.
628
625
 
629
626
  '''FONTS''' is a complete list of fonts available to the app.
630
627
 
631
- '''VERSION''' is a Purple Shoes version.
628
+ '''SHOES_VERSION''' is a Purple Shoes version.
632
629
 
633
630
  {{{
634
631
  Shoes.app do
635
- para VERSION
632
+ para SHOES_VERSION
636
633
  para fg(DIR, red)
637
- image File.join(DIR, '../static/gshoes-icon.png')
634
+ image File.join(DIR,
635
+ '../static/purple_shoes-icon.png')
638
636
  para fg(FONTS.join(', '), green)
639
637
  para COLORS.map{|k, v| [k, v]}
640
638
  end
641
639
  }}}
642
640
 
643
- === alert(message: a string, :block => true or false, title: a string) » nil ===
641
+ === alert(message: a string) » nil ===
644
642
 
645
643
  Pops up a window containing a short message.
646
644
 
@@ -653,9 +651,6 @@ Please use alerts sparingly, as they are incredibly annoying! If you are using
653
651
  alerts to show messages to help you debug your program, try checking out the
654
652
  standard Ruby method `puts` or `p` methods.
655
653
 
656
- If you want to make alert() thread safe, i.e. unblock main thread, use `:block => false` option.
657
- If you want to change window title, use `:title => a string` option.
658
-
659
654
  === ask(message: a string) » a string ===
660
655
 
661
656
  Pops up a window and asks a question. For example, you may want to ask someone
@@ -757,9 +752,6 @@ you'll get back a `true`. If not, you'll get back `false`.
757
752
 
758
753
  Stops your program. Call this anytime you want to suddenly call it quits.
759
754
 
760
- '''PLEASE NOTE:''' If you need to use Ruby's own `exit` method (like in a
761
- forked Ruby process,) call `Kernel.exit`.
762
-
763
755
  === font(message: a string) » an array of font family names ===
764
756
 
765
757
  Loads a TrueType (or other type of font) from a file. While TrueType is
@@ -841,7 +833,7 @@ When passing in a whole number, use values from 0 to 255.
841
833
  blueviolet = rgb(138, 43, 226, 0.5)
842
834
  darkgreen = rgb(0, 100, 0, 0.5)
843
835
  oval 100, 100, 100,
844
- fill: [blueviolet, darkgreen].sample(1)
836
+ fill: [blueviolet, darkgreen].sample
845
837
  end
846
838
  }}}
847
839
 
@@ -852,7 +844,7 @@ Or, use a decimal number from 0.0 to 1.0.
852
844
  blueviolet = rgb(0.54, 0.17, 0.89)
853
845
  darkgreen = rgb(0, 0.4, 0)
854
846
  oval 100, 100, 100,
855
- fill: [blueviolet, darkgreen].sample(1)
847
+ fill: [blueviolet, darkgreen].sample
856
848
  end
857
849
  }}}
858
850
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purple_shoes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.101
4
+ version: 0.0.115
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-24 00:00:00.000000000 Z
12
+ date: 2012-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: swt
16
- requirement: &18043236 !ruby/object:Gem::Requirement
16
+ requirement: &18076020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,8 +21,8 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *18043236
25
- description: Purple Shoes is one of colorful Shoes, written in JRuby ans SWT.
24
+ version_requirements: *18076020
25
+ description: Purple Shoes is one of colorful Shoes, written in JRuby and SWT.
26
26
  email: ashbbb@gmail.com
27
27
  executables:
28
28
  - pshoes