purple_shoes 0.0.101

Sign up to get free protection for your applications and to get access to all the features.
Files changed (215) hide show
  1. data/README.md +56 -0
  2. data/VERSION +1 -0
  3. data/bin/pshoes +23 -0
  4. data/bin/pshoes.bat +2 -0
  5. data/lib/plugins/video.rb +88 -0
  6. data/lib/purple_shoes.rb +51 -0
  7. data/lib/shoes/anim.rb +47 -0
  8. data/lib/shoes/app.rb +688 -0
  9. data/lib/shoes/basic.rb +254 -0
  10. data/lib/shoes/colors.rb +149 -0
  11. data/lib/shoes/download.rb +26 -0
  12. data/lib/shoes/help.rb +473 -0
  13. data/lib/shoes/helper_methods.rb +295 -0
  14. data/lib/shoes/main.rb +96 -0
  15. data/lib/shoes/manual.rb +6 -0
  16. data/lib/shoes/ruby.rb +61 -0
  17. data/lib/shoes/slot.rb +104 -0
  18. data/lib/shoes/style.rb +41 -0
  19. data/lib/shoes/text.rb +46 -0
  20. data/lib/shoes/url.rb +14 -0
  21. data/lib/shoes/widget.rb +23 -0
  22. data/samples/class-book.yaml +387 -0
  23. data/samples/cy.png +0 -0
  24. data/samples/loogink.png +0 -0
  25. data/samples/potato_chopping/1258_s001.gif +0 -0
  26. data/samples/potato_chopping/1258_s002.gif +0 -0
  27. data/samples/potato_chopping/1258_s003.gif +0 -0
  28. data/samples/potato_chopping/1258_s004.gif +0 -0
  29. data/samples/potato_chopping/1258_s005.gif +0 -0
  30. data/samples/potato_chopping/1258_s006.gif +0 -0
  31. data/samples/potato_chopping/1258_s007.gif +0 -0
  32. data/samples/potato_chopping/1258_s008.gif +0 -0
  33. data/samples/potato_chopping/1258_s009.gif +0 -0
  34. data/samples/potato_chopping/1258_s010.gif +0 -0
  35. data/samples/potato_chopping/1258_s011.gif +0 -0
  36. data/samples/potato_chopping/1258_s012.gif +0 -0
  37. data/samples/potato_chopping/1258_s013.gif +0 -0
  38. data/samples/potato_chopping/1258_s014.gif +0 -0
  39. data/samples/potato_chopping/1258_s015.gif +0 -0
  40. data/samples/potato_chopping/1258_s016.gif +0 -0
  41. data/samples/potato_chopping/1258_s017.gif +0 -0
  42. data/samples/potato_chopping/1258_s018.gif +0 -0
  43. data/samples/potato_chopping/1258_s019.gif +0 -0
  44. data/samples/potato_chopping/1258_s020.gif +0 -0
  45. data/samples/potato_chopping/1258_s021.gif +0 -0
  46. data/samples/potato_chopping/1258_s022.gif +0 -0
  47. data/samples/potato_chopping/1258_s023.gif +0 -0
  48. data/samples/potato_chopping/1258_s024.gif +0 -0
  49. data/samples/potato_chopping/1258_s025.gif +0 -0
  50. data/samples/potato_chopping/1258_s026.gif +0 -0
  51. data/samples/potato_chopping/1258_s027.gif +0 -0
  52. data/samples/potato_chopping/1258_s028.gif +0 -0
  53. data/samples/potato_chopping/1258_s029.gif +0 -0
  54. data/samples/potato_chopping/1258_s030.gif +0 -0
  55. data/samples/potato_chopping/1258_s031.gif +0 -0
  56. data/samples/potato_chopping/1258_s032.gif +0 -0
  57. data/samples/potato_chopping/1258_s033.gif +0 -0
  58. data/samples/potato_chopping/1258_s034.gif +0 -0
  59. data/samples/potato_chopping/1258_s035.gif +0 -0
  60. data/samples/potato_chopping/1258_s036.gif +0 -0
  61. data/samples/potato_chopping/1258_s037.gif +0 -0
  62. data/samples/potato_chopping/1258_s038.gif +0 -0
  63. data/samples/potato_chopping/1258_s039.gif +0 -0
  64. data/samples/potato_chopping/1258_s040.gif +0 -0
  65. data/samples/potato_chopping/1258_s041.gif +0 -0
  66. data/samples/potato_chopping/1258_s042.gif +0 -0
  67. data/samples/potato_chopping/1258_s043.gif +0 -0
  68. data/samples/potato_chopping/1258_s044.gif +0 -0
  69. data/samples/potato_chopping/1258_s045.gif +0 -0
  70. data/samples/potato_chopping/1258_s046.gif +0 -0
  71. data/samples/potato_chopping/1258_s047.gif +0 -0
  72. data/samples/potato_chopping/1258_s048.gif +0 -0
  73. data/samples/potato_chopping/1258_s049.gif +0 -0
  74. data/samples/potato_chopping/1258_s050.gif +0 -0
  75. data/samples/potato_chopping/1258_s051.gif +0 -0
  76. data/samples/potato_chopping/1258_s052.gif +0 -0
  77. data/samples/potato_chopping/1258_s053.gif +0 -0
  78. data/samples/potato_chopping/1258_s054.gif +0 -0
  79. data/samples/potato_chopping/1258_s055.gif +0 -0
  80. data/samples/potato_chopping/1258_s056.gif +0 -0
  81. data/samples/potato_chopping/1258_s057.gif +0 -0
  82. data/samples/potato_chopping/1258_s058.gif +0 -0
  83. data/samples/potato_chopping/1258_s059.gif +0 -0
  84. data/samples/sample1.rb +30 -0
  85. data/samples/sample10.rb +11 -0
  86. data/samples/sample11.rb +12 -0
  87. data/samples/sample12.rb +22 -0
  88. data/samples/sample13.rb +15 -0
  89. data/samples/sample14.rb +75 -0
  90. data/samples/sample15.rb +20 -0
  91. data/samples/sample16.rb +12 -0
  92. data/samples/sample17.rb +12 -0
  93. data/samples/sample18.rb +24 -0
  94. data/samples/sample19.rb +39 -0
  95. data/samples/sample2.rb +16 -0
  96. data/samples/sample20.rb +26 -0
  97. data/samples/sample21.rb +7 -0
  98. data/samples/sample22.rb +13 -0
  99. data/samples/sample23.rb +10 -0
  100. data/samples/sample24.rb +22 -0
  101. data/samples/sample25.rb +22 -0
  102. data/samples/sample27.rb +19 -0
  103. data/samples/sample28.rb +64 -0
  104. data/samples/sample29.rb +12 -0
  105. data/samples/sample3.rb +10 -0
  106. data/samples/sample30.rb +30 -0
  107. data/samples/sample31.rb +24 -0
  108. data/samples/sample34.rb +29 -0
  109. data/samples/sample35.rb +33 -0
  110. data/samples/sample36.rb +48 -0
  111. data/samples/sample37.rb +10 -0
  112. data/samples/sample38.rb +14 -0
  113. data/samples/sample4.rb +9 -0
  114. data/samples/sample40.rb +19 -0
  115. data/samples/sample42.rb +15 -0
  116. data/samples/sample43.rb +26 -0
  117. data/samples/sample44.rb +57 -0
  118. data/samples/sample45.rb +12 -0
  119. data/samples/sample46.rb +35 -0
  120. data/samples/sample47.rb +20 -0
  121. data/samples/sample48.rb +33 -0
  122. data/samples/sample49.rb +33 -0
  123. data/samples/sample5.rb +8 -0
  124. data/samples/sample50.rb +326 -0
  125. data/samples/sample58.rb +19 -0
  126. data/samples/sample6.rb +11 -0
  127. data/samples/sample7.rb +5 -0
  128. data/samples/sample8.rb +9 -0
  129. data/samples/sample9.rb +12 -0
  130. data/samples/sample99.rb +4 -0
  131. data/samples/sounds/102719__sarge4267__explosion.mp3 +0 -0
  132. data/samples/sounds/145622__andybrannan__train-fog-horn-long-wyomming.aiff +0 -0
  133. data/samples/sounds/46492__phreaksaccount__shields1.ogg +0 -0
  134. data/samples/sounds/61847__simon-rue__boink-v3.wav +0 -0
  135. data/snapshots/sample1.png +0 -0
  136. data/snapshots/sample10.png +0 -0
  137. data/snapshots/sample11.png +0 -0
  138. data/snapshots/sample12.png +0 -0
  139. data/snapshots/sample13.png +0 -0
  140. data/snapshots/sample14.png +0 -0
  141. data/snapshots/sample15.png +0 -0
  142. data/snapshots/sample16.png +0 -0
  143. data/snapshots/sample17.png +0 -0
  144. data/snapshots/sample18.png +0 -0
  145. data/snapshots/sample19.png +0 -0
  146. data/snapshots/sample2.png +0 -0
  147. data/snapshots/sample20.png +0 -0
  148. data/snapshots/sample21.png +0 -0
  149. data/snapshots/sample22.png +0 -0
  150. data/snapshots/sample23.png +0 -0
  151. data/snapshots/sample24.png +0 -0
  152. data/snapshots/sample25.png +0 -0
  153. data/snapshots/sample27.png +0 -0
  154. data/snapshots/sample28.png +0 -0
  155. data/snapshots/sample29.png +0 -0
  156. data/snapshots/sample3-osx.png +0 -0
  157. data/snapshots/sample3.png +0 -0
  158. data/snapshots/sample30.png +0 -0
  159. data/snapshots/sample31.png +0 -0
  160. data/snapshots/sample33.png +0 -0
  161. data/snapshots/sample34.png +0 -0
  162. data/snapshots/sample35.png +0 -0
  163. data/snapshots/sample36.png +0 -0
  164. data/snapshots/sample37.png +0 -0
  165. data/snapshots/sample38.png +0 -0
  166. data/snapshots/sample4.png +0 -0
  167. data/snapshots/sample40.png +0 -0
  168. data/snapshots/sample42.png +0 -0
  169. data/snapshots/sample43.png +0 -0
  170. data/snapshots/sample44-linux.png +0 -0
  171. data/snapshots/sample44.png +0 -0
  172. data/snapshots/sample45.png +0 -0
  173. data/snapshots/sample46.png +0 -0
  174. data/snapshots/sample47.png +0 -0
  175. data/snapshots/sample48.png +0 -0
  176. data/snapshots/sample49.png +0 -0
  177. data/snapshots/sample5.png +0 -0
  178. data/snapshots/sample50.png +0 -0
  179. data/snapshots/sample58.png +0 -0
  180. data/snapshots/sample6.png +0 -0
  181. data/snapshots/sample7.png +0 -0
  182. data/snapshots/sample8.png +0 -0
  183. data/snapshots/sample9.png +0 -0
  184. data/snapshots/sample99.png +0 -0
  185. data/static/code_highlighter.js +188 -0
  186. data/static/code_highlighter_ruby.js +26 -0
  187. data/static/man-editor-notepad.png +0 -0
  188. data/static/man-editor-osx.png +0 -0
  189. data/static/man-ele-background.png +0 -0
  190. data/static/man-ele-border.png +0 -0
  191. data/static/man-ele-button.png +0 -0
  192. data/static/man-ele-check.png +0 -0
  193. data/static/man-ele-editbox.png +0 -0
  194. data/static/man-ele-editline.png +0 -0
  195. data/static/man-ele-image.png +0 -0
  196. data/static/man-ele-listbox.png +0 -0
  197. data/static/man-ele-progress.png +0 -0
  198. data/static/man-ele-radio.png +0 -0
  199. data/static/man-ele-shape.png +0 -0
  200. data/static/man-ele-textblock.png +0 -0
  201. data/static/man-ele-video.png +0 -0
  202. data/static/man-shot1.png +0 -0
  203. data/static/manual-en.txt +3969 -0
  204. data/static/manual-ja.txt +3882 -0
  205. data/static/manual.css +184 -0
  206. data/static/purple_shoes-icon.png +0 -0
  207. data/static/rshoes-icon.png +0 -0
  208. data/static/shoes-manual-apps.png +0 -0
  209. data/static/sound_jars/jl1.0.1.jar +0 -0
  210. data/static/sound_jars/jogg-0.0.7.jar +0 -0
  211. data/static/sound_jars/jorbis-0.0.15.jar +0 -0
  212. data/static/sound_jars/mp3spi1.9.5.jar +0 -0
  213. data/static/sound_jars/tritonus_share.jar +0 -0
  214. data/static/sound_jars/vorbisspi1.0.3.jar +0 -0
  215. metadata +271 -0
@@ -0,0 +1,3882 @@
1
+ # -*- encoding: utf-8 -*-
2
+ = Hello! =
3
+
4
+ Shoesは軽量なグラフィックツールキットです。これは単純で分かりやすいです。
5
+ Shoesは簡単になるように生まれました。本当に、これは全くの初心者のために作られました。
6
+ 本当に簡単です。
7
+ Purple ShoesはカラフルなShoesの一つです。JRubyとSWTを使ってRubyだけで書かれています。
8
+
9
+ このたった一行の取るに足りないShoesのプログラムを見てください:
10
+
11
+ {{{
12
+ #!ruby
13
+ Shoes.app{button("Click me!"){alert("Good job.")}}
14
+ }}}
15
+
16
+ ShoesプログラムはRubyと呼ばれる言語で書かれています。
17
+ ShoesがこのRubyコードの単純な行を渡されたとき、"Click me!"と中に書かれたボタンを持った
18
+ ウィンドウを表示します。このボタンをクリックすると、メッセージがポップアップします。
19
+
20
+ Windows 7では、このように見えるでしょう: !{margin_left: 100}man-shot1.png!
21
+
22
+ 多くのShoesのアプリケーションがグラフィカルなゲームやアートのプログラムである一方、
23
+ テキストを配置したり編集したりすることも簡単にできます。 !{margin_left: 80}shoes-manual-apps.png!
24
+
25
+ そして、理想的には、Shoesプログラムは世の中のいくつかの有名なプラットフォームで実行できるでしょう。
26
+ マイクロソフトWindows、アップルのMac OS X、Linuxや多くの他のプラットフォームで。
27
+
28
+ ^Purple Shoesのビルトインマニュアルへようこそ。このマニュアルはPurple Shoesのプログラムそのものです。^
29
+
30
+ == Introducing Purple Shoes ==
31
+
32
+ Purple Shoesは、OS XやLinuxではどうですか?Windowsと同様ですか?
33
+ 人々はすぐにもそのように攻め立てます!
34
+ でも大丈夫、全て試していますからね。
35
+
36
+ それでは、Purple Shoesのインストールや実行について入る前に、何ができるのかの参考に、
37
+ ちょっといくつかのスクリーンショットを確認します。
38
+
39
+ ==== Mac OS X ====
40
+
41
+ Purple ShoesはアップルのMac OSX10.5 PPC via X11で動作します。
42
+ !{margin_left: 100}../snapshots/sample3-osx.png!
43
+
44
+ これはMac OS X上で`sample3.rb`を実行した時のスナップショットです。
45
+ 全ての円がランダムに描かれています。
46
+ Purple Shoesではさまざまな図形を描いたり動かしたりすることができます。
47
+
48
+ ==== Windows ====
49
+
50
+ Purple Shoesは'''Microsoft Windows XP'''と'''Windows 7'''で動作を確認しています。
51
+ !{margin_left: 0}../snapshots/sample33.png!
52
+
53
+ 上記はWindows 7で`sample33.rb`サンプルが動作している図です。
54
+ Purple Shoesは3つの拡張ライブラリを含んでいます。
55
+ chipmunk physicsとbloopsaphoneと3D texture mappingです。
56
+ 最初の2つはバイナリで提供しているため、今のところWindowsでしか動作しません。
57
+
58
+ ==== Linux ====
59
+
60
+ これは'''Ubuntu on VirtualBox for Windows'''上で`sample44.rb`サンプルが動作しているスクリーンショットです。
61
+ !{margin_left: 130}../snapshots/sample44-linux.png!
62
+
63
+ この例では時計を作るために線や円を描いています。
64
+ 時計の針の動作は線の表示/非表示を毎秒数回切り替えることにより実現しています。
65
+
66
+ アプリケーション上部のテキストが、現在の時刻を表示していることに注意してください。
67
+ Purple Shoesは、いくつかの色、太字、斜字、下線、そしてファイルからフォントをロードして語句を配置する
68
+ 機能を持っています。
69
+
70
+ == Installing Purple Shoes ==
71
+
72
+ はい、ではPurple Shoesのインストールを行います。あなたは次のような疑問を持っているでしょう:
73
+ Rubyのインストールは必要ですか?なにも解凍しなくてもいいですか?どんなコマンドをタイプする必要がありますか?
74
+
75
+ はい。RubyやGemをインストールする必要はあります。でも心配しないで下さい。
76
+ 以下に必要なステップを全て示しますから。
77
+
78
+ ==== Step 1: Purple Shoesのインストール ====
79
+
80
+ まず最初にRubyをインストールします。
81
+ Windowsの場合はこのサイト[[http://rubyinstaller.org/ RubyInstaller for Windows]]
82
+ にアクセスして、最新の'''RubyInstaller 1.9.2 or 1.9.3'''をインストールして下さい。
83
+
84
+ そして、以下のコマンドを実行してください。
85
+
86
+ * gem install green_shoes
87
+
88
+ これだけです。簡単でしょう?
89
+
90
+ '''注意:''' green_shoes gemはこのサイト[[http://rubygems.org/gems/green_shoes RubyGems.org]]
91
+ にあります。
92
+
93
+ もしriやrdocの作成でエラーが発生したら、次のオプション`--no-ri --no-rdoc`を試してみて下さい。
94
+
95
+ ==== Step 2: 新しいテキストファイルの作成 ====
96
+
97
+ Shoesプログラムは'''.rb'''の拡張子で終わる、ただの単純なテキストファイルです。
98
+
99
+ 空のテキストファイルを作成するいくつかの方法は:
100
+
101
+ * '''Mac OS X'''では'''Applications'''フォルダに移動して'''TextEdit'''アプリケーションをダブルクリックします。空のエディタウィンドウが表示されます。そして'''Format'''メニューから'''Make Plain Text'''オプションを選択します。はい、準備ができました。!man-editor-osx.png!
102
+ * '''Windows'''では、スタートメニューへ行きます。'''All Programs'''、'''Accessories'''そして'''Notepad'''を選択します。. !man-editor-notepad.png!
103
+ * '''Linux'''では、多くのディストリビューションが'''gedit'''を備えています。それを実行してください。または、もしあなたのディストリビューションがKDEを基にしているのであれば'''kate'''を実行してください。
104
+
105
+ そして、空のウィンドウに次のようにタイプしてください:
106
+
107
+ {{{
108
+ require 'green_shoes'
109
+ Shoes.app do
110
+ para "Welcome to Shoes"
111
+ end
112
+ }}}
113
+
114
+ `welcome.rb`としてデスクトップに保存してください。
115
+
116
+ ==== Step 3: それを実行してください!Shoesへ行こう! ====
117
+
118
+ プログラムを実行するためには、コンソールウィンドウを開いて、以下のコマンドを実行します。
119
+
120
+ * ruby welcome.rb !man-editor-osx.png!
121
+
122
+ まだ大したものではないですが、確かにそれはプログラムです!少なくとも、そのコツが分かったでしょう!
123
+
124
+ ==== Shoesで何を作りますか? ====
125
+
126
+ さて、ウィンドウアプリケーションを作成することができます。
127
+ しかし、Shoesはウェブから影響を受けているので、アプリケーションは多くのウィジェットよりも、
128
+ 画像を使ったりテキストを配置する傾向があります。例えば、Shoesはタブコントロールやツールバーを備えていません。
129
+ Shoesは''軽量な''ツールキットだと言うことを覚えていますか?
130
+
131
+ それでもShoesはボタンやエディットボックスのようなウィジェットを少しだけ持っています。
132
+ そして、多くの(タブコントロールまたはツールバーのような)不足している要素は、画像でシミュレーションすることが
133
+ できます。
134
+
135
+ ShoesはCairoと呼ばれるとてもよくできた描画エンジンによって一部書かれており、
136
+ それは形状や色彩を描くのに利用されています。このように、Shoesは、生き生きとしたグラフィックを描画するために
137
+ とてもいい言語である、NodeBoxとProcessingから影響を受けています。
138
+
139
+ == The Rules of Purple Shoes ==
140
+
141
+ Purple Shoesがどのように動作するのか推測するのはやめましょう。トリッキーな動作で悩むと思います。
142
+ 私はShoesの中心的な規則を要約しまいた。これらは、それにすべての働きをさせるためには知らなくては
143
+ ならないものです。
144
+
145
+ これらはPurple Shoesの至る所で目にする一般的な規則です。Purple Shoesは単純さと明解さという
146
+ 全体的な理念を持っていますが、いくつか勉強したり覚えたりする必要のあるポイントがあります。
147
+
148
+ ==== Shoesのトリッキーなブロック ====
149
+
150
+ はい、これは極めて重要です。Purple Shoesはブロックによってトリックをします。
151
+ このトリックはすべてのものを読みやすくします。しかし、これは深い階層でブロックを利用することを難しくもします。
152
+
153
+ '''普通のRubyブロックを試しましょう:'''
154
+
155
+ {{{
156
+ Shoes.app do
157
+ ary = ['potion', 'swords', 'shields']
158
+ ary.each do |item|
159
+ puts item
160
+ end
161
+ end
162
+ }}}
163
+
164
+ Purple Shoesでは、これらの種類のブロックは同じ働きをします。この上記のブロックは配列をループして
165
+ 各オブジェクトを`item`変数に格納します。この`item`変数はブロックが終わると消滅(スコープから出る)します。
166
+
167
+ 考え方を守っているもう一つのことは、普通のRubyブロックの内部と`self`を同じままにしています。
168
+ `each`の前に呼ばれるどんな`self`でも、それは`each`ブロック内部と同じです。
169
+
170
+ '''これらはどちらも大部分のPurple Shoesのブロックで正しいです。'''
171
+
172
+ {{{
173
+ Shoes.app do
174
+ stack do
175
+ para "First"
176
+ para "Second"
177
+ para "Third"
178
+ end
179
+ end
180
+ }}}
181
+
182
+ ここでは二つのブロックがあります。一つ目は`Shoes.app`によるものです。この`app`ブロックは`self`を変更します。
183
+
184
+ もう一方のブロックは`stack`ブロックです。このブロックはselfを変更しません。
185
+
186
+ '''どんな理由があって`app`ブロックはselfを変更するのでしょうか?''' 最後の例を徹底的に詳しく説明することから
187
+ 始めましょう。
188
+
189
+ {{{
190
+ Shoes.app do
191
+ self.stack do
192
+ self.para "First"
193
+ self.para "Second"
194
+ self.para "Third"
195
+ end
196
+ end
197
+ }}}
198
+
199
+ 上記の例におけるすべての`self`はアプリケーションオブジェクトです。Shoesは`app`ブロック内部でselfを
200
+ 変更するために、Rubyの`instance_eval`を利用します。そして、そのメソッドは`stack`を呼び出して
201
+ `para`をアプリケーションへ送ります。
202
+
203
+ '''これはShoesアプリケーション全体でインスタンス変数が利用できる理由でもあります:'''
204
+
205
+ {{{
206
+ Shoes.app do
207
+ @s = stack do
208
+ @p1 = para "First"
209
+ @p2 = para "Second"
210
+ @p3 = para "Third"
211
+ end
212
+ end
213
+ }}}
214
+
215
+ これらのインスタンス変数は、すべてアプリケーションオブジェクト内部で終了します。
216
+
217
+ '''新しいウィンドウを作成するときはいつでも、`self`も変更されます。'''
218
+
219
+ {{{
220
+ Shoes.app title: "MAIN" do
221
+ para self
222
+ button "Spawn" do
223
+ Shoes.app title: "CHILD" do
224
+ para self
225
+ end
226
+ end
227
+ end
228
+ }}}
229
+
230
+ ==== ブロックリダイレクション ====
231
+
232
+ もっとも、`stack`ブロックは別の話です。これは`self`を変えませんし、基本的に標準のブロックです。
233
+
234
+ '''しかしトリックがあります:'''`stack`を配置してブロックを与えたとき、アプリケーションオブジェクトはstackを
235
+ メモリへ配置します。ブロックが終了するときstackは立ち去ります。
236
+ そのため、アプリケーションのトップスロットから新しいstackまで、ブロック内部のすべての描画は'''リダイレクト'''されます。
237
+
238
+ そのため、まず、たとえ彼らが確かにアプリケーションオブジェクトへ渡したとしても、それらの3つの`para`は
239
+ `stack`上に描画されます。
240
+
241
+ {{{
242
+ Shoes.app do
243
+ stack do
244
+ para "First"
245
+ para "Second"
246
+ para "Third"
247
+ end
248
+ end
249
+ }}}
250
+
251
+ 少しトリッキーですよね?これについて知っていても噛みつかれるかもしれません。
252
+
253
+ それがあなたをつかまえる一つの方法は、`app`ブロック外のプログラム内のどこか他で、stackを編集しようと
254
+ することです。
255
+
256
+ 例えばstackオブジェクトを使いまわすとしましょう。そして、そのオブジェクトを編集するクラスを持ちます。
257
+
258
+ {{{
259
+ class Messenger
260
+ def initialize slot
261
+ @slot = slot
262
+ end
263
+ def add msg
264
+ para msg rescue puts $!
265
+ end
266
+ end
267
+
268
+ Shoes.app do
269
+ slot = stack
270
+ m = Messenger.new slot
271
+ m.add 'hello'
272
+ end
273
+ }}}
274
+
275
+ アプリケーションが始まるときに、stackオブジェクトをMessengerクラスへ渡すと仮定します。
276
+ そして、後で、メッセージが来るとき、`add`メソッドはそのstackにパラグラフを追加するのに用いられます。
277
+ 正しく動作するでしょうか?
278
+
279
+ いや、それは動作しません。`para`メソッドが見つかりません。すでにアプリケーションオブジェクトは
280
+ まわりにありません。そして、それは`para`メソッドによるものです。
281
+
282
+ 幸いにも、それぞれのShoesオブジェクトはアプリケーションオブジェクトを再び開かせる`app`メソッドを
283
+ 持っているため、さらなる編集ができます。
284
+
285
+ {{{
286
+ class Messenger
287
+ def initialize slot
288
+ @slot = slot
289
+ end
290
+ def add msg
291
+ @slot.app do
292
+ para msg rescue puts $!
293
+ end
294
+ end
295
+ end
296
+
297
+ Shoes.app do
298
+ slot = stack
299
+ m = Messenger.new slot
300
+ m.add 'hello'
301
+ end
302
+ }}}
303
+
304
+ ご想像のとおり、その`app`オブジェクトは`self`をアプリケーションオブジェクトに変更します。
305
+
306
+ ルールは次のようになります:
307
+
308
+ 1. '''"app"という名前か新しいウィンドウを作成するメソッドはアプリケーションオブジェクトの`self`を変更します。
309
+ '''[[BR]](これは、[[Element.window]] と[[Element.dialog]]同様に、Shoes.appとSlot.appの両方にとって正しいです。)
310
+ [[BR]]2. '''stackへ加えられるブロックは、フローや(追加などの)どんな操作メソッドでもselfを
311
+ 変更しません。その代わりに、彼らはスロットをアプリケーションの編集stackにポップします。'''
312
+
313
+ ==== 固定された高さに注意 ====
314
+
315
+ 列でウィンドウを区切るように、スロットの固定された幅は重要です。
316
+
317
+ {{{
318
+ Shoes.app do
319
+ flow do
320
+ stack :width => 200 do
321
+ background lavender
322
+ caption "Column one"
323
+ para "is 200 pixels wide"
324
+ end
325
+ stack :width => -200 do
326
+ background bisque
327
+ caption "Column two"
328
+ para "is 100% minus 200 pixels wide"
329
+ end
330
+ end
331
+ end
332
+ }}}
333
+
334
+ スロットの固定された高さは、より一般的ではありません。通常は、テキストや画像がウィンドウの下へ
335
+ できるだけ流れることを望みます。高さは通常は自然に決定します。
336
+
337
+ ここで重要なことは、固定された高さが実際はスロットに違うように振る舞わせることです。
338
+ 確かに最後にはスロットは完全に切り離なされて、'''入れ子のウィンドウ'''になります。
339
+ 新しいレイヤーはオペレーティングシステムによってスロットを一定の正方形に保つために作成されます。
340
+
341
+ 通常のスロットと入れ子ウィンドウのスロットとの違いは、後者はスクロールバーを持てることです。
342
+
343
+ {{{
344
+ Shoes.app do
345
+ stack width: 200, height: 200, scroll: true do
346
+ background "#DFA"
347
+ 100.times do |i|
348
+ para "Paragraph No. #{i}"
349
+ end
350
+ flush
351
+ end
352
+ end
353
+ }}}
354
+
355
+ これらの入れ子ウィンドウはより多くのメモリを必要とします。彼らはアプリケーションにもう少し負担をかけます。
356
+ もしあなたが、固定された高さのたくさんのスロットで遅さを経験しているなら、違うアプローチを試してください。
357
+
358
+ '''注意:''' 固定された高さのマジック(スロットを入れ子のウィンドウにする)は今のところPurple Shoesでは
359
+ お試し版です。`flush` メソッドを追記する必要があります。
360
+
361
+ {{{
362
+ Shoes.app do
363
+ stack :width => 200 do
364
+ background "#DFA"
365
+ 100.times do |i|
366
+ para "Paragraph No. #{i}"
367
+ end
368
+ end
369
+ end
370
+ }}}
371
+
372
+ ==== 画像と形状のブロック ====
373
+
374
+ 多くの初心者が形状でウィンドウを散らかし始めます。すべての長方形や楕円形をスロットへ投げ入れるのは
375
+ 確かに簡単です。
376
+
377
+ '''しかしながら、Shoesはそれらすべての形状のためにオブジェクトを生成することを覚えておいて下さい!。'''
378
+
379
+ {{{
380
+ Shoes.app do
381
+ fill black.push(0.1)
382
+ 100.times do |i|
383
+ oval i, i, i * 2 if i > 0
384
+ end
385
+ end
386
+ }}}
387
+
388
+ この例では、100個の楕円形オブジェクトが生成されます。これは悪すぎるわけではありません。
389
+ しかし、一つの形状の中にこれらを作成するのなら、これはより軽量になるでしょう。
390
+
391
+ {{{
392
+ # Not yet available
393
+ Shoes.app do
394
+ fill black(0.1)
395
+ shape do
396
+ 100.times do |i|
397
+ oval i, i, i * 2 if i > 0
398
+ end
399
+ end
400
+ end
401
+ }}}
402
+
403
+ ああ、待ってください。この楕円形は今回は満たされません。なぜなら、この形状たちは一つの大きな形状に
404
+ 結合されたからです。そして、このケースではShoesはどこを満たすべきか、分かりません。
405
+
406
+ そして、アウトラインを厳密に扱うとき、通常は一つの形状に結合することを望みます。
407
+
408
+ 別のオプションでは、これらすべての楕円形を一つの画像に結合します。
409
+
410
+ {{{
411
+ # Not yet available
412
+ Shoes.app do
413
+ fill black(0.1)
414
+ image 300, 300 do
415
+ 100.times do |i|
416
+ oval i, i, i * 2
417
+ end
418
+ end
419
+ end
420
+ }}}
421
+
422
+ そうしよう!その楕円形はすべて一つの300 x 300の画像に結合されます。この場合では、その画像を
423
+ メモリに保管するのは、おそらく100個の楕円形を持つよりはるかに大きくなるかもしれません。
424
+ しかし、何千もの形状を扱う場合には、イメージブロックはより安っぽくなる可能性があります。
425
+
426
+ ポイントは以下の通りです:画像やブロックへ形状をグループ化することは簡単ですので、もし速度を
427
+ 得ようとするのなら、それを試してください。形状ブロックは特にメモリと速度を節約させるでしょう。
428
+
429
+ ''注意:'' 今のところPurple Shoesではこのマジック(複数の形状をグループにして一つの画像や形状にする)
430
+ はサポートしていません。
431
+
432
+ ==== どこでもUTF-8 ====
433
+
434
+ Ruby自体はUnicodeを意識しません。そして、UTF-8は一種のUnicodeです。
435
+ (UTF-8の完全な説明は[[http://en.wikipedia.org/wiki/UTF-8 Wikipedia]]を見てください。)
436
+
437
+ しかしながら、UTF-8はWEBで一般的です。そして、多くの異なったプラットホームがそれをサポートします。
438
+ そこで、Purple Shoesがしなくてはならない変換の量を減らすために、Purple Shoesはすべての文字列が
439
+ UTF-8フォーマットであることを期待します。
440
+
441
+ すばらしいことに、Purple ShoesでUTF-8を使えば無数の言語(ロシア語、日本語、スペイン語、英語)を
442
+ 表示ことができます。テキストエディタでUTF-8を使用することだけを確認してください!
443
+
444
+ 実例を示します:
445
+
446
+ {{{
447
+ Shoes.app do
448
+ stack :margin => 10 do
449
+ @edit = edit_box do
450
+ @para.text = @edit.text
451
+ end
452
+ @para = para ""
453
+ end
454
+ end
455
+ }}}
456
+
457
+ このアプリケーションは何でもコピーして編集ボックスに貼り付けて、Purple Shoesパラグラフで表示することが
458
+ できます。外国語(ギリシャ語か日本語のような)のテキストをこのボックスにコピーして、どのように表示されるかを
459
+ 見ることができます。
460
+
461
+ これは、その編集ボックスがUTF-8の文字を返すことを確かめるのにいいテストです。
462
+ そして、そのパラグラフはどんなUTF-8の文字でも設定することができます。
463
+
464
+ '''重要事項:'''もしいくつかのUTF-8の文字が表示されないなら、パラグラフのフォントを変更する必要があります。
465
+ これは特にOS Xで一般的です。
466
+
467
+ そして、OS Xでのおすすめの日本語フォントは'''AppleGothic'''です。Windowsでは'''MS UI Gothic'''です。
468
+
469
+ {{{
470
+ Shoes.app do
471
+ para "てすと (te-su-to)",
472
+ font: case RUBY_PLATFORM
473
+ when /mingw/; "MS UI Gothic"
474
+ when /darwin/; "AppleGothic, Arial"
475
+ else "Arial"
476
+ end
477
+ end
478
+ }}}
479
+
480
+ さらに、Purple Shoesで文字列を扱う場合もUTF-8の文字列を必要とします。
481
+ 編集ボックス、編集ライン、リストボックス、ウィンドウタイトルやテキストブロックはすべてUTF-8をとります。
482
+ 間違った文字の入った文字列をあたえた場合は、コンソールにエラーが表示されます。
483
+
484
+ ==== メインアプリケーションとRequire ====
485
+
486
+ '''注意:''' このルールはRaisinsのためのものです。PolicemanとPurple ShoesではTOPLEVEL_BINDINGを
487
+ 使っているので、最初の例では `main` (Rubyトップレベルオブジェクト)が表示されます。
488
+ `Shoes.app`ブロックの外側では、`Para`ではなく`Shoes::Para`と記述する必要がありますが。
489
+
490
+ それぞれのShoesアプリケーションは、それ自体を作ることができる小さな部屋を与えられます。
491
+ クラスを作成したり変数を設定できますが、それらは他のShoesプログラムから見ることはできません。
492
+ それぞれのプログラムはそれ自身の匿名クラス内で実行されます。
493
+
494
+ {{{
495
+ main = self
496
+ Shoes.app do
497
+ para main.to_s
498
+ end
499
+ }}}
500
+
501
+ この匿名クラスは`(shoes)`と呼ばれ、それは空の無名クラスです。`Shoes`モジュールは
502
+ (`include Shoes`を利用して)このクラスにミックスインされているため、パラグラフクラスを参照しているときに
503
+ `Para`や`Shoes::Para`を利用することができます。
504
+
505
+ このアプローチの長所は:
506
+
507
+ * Shoesアプリケーションはローカル変数を共有できません。
508
+ * メインアプリケーションコードに作成されるクラスは一時的です。
509
+ * Shoesモジュールは、Ruby自身のトップレベル環境ではなく、匿名クラスにミックスインされることができます、
510
+ * ガベージコレクションが一度完了すれば、アプリケーションを完全にきれいにできます。
511
+
512
+ 二つ目の部分は特に重要なので忘れないこと。
513
+
514
+ {{{
515
+ class Storage; end
516
+
517
+ Shoes.app do
518
+ para Storage.new
519
+ end
520
+ }}}
521
+
522
+ アプリケーションが完了すれば`Storage`クラスは消えます。ほかのアプリケーションはStorageクラスを
523
+ 利用できません。そして、それは`require`を利用してロードされるファイルから手に入れることはできません。
524
+
525
+ もっとも、`require`するときそのコードは近くにいます。それはRubyのトップレベル環境に保持されます。
526
+
527
+ そして、この規則は:'''アプリケーションのコードに一時的なクラスを保持し、requireに永続的なクラスを
528
+ 保持しなさい'''です。
529
+
530
+ = Shoes =
531
+
532
+ Purple Shoesはウィンドウや、それらウィンドウ内部の要素を描くことがすべてです。
533
+ 今はウィンドウ自体に焦点を当てましょう。
534
+ 他のセクションの[[Slots]]や[[Elements]]がウィンドウ内部に関してのすべてを対象としています。
535
+
536
+ ここでは、このマニュアルはより辞書のように読んでください。それぞれのページのほとんどは、利用可能なメソッドの
537
+ 一覧であり、各トピックを対象としています。この考えは、すべてに関してとても詳細かつ明確であることです。
538
+
539
+ そして、このマニュアルの難しさにぶつかって、始めることについてまだ分からないなら、おそらくこのマニュアルの
540
+ [[Hello! beginning]]に戻るべきです。
541
+ または、ウェブ上の初心者のリーフレットである
542
+ [[https://github.com/downloads/shoes/shoes/nks.pdf Nobody Knows Shoes]]を試してください。
543
+
544
+ ==== 方法の見つけ方 ====
545
+
546
+ このセクションは以下を対象とします:
547
+
548
+ * [[Built-in Built-in methods]] - Purple Shoesプログラムのどこでも利用できる一般的なメソッド。
549
+ * [[App The App window]] - Purple Shoesのすべてのメインウィンドウに添付されたメソッド。
550
+ * [[Styles The Styles Master List]] - Purple Shoesのすべてのスタイルの完全な一覧。
551
+ * [[Classes The Classes list]] - Purple Shoesのクラスやサブクラスについて表示している表。
552
+ * [[Colors The Colors list]] - すべてのビルトインカラーと[[Built-in.rgb]]におけるそれぞれの数の表。
553
+
554
+ ページをよく見ても見つからないものがあれば、[[Search]]ページを試してください。
555
+ それは問題をさける手っ取り早い方法です。
556
+
557
+ この一般的なリファレンスのあとに、他の2つの特別なセクションがあります:
558
+
559
+ * [[Slots]] - [[Element.stack]]と[[Element.flow]]を対象とする、2つの種類のスロット。
560
+ * [[Elements]] - すべてのボタン、形状、画像などのためのドキュメント。
561
+
562
+ ここに[[Element Element Creation]]ページ(追加できるすべてのエレメントの一覧)と
563
+ [[Common Common Methods]] ページ(すべてのスロットやエレメントにあるメソッドの一覧)の
564
+ 2つのとても大切なページがあります。
565
+
566
+ == Built-in Methods ==
567
+
568
+ これらのメソッドはPurple Shoesのプログラムを通してどこでも利用できます。
569
+
570
+ これらすべてのコマンドは、あなたがドットをそれらに付与しない点が珍しいです。
571
+ '''このマニュアルのほかのすべてのメソッドはオブジェクトにドットを付与すべきです。'''
572
+ しかし、これらのビルトインメソッド(カーネルメソッドとも呼ばれている)はドットがないことを意味します。
573
+
574
+ 一般的なものとして`alert`があります:
575
+
576
+ {{{
577
+ alert "No dots in sight"
578
+ }}}
579
+
580
+ これと、ArrayとStringに対してだけ利用可能な、カーネルメソッドではない、
581
+ `reverse`メソッドを比較してください:
582
+
583
+ {{{
584
+ #!ruby
585
+ Shoes.app do
586
+ para "Plaster of Paris".reverse
587
+ #=> "siraP fo retsalP"
588
+ para [:dogs, :cows, :snakes].reverse
589
+ #=> [:snakes, :cows, :dogs]
590
+ end
591
+ }}}
592
+
593
+ 描画やボタンを作成したりするための多くのPurple Shoesメソッドはスロットへ付与されます。
594
+ より詳しい情報については[[Slots]]のセクションを見てください。
595
+
596
+ ==== ビルトイン定数 ====
597
+
598
+ Purple Shoesにはいくつかのビルトイン定数があり、それはどんなバージョンのPurple Shoesが
599
+ 実行されているかを判別することを証明するのに利用できるかもしれません
600
+
601
+ '''DIR''' は、`green_shoes/lib`のフルパスです。
602
+
603
+ '''COLORS''' は、アプリケーションで利用できる色の完全な一覧です。
604
+
605
+ '''FONTS''' は、アプリケーションで利用できるフォントの完全な一覧です。
606
+
607
+ '''VERSION''' は、Purple Shoesのバージョンです。
608
+
609
+ {{{
610
+ Shoes.app do
611
+ para VERSION
612
+ para fg(DIR, red)
613
+ image File.join(DIR, '../static/gshoes-icon.png')
614
+ para fg(FONTS.join(', '), green)
615
+ para COLORS.map{|k, v| [k, v]}
616
+ end
617
+ }}}
618
+
619
+ === alert(message: a string, :block => true or false, title: a string) » nil ===
620
+
621
+ 短いメッセージを含むウィンドウをポップアップします。
622
+
623
+ {{{
624
+ #!ruby
625
+ alert "I'm afraid I must interject!"
626
+ }}}
627
+
628
+ alertは信じられないほど煩わしいので控えめに利用してください!
629
+ プログラムをデバッグする手助けのメッセージを表示するためにalertを利用するなら、
630
+ Rubyの標準メソッド`puts`や`p`を試してみて下さい。
631
+
632
+ もしalert()メソッドをスレッドセーフにしたい場合、すなわちメインスレッドをブロックしたくない場合は、
633
+ `:block => false`オプションを使ってください。またウィンドウのタイトルを変更したい場合は、
634
+ `:title => a string`オプションを使ってください。
635
+
636
+ === ask(message: a string) » a string ===
637
+
638
+ ウィンドウをポップアップして質問をします。例えば、あなたは誰かに名前を尋ねたいかもしれません。
639
+
640
+ {{{
641
+ #!ruby
642
+ if name = ask("Please, enter your name:")
643
+ Shoes.app{para "Welcome, #{name}!"}
644
+ end
645
+ }}}
646
+
647
+ 上記のスクリプトを実行するとき、コンピュータを利用している人は、名前を入力するための空のボックスを
648
+ 持つウィンドウを見るでしょう。そして、その名前は`name`変数に保存されます。
649
+
650
+ === ask_color(title: a string) » RGB array ===
651
+
652
+ カラーピッカーウィンドウをポップアップします。このプログラムは色が選ばれるのを待ち、そしてあなたに
653
+ 色オブジェクトを与えます。いくつかの方法でこの色を利用するために`Color`ヘルプを見てください。
654
+
655
+ {{{
656
+ #!ruby
657
+ backcolor = ask_color "Pick a background"
658
+ Shoes.app do
659
+ background backcolor
660
+ end
661
+ }}}
662
+
663
+ === ask_open_file() » a string ===
664
+
665
+ "ファイルを開く。。。"ウィンドウをポップアップします。これは標準のウィンドウであり、すべてのフォルダを表示して
666
+ 開くファイルを選択させます。そしてファイルの名前を返します。
667
+
668
+ {{{
669
+ #!ruby
670
+ filename = ask_open_file
671
+ Shoes.app do
672
+ para File.read(filename)
673
+ end
674
+ }}}
675
+
676
+ === ask_save_file() » a string ===
677
+
678
+ これは先ほど述べた`ask_open_file`と似ており、"ファイルを保存する。。。"ウィンドウをポップアップします。
679
+
680
+ {{{
681
+ #!ruby
682
+ save_as = ask_save_file
683
+ Shoes.app do
684
+ para save_as
685
+ end
686
+ }}}
687
+
688
+ === ask_open_folder() » a string ===
689
+
690
+ "フォルダを開く。。。"ウィンドウをポップアップします。これは、すべてのフォルダを表示し、開くフォルダを
691
+ 選択させる標準のウィンドウです。これはあなたにフォルダの名前を渡します。
692
+
693
+ {{{
694
+ #!ruby
695
+ folder = ask_open_folder
696
+ Shoes.app do
697
+ para Dir.entries(folder)
698
+ end
699
+ }}}
700
+
701
+ === ask_save_folder() » a string ===
702
+
703
+ これは先ほど述べた`ask_open_folder`と似ており、"フォルダを保存する。。。"ウィンドウをポップアップします。
704
+
705
+ {{{
706
+ #!ruby
707
+ save_to = ask_save_folder
708
+ Shoes.app do
709
+ para save_to
710
+ end
711
+ }}}
712
+
713
+ === confirm(question: a string) » true or false ===
714
+
715
+ yes-または-noの質問をポップアップします。コンピュータの前の人が'''yes'''をクリックするなら、
716
+ 返される`true`を受け取ります。そうでは無いなら、返される`false`を受け取ります。
717
+
718
+ {{{
719
+ #!ruby
720
+ if confirm("Draw a circle?")
721
+ Shoes.app{ oval top: 0, left: 0, radius: 50 }
722
+ end
723
+ }}}
724
+
725
+ === exit() ===
726
+
727
+ プログラムを止めます。突然に終了したいときはいつでも、これを呼んでください。
728
+
729
+ '''注意:''' Ruby自身の標準`exit`メソッドを使う必要がある場合は (フォークされたRubyプロセス内で等)
730
+ `Kernel.exit`を呼び出して下さい。
731
+
732
+ === font(message: a string) » an array of font family names ===
733
+
734
+ ファイルからTrueType(または他の種類のフォント)をロードします。TrueTypeはすべてのプラットフォームで
735
+ サポートされるとはいえ、あなたのプラットフォームは他の種類のフォントをサポートするかもしれません。
736
+ Shoesはこの動作に、それぞれのオペレーティングシステムのビルトインフォントシステムを利用します。
737
+
738
+ '''注意:''' 今のところPurple Shoesでは、fontメソッドをサポートしていません。
739
+
740
+ ここにどのプラットフォームで何のフォントが動作するかの目安があります。
741
+
742
+ * Bitmap fonts (.bdf, .pcf, .snf) - Linux
743
+ * Font resource (.fon) - Windows
744
+ * Windows bitmap font file (.fnt) - Linux, Windows
745
+ * PostScript OpenType font (.otf) - Mac OS X, Linux, Windows
746
+ * Type1 multiple master (.mmm) - Windows
747
+ * Type1 font bits (.pfb) - Linux, Windows
748
+ * Type1 font metrics (.pfm) - Linux, Windows
749
+ * TrueType font (.ttf) - Mac OS X, Linux, Windows
750
+ * TrueType collection (.ttc) - Mac OS X, Linux, Windows
751
+
752
+ フォントが適切にロードされたなら、ファイルに見つかったフォントの名前の配列を取り戻すでしょう。
753
+ そうではなく、ファイルにはフォントが見つからないなら`nil`が返されます。
754
+
755
+ また興味深いことに:`Shoes::FONTS`定数はこのプラットフォームで利用可能なフォントの完全な一覧です。
756
+ `include?`を利用していくつかのフォントをチェックできます。
757
+
758
+ {{{
759
+ if Shoes::FONTS.include? "Coolvetica"
760
+ alert "Coolvetica is available on this system."
761
+ else
762
+ alert "You do not have the Coolvetica font."
763
+ end
764
+ }}}
765
+
766
+ もしフォントを表示することに問題があるなら、それを利用する前に、アプリケーションがフォントを
767
+ ロードすることを確認してください。特にOS Xでは、もしフォントがロードされる前に利用されたなら、
768
+ フォントキャッシュはロードされたフォントを無視する傾向があります。
769
+
770
+ === gradient(color1, color2) » a range of RGB array ===
771
+
772
+ 二つの色から直線勾配を作ります。それぞれの色に、色を描画するためにRGB arrayか文字列を渡します。
773
+ 例えば、`gradient(green, red)`は、`green..red`と同じです。
774
+ また`gradient(green, '#FA3')`のように記述することもできます。
775
+
776
+ {{{
777
+ Shoes.app do
778
+ oval 100, 100, 100,
779
+ fill: gradient(green, '#FA3'), angle: 45
780
+ end
781
+ }}}
782
+
783
+ === gray(the numbers: darkness, alpha) » RGB array ===
784
+
785
+ 暗さのレベルや、任意的にはアルファレベルからグレースケールカラーを作成します。
786
+
787
+ {{{
788
+ Shoes.app do
789
+ nostroke
790
+ 11.times do |i|
791
+ y = x = 50 + 10 * i
792
+ r = 200 - 10 * i
793
+ oval x, y, r, fill: gray(1-i*0.1)
794
+ end
795
+ end
796
+ }}}
797
+
798
+ === rgb(red, green, blue, alpha) » an array of decimal numbers ===
799
+
800
+ 赤、緑、青の構成要素から色を作成します。アルファレベル(透明度を示す)は任意に加えることができます。
801
+
802
+ 整数を渡すときは、0から255までの値を利用してください。
803
+
804
+ {{{
805
+ Shoes.app do
806
+ blueviolet = rgb(138, 43, 226, 0.5)
807
+ darkgreen = rgb(0, 100, 0, 0.5)
808
+ oval 100, 100, 100,
809
+ fill: [blueviolet, darkgreen].sample(1)
810
+ end
811
+ }}}
812
+
813
+ または、0.0から1.0までの10進数を利用してください。
814
+
815
+ {{{
816
+ Shoes.app do
817
+ blueviolet = rgb(0.54, 0.17, 0.89)
818
+ darkgreen = rgb(0, 0.4, 0)
819
+ oval 100, 100, 100,
820
+ fill: [blueviolet, darkgreen].sample(1)
821
+ end
822
+ }}}
823
+
824
+ == The App Object ==
825
+
826
+ アプリケーションはURLでコードを実行する一つのウィンドウです。URLを切り替えるとき、新しい
827
+ アプリケーションオブジェクトが作成され、スタック、フローや他の要素で満たされます。
828
+
829
+ アプリケーションはウィンドウ自体です。それは閉じられるか、クリアされるか、新しい要素で満たされる
830
+ かもしれません。!{:margin_left => 100}../snapshots/sample46.png!
831
+
832
+ スロット/ボックスの用語では、アプリケーション自体がフローです。詳しくは''Slots''セクションを
833
+ 見てください、しかし、これはどんな要素も直接フローのトップレベルに置かれることを単に意味します。
834
+
835
+ === Shoes.app(styles) { ... } » Shoes::App ===
836
+
837
+ Purple Shoesのアプリケーションウィンドウを開始します。これはPurple Shoesプログラムを作るための
838
+ 出発地点です。ブロックの内部では、ウィンドウを様々なPurple Shoesの要素(ボタン、アートワーク、
839
+ その他)で満たし、そしてブロックの外では、ウィンドウがどれぐらい大きいのかを説明するために
840
+ `styles`を利用します。おそらくアプリケーションの名前についてもです。
841
+
842
+ {{{
843
+ #!ruby
844
+ Shoes.app title: "White Circle",
845
+ width: 200, height: 200 do
846
+ background black
847
+ fill white
848
+ oval top: 20, left: 20, radius: 160
849
+ end
850
+ }}}
851
+
852
+ 上記のケースでは、小さなウィンドウを作成します。200×200ピクセルです。
853
+ そして、そのウィンドウには黒い背景と白い輪の2つの要素があります。
854
+
855
+ いったんアプリケーションが作成されれば、それは[[App.Shoes.APPS]]の一覧に追加されます。
856
+ もしあなたがより多くのウィンドウを生成したいなら、[[Element.window]]メソッドや
857
+ [[Element.dialog]]メソッドを見てください。
858
+
859
+ === Shoes.APPS() » An array of Shoes::App objects ===
860
+
861
+ 現在開いているすべてのPurple Shoesアプリケーションの完全な一覧を作成します。
862
+ いったんアプリケーションが閉じられると、その一覧から取り除かれます。
863
+ そう、Purple Shoesでは一度に多くの実行できます。それはとても元気付けられます。
864
+
865
+ === clipboard() » a string ===
866
+
867
+ システムのクリップボードのすべてのテキストを含む文字列を返します。
868
+ これはコンピュータ上のどのプログラムからでもカットアンドペーストできるグローバルクリップボードです。
869
+
870
+ === clipboard = a string ===
871
+
872
+ システムクリップボードに`a string`のテキストを保存します。
873
+
874
+ === close() ===
875
+
876
+ アプリケーションのウィンドウを閉じます。
877
+ 複数のウィンドウを開いていて、すべてのアプリケーションを閉じたいなら、ビルトインメソッドの
878
+ `exit`を利用してください。
879
+
880
+ {{{
881
+ Shoes.app do
882
+ para 'hello'
883
+ button 'spawn' do
884
+ Shoes.app do
885
+ para 'hello'
886
+ button('close: close this window only'){close}
887
+ button('exit: quit Purple Shoes'){exit}
888
+ end
889
+ end
890
+ button('close: close this window only'){close}
891
+ button('exit: quit Purple Shoes'){exit}
892
+ end
893
+ }}}
894
+
895
+ === download(url: a string, styles) ===
896
+
897
+ ダウンロードのスレッド(あなたがJavaScriptに詳しいのなら、およそXMLHttpRequestのようなものです)
898
+ を開始します。このメソッドは、すぐに戻り値を返してバックグラウンドでダウンロードを開始します。
899
+ また、それぞれのダウンロードスレッドが`start`、`progress`や`finish`イベントを開始します。
900
+ downloadにファイルを送ることや、(`finish`イベントの中で)文字列を取り戻すことができます。
901
+
902
+ downloadにブロックを付けると、それは`finish`イベントとして呼ばれます。
903
+
904
+ {{{
905
+ Shoes.app do
906
+ stack do
907
+ title "Searching Google", size: 16
908
+ @status = para "One moment..."
909
+
910
+ download "http://is.gd/bXTVY7" do |goog|
911
+ @status.text = "Headers: #{goog.meta}"
912
+ end
913
+ end
914
+ end
915
+ }}}
916
+
917
+ この例は本当に`download`の最も簡単な形です:いくつかのウェブデータをメモリにダウンロードして、
918
+ ダウンロードが完了するとそのデータを操作しています。
919
+
920
+ `download`のもう一つのサンプルはいくつかのウェブデータを、`:save`スタイルを利用してファイルに
921
+ 保存します。
922
+
923
+ {{{
924
+ Shoes.app do
925
+ stack do
926
+ title "Downloading Google image", size: 16
927
+ @status = para "One moment..."
928
+
929
+ download "http://is.gd/GVAGF7",
930
+ :save => "nasa50th.gif" do
931
+ @status.text = "Okay, is downloaded."
932
+ image "nasa50th.gif", top: 100
933
+ end
934
+ end
935
+ end
936
+ }}}
937
+
938
+ もしも特定のヘッダかアクションをウェブサーバへ送る必要があるのならば、HTTPリクエストを
939
+ カスタマイズするために`:method`、`:headers`や`:body`スタイルを利用することができます。
940
+ (そして、それら以上のスタイルが必要なら、いつでもRubyのOpenURIクラスを準備することができます。)
941
+
942
+ {{{
943
+ #!ruby
944
+ # Not yet available
945
+ Shoes.app do
946
+ stack do
947
+ title "GET Google", size: 16
948
+ @status = para "One moment..."
949
+
950
+ download "http://is.gd/bXTVY7",
951
+ :method => "GET" do |dump|
952
+ @status.text = dump.response.body
953
+ end
954
+ end
955
+ end
956
+ }}}
957
+
958
+ 上記の例から、Shoesは、Googleのサーチエンジンへ質問するために"GET"メソッドを
959
+ 利用することが分かります。
960
+
961
+ '''注意:''' Purple Shoesは、`:method`, `:headers`, `:body`スタイルをサポートしていません。
962
+
963
+ {{{
964
+ include Hpricot
965
+ Shoes.app do
966
+ status = para "One moment..."
967
+ download 'http://is.gd/BatiRt' do |dl|
968
+ samples = []
969
+ Hpricot(dl).inner_text.each_line do |line|
970
+ samples.push($1) if line =~ /(sample.*\.rb)/
971
+ end
972
+ status.text = samples.join(', ')
973
+ flush
974
+ end
975
+ end
976
+ }}}
977
+
978
+ 上記の例から、Purple ShoesはHTML解析のためにHpricotライブラリを組み込んでいることが
979
+ わかります。
980
+
981
+ '''注意:''' 今のところWindowsプラットフォームのみです。
982
+
983
+ === location() » a string ===
984
+
985
+ 現在のアプリケーションのURLを含む文字列を取得します。
986
+
987
+ === mouse() » an array of numbers: button, left, top ===
988
+
989
+ どちらのボタンが押されたのかと共に、マウスカーソルの位置を特定します。
990
+
991
+ {{{
992
+ #!ruby
993
+ Shoes.app do
994
+ @p = para
995
+ animate do
996
+ button, left, top = self.mouse
997
+ @p.replace "mouse: #{button}, #{left}, #{top}"
998
+ end
999
+ end
1000
+ }}}
1001
+
1002
+ === owner() » Shoes::App ===
1003
+
1004
+ このアプリケーションを開始したアプリケーションを取得します。多くの場合、これは`nil`でしょう。
1005
+ しかし[[Element.window]]メソッドを利用してアプリケーションが開始されたなら、
1006
+ その所有者は`window`と呼ばれるアプリケーションでしょう。
1007
+
1008
+ === started?() » true or false ===
1009
+
1010
+ ウィンドウはすべて構築され、表示されましたか?これは完全に構築される前に、
1011
+ ウィンドウを利用しようとするスレッド化されたコードのために役に立ちます。
1012
+ (また、ウィンドウが開くときに実行される`start`イベントも見てください。)
1013
+
1014
+ ''注意:''' 今のところPurple Shoesではstarted?メソッドをサポートしていません。
1015
+
1016
+ === visit(url: a string) ===
1017
+
1018
+ 異なるShoesのURLを見るために、ロケーションを変更します。
1019
+
1020
+ (http://google.comのような)絶対パスのURLは悪くないですが、Purple ShoesはPurple Shoes
1021
+ アプリケーションがそのアドレスに存在することを期待するでしょう。
1022
+ (そのため、google.comはHTMLアプリケーションとしては動作しません。)
1023
+
1024
+ == The Styles Master List ==
1025
+
1026
+ 外観を変更したいですか?
1027
+ Purple Shoesにおいてはスタイルが要素の表示方法を変更するために利用されます。
1028
+ 場合によっては、要素のすべてのクラスのスタイルでさえ設定できます。
1029
+ (すべての段落に特定のフォントを与えるように)
1030
+
1031
+ スタイルは簡単にspotできます。通常は要素が生成されるときに現れます。
1032
+
1033
+ {{{
1034
+ Shoes.app title: "A Styling Sample" do
1035
+ para 'Purple Shoes', align: 'center', size: 50
1036
+ end
1037
+ }}}
1038
+
1039
+ このappには`:title`スタイルが設定されています。そしてこのappの内部の段落には、
1040
+ 中央揃えの`:align`スタイルとフォントサイズ50の`:size`スタイルが設定されます。
1041
+
1042
+ このスタイルのハッシュは、どんな要素やスロットも利用できる[[Common.style]]メソッドを利用して変更できます。
1043
+
1044
+ '''注意:''' 今のところPurple Shoesでは、styleメソッドで変更できる要素は形状のみです。
1045
+
1046
+ {{{
1047
+ Shoes.app title: "A Styling Sample" do
1048
+ choose =
1049
+ lambda{[red, blue, green, yellow].sample}
1050
+ s = star 100, 50, 30, 200, 180, strokewidth: 5
1051
+ button 'change colors' do
1052
+ s.style stroke: choose.call, fill: choose.call
1053
+ end
1054
+ end
1055
+ }}}
1056
+
1057
+ 多くのスタイルもメソッドとして呼び出すことで設定することができます。
1058
+ (メソッドを見つけるために手動での検索を行うでしょう。)
1059
+
1060
+ '''注意:''' Purple Shoesではメソッドとしてはそれらをサポートしていません。
1061
+
1062
+ {{{
1063
+ # Not yet available
1064
+ Shoes.app title: "A Styling Sample" do
1065
+ choose =
1066
+ lambda{[red, blue, green, yellow].sample}
1067
+ s = star 100, 50, 30, 200, 180, strokewidth: 5
1068
+ button 'change colors' do
1069
+ s.stroke = choose.call; s.fill = choose.call
1070
+ end
1071
+ end
1072
+ }}}
1073
+
1074
+ どんなスタイルでも分かるようにすべてのマニュアルを苦労して読ませるよりも、この役に立つページは
1075
+ Purple Shoesのあらゆるスタイルを急いで駆け抜けて、どこでスタイルが利用されるかについて示唆します。
1076
+
1077
+ === :align » a string ===
1078
+
1079
+ ''banner, caption, inscription, para, subtitle, tagline, title''で利用できます。
1080
+
1081
+ テキストの整列です。これは次のどれかです:
1082
+
1083
+ * 'left': 左へテキストを整列します。
1084
+ * 'center': 中央へテキストを整列します。
1085
+ * 'right': 右へテキストを整列します。
1086
+
1087
+ === :angle » a number ===
1088
+
1089
+ ''background, border, line, oval, rect, shape, star''で利用できます。
1090
+
1091
+ グラデーションに適用する角度です。通常はグラデーションの色の効果は上から下です。
1092
+ `:angle`を90に設定するなら反時計回りに90度回転し、グラデーションは左から右になるでしょう。
1093
+
1094
+ === :attach » a slot or element ===
1095
+
1096
+ ''flow, stack''で利用できます。
1097
+
1098
+ 他のスロットや要素と比較してスロットをピンで止めます。ウィンドウの左上の角からスロットを配置する
1099
+ ために`:attach => Window`と書く人もいるかもしれません。
1100
+ これについてもう少し取り上げると、`:top => 10, :left => 10, :attach => Window`のスタイルは
1101
+ スロットをウインドウの座標の(10, 10)に配置します。
1102
+
1103
+ 動く要素にスロットがアタッチされた場合は、そのスロットはそれとともに動きます。
1104
+ アタッチメントが`nil`にリセットされるなら、通常はそのスロットはそれを取り囲む他のオブジェクトとともに流れます。
1105
+
1106
+ '''注意:''' Purple Shoesは`:attach`スタイルをサポートしていません。
1107
+
1108
+ === :autoplay » true or false ===
1109
+
1110
+ ''video''で利用できます。
1111
+
1112
+ ビデオは現れた後で再生を開始すべきですか?`true`を設定すると、ビデオはユーザに尋ねること無く
1113
+ 開始するでしょう。
1114
+
1115
+ '''注意:''' Purple Shoesは`:autoplay`スタイルをサポートしていません。
1116
+
1117
+ === :back » true or false ===
1118
+
1119
+ ''shapes, image, textblocks''で利用できます。
1120
+
1121
+ 他の要素の後ろに配置されます。
1122
+
1123
+ {{{
1124
+ Shoes.app do
1125
+ rect 100, 100, 100, 100, fill: green
1126
+ rect 120, 120, 100, 100, fill: yellow
1127
+ para 'hello', left: 150, top: 150, front: true
1128
+ oval 150, 150, 100, 100, fill: red
1129
+ oval 180, 180, 100, 100, fill: gray, back: true
1130
+ end
1131
+ }}}
1132
+
1133
+ === :bottom » a number ===
1134
+
1135
+ ''すべてのスロットと要素''で利用できます。
1136
+
1137
+ 要素の下の端の座標にピクセルを設定します。その端はコンテナの下の端に対して配置されます。
1138
+ そのため、`:bottom => 0`は、スロットの下の端とその下の端が接するように要素を配置するでしょう。
1139
+
1140
+ '''注意:''' Purple Shoesは`:bottom`スタイルをサポートしていません。
1141
+
1142
+ === :cap » :curve or :rect or :project ===
1143
+
1144
+ ''arc, line, shape''で利用できます。
1145
+
1146
+ 線の終点の形状を曲がったもの(curved)か角張ったもの(square)に設定します。
1147
+ 追加の説明は[[Art.cap]]メソッドを見てください。
1148
+
1149
+ === :center » true or false ===
1150
+
1151
+ ''arc, image, oval, rect, shape''で利用できます。
1152
+
1153
+ `:top`と`:left`の座標が形状の中心を意味するかどうか示します。
1154
+ `true`を設定すると、[[Art.transform]]メソッドに`:center`を設定したのと似ています。
1155
+
1156
+ '''注意:''' Purple Shoesは`:center`スタイルをサポートしていません。
1157
+
1158
+ === :change » a proc ===
1159
+
1160
+ ''edit_box, edit_line, list_box''で利用できます。
1161
+
1162
+ `change`イベントハンドラはスタイルに保存されます。例として、edit_boxの
1163
+ [[EditBox.change]]メソッドを見てください。
1164
+
1165
+ === :checked » true or false ===
1166
+
1167
+ ''check, radio''で利用できます。
1168
+
1169
+ チェックボックスまたはラジオボタンがクリックされましたか?
1170
+ `true`が設定されるなら、そのボックスはチェックされます。[[Check.checked=]]メソッドも見てください。
1171
+
1172
+ === :choose » a string ===
1173
+
1174
+ ''list_box''で利用できます。
1175
+
1176
+ リスト内の現在選択されたアイテムを設定します。追加の情報は[[ListBox.choose]]にあります。
1177
+
1178
+ === :click » a proc ===
1179
+
1180
+ ''arc, arrow, button, check, flow, image, line, link, oval, radio, rect, shape, stack, star''で利用できます。
1181
+
1182
+ `click`イベントハンドラはスタイルに保存されます。解説は[[Events.click]]メソッドを見てください。
1183
+
1184
+ === :curve » a number ===
1185
+
1186
+ ''background, border, rect''で利用できます。
1187
+
1188
+ 長方形の要素のそれぞれの曲がった角の半径です。例として、6を設定した場合、長方形の角は
1189
+ 6ピクセルの半径のカーブを与えられます。
1190
+
1191
+ === :displace_left » a number ===
1192
+
1193
+ ''すべてのスロットと要素''で利用できます。
1194
+
1195
+ 形状、テキストブロックまたはその他のどんな種類のオブジェクトでも左か右に置き換えます。
1196
+ 正数は与えられた数のピクセルによって右へ置き換え、負数は左へ置き換えます。
1197
+ オブジェクトを置き換えることはページの実際のレイアウトに影響を与えません。
1198
+ この振る舞いに少し驚くかもしれないので、このスタイルを利用する前に、[[Position.displace]]の
1199
+ ドキュメントを読むようにしてください。
1200
+
1201
+ '''注意:''' Purple Shoesは`:displace_left`スタイルをサポートしていません。
1202
+
1203
+ === :displace_top » a number ===
1204
+
1205
+ ''すべてのスロットと要素''で利用できます。
1206
+
1207
+ 形状、テキストブロックまたはその他のどんな種類のオブジェクトでも上か下に置き換えます。
1208
+ 正数は与えられた数のピクセルによって下へ置き換え、負数は上へ置き換えます。
1209
+ オブジェクトを置き換えることはページの実際のレイアウトやオブジェクトの本当の座標に影響を与えません。
1210
+ この振る舞いに少し驚くかもしれないので、[[Position.displace]]のドキュメントを読んでください。
1211
+
1212
+ '''注意:''' Purple Shoesは`:displace_top`スタイルをサポートしていません。
1213
+
1214
+ === :emphasis » a string ===
1215
+
1216
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1217
+
1218
+ 強調によってテキストを整えます。(一般的にはイタリック体にされます。)
1219
+
1220
+ このスタイルは3つの設定ができます:
1221
+
1222
+ * "normal" - 直立のフォント。
1223
+ * "oblique" - ローマン体の傾いたフォント。
1224
+ * "italic" - イタリック体の傾いたフォント。
1225
+
1226
+ === :family » a string ===
1227
+
1228
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1229
+
1230
+ 与えられたフォントファミリーでテキストを整えます。文字列はフォントファミリー名かカンマで区切られた
1231
+ フォントファミリーの一覧を含むべきです。
1232
+
1233
+ === :fill » a hex code, a RGB array or a range of either ===
1234
+
1235
+ ''background, banner, border, caption, inscription, para, line, oval,
1236
+ rect, shape, star, subtitle, tagline, title''で利用できます。
1237
+
1238
+ 背景のペンの色です。形状では、これは形状の内側を塗りつぶすペンキの色です。
1239
+ テキストなどでは、この色で背景が塗られます。(まるで蛍光ペンでマークされたように)
1240
+
1241
+ === :font » a string ===
1242
+
1243
+ ''banner, caption, inscription, para, subtitle, tagline, title''で利用できます。
1244
+
1245
+ フォントの種類でテキストを整えます。この文字列は非常に柔軟ですが、
1246
+ "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]"の形である必要があり、
1247
+ FAMILY-LISTの部分は任意にカンマで終わりカンマで区切られたフォントファミリーの一覧、
1248
+ STYLE_OPTIONSはvariant、weight、stretch、またはgravityなどの空白で区切られた
1249
+ スタイルを表現する単語の一覧、そしてSIZEは(ポイントのサイズの)10進数または絶対的な
1250
+ サイズのために単位修飾子"px"を任意に続けます。オプションのどれかは設定されないかもしれません。
1251
+ FAMILY-LISTが設定されない場合は、デフォルトフォントファミリー(Arial)が利用されます。
1252
+
1253
+ === :front » true or false ===
1254
+
1255
+ ''shapes, image, textblocks''で利用できます。
1256
+
1257
+ 他の要素の前に配置されます。
1258
+
1259
+ === :group » a string ===
1260
+
1261
+ ''radio''で利用できます。
1262
+
1263
+ どのグループにラジオボタンが所属するかを示します。この設定がない場合は、ラジオボタンは
1264
+ 周辺のスロットのラジオボタンとグループ化されます。ラジオボタンを"グループ化"することはスクリーン上で
1265
+ お互いに隣接してグループ化されることを意味するのではありません。
1266
+ それは、一度にグループから一つだけのラジオボタンだけを選択できることを意味します。
1267
+
1268
+ 文字列にスタイルを与えることによって、ラジオボタンは同じグループ名を持つ他のラジオボタンとグループ化されます。
1269
+
1270
+ === :height » a number ===
1271
+
1272
+ ''すべてのスロットと要素''で利用できます。
1273
+
1274
+ オブジェクトの高さをピクセルで設定します。数値が10進数なら、その高さは親の高さの
1275
+ パーセンテージになります。(0.0は0%に、1.0は100%になります。)
1276
+
1277
+ === :hidden » true or false ===
1278
+
1279
+ ''すべてのスロットと要素''で利用できます。
1280
+
1281
+ オブジェクトの表示または非表示です。すべてのオブジェクトにとって`:hidden => true`は
1282
+ 画面上での非表示になります。その子供のスロットと要素でも同様です。
1283
+
1284
+ {{{
1285
+ Shoes.app do
1286
+ slot = stack hidden: true do
1287
+ title 'hello'
1288
+ flow do
1289
+ image File.join DIR, '../samples/loogink.png'
1290
+ end
1291
+ para link('Go go!'){alert 'hi'}
1292
+ end
1293
+ timer(2){slot.show}
1294
+ timer(5){slot.hide}
1295
+ end
1296
+ }}}
1297
+
1298
+ '''注意:''' 今のところPurple Shoesで`:hidden`スタイルをサポートしている要素は、
1299
+ slots, shapes, textblocks, imagesのみです。
1300
+
1301
+ === :inner » a number ===
1302
+
1303
+ ''star''で利用できます。
1304
+
1305
+ 内側の半径のサイズ(ピクセル)です。その内側の半径は点が別れ始める星の中に中空でない円を描きます。
1306
+
1307
+ === :items » an array ===
1308
+
1309
+ ''list_box''で利用できます。
1310
+
1311
+ リストボックスの項目の一覧です。例のために[[Element.list_box]]メソッドを見てください。
1312
+
1313
+ === :justify » true or false ===
1314
+
1315
+ ''banner, caption, inscription, para, subtitle, tagline, title''で利用できます。
1316
+
1317
+ 均一に水平にテキストの間隔を開けます。
1318
+
1319
+ === :kerning » a number ===
1320
+
1321
+ ''banner, caption, code, del, em, ins, inscription, link, para, span,
1322
+ strong, sub, sup, subtitle, tagline, title''で利用できます。
1323
+
1324
+ 文字の間に自然な空白をピクセルで追加します。
1325
+
1326
+ '''注意:''' Purple Shoesは`:kerning`スタイルをサポートしていません。
1327
+
1328
+ === :leading » a number ===
1329
+
1330
+ ''banner, caption, inscription, para, subtitle, tagline, title''で利用できます。
1331
+
1332
+ テキストブロックの行間に空白を設定します。デフォルトは4ピクセルです。
1333
+
1334
+ === :left » a number ===
1335
+
1336
+ ''すべてのスロットと要素''で利用できます。
1337
+
1338
+ オブジェクトの左の座標を特定のピクセルに設定します。
1339
+ `:left => 10`の設定はそのオブジェクトを含むスロットの左の端からオブジェクトの左の端が10ピクセル
1340
+ 離れた位置に配置します。このleftのスタイルが設定されていない(または`nil`が設定される)なら、
1341
+ そのオブジェクトはそれを囲んでいる他のオブジェクトとともに動くでしょう。
1342
+
1343
+ === :margin » a number or an array of four numbers ===
1344
+
1345
+ ''すべてのスロットと要素''で利用できます。
1346
+
1347
+ マージンは要素の周囲に間隔をあけます。
1348
+ それぞれの要素はleft、top、right、そしてbottomのマージンを持っています。
1349
+ `:margin`スタイルに一つの数が設定されると、要素の周囲の間隔は均一にその数にとなります。
1350
+ 言い換えると、`:margin => 8`を設定すると、その要素の周囲のすべてのマージンは8ピクセルの
1351
+ 長さに設定されます。
1352
+
1353
+ このスタイルは4つの数を`[left, top, right, bottom]`の形の配列で与えることもできます。
1354
+
1355
+ === :margin_bottom » a number ===
1356
+
1357
+ ''すべてのスロットと要素''で利用できます。
1358
+
1359
+ 要素の下側(bottom)のマージンをピクセルで設定します。
1360
+
1361
+ === :margin_left » a number ===
1362
+
1363
+ ''すべてのスロットと要素''で利用できます。
1364
+
1365
+ 要素の左側(left)のマージンをピクセルで設定します。
1366
+
1367
+ === :margin_right » a number ===
1368
+
1369
+ ''すべてのスロットと要素''で利用できます。
1370
+
1371
+ 要素の右側(right)のマージンをピクセルで設定します。
1372
+
1373
+ === :margin_top » a number ===
1374
+
1375
+ ''すべてのスロットと要素''で利用できます。
1376
+
1377
+ 要素の上側(top)のマージンをピクセルで設定します。
1378
+
1379
+ === :outer » a number ===
1380
+
1381
+ ''star''で利用できます。
1382
+
1383
+ 星の外側の半径(''全''幅の半分)をピクセルで設定します。
1384
+
1385
+ === :points » a number ===
1386
+
1387
+ ''star''で利用できます。
1388
+
1389
+ その星はいくつの頂点を持ちますか?`:points => 5`のスタイルは5つの頂点を持つ星を作成します。
1390
+
1391
+ === :radius » a number ===
1392
+
1393
+ ''oval''で利用できます。
1394
+
1395
+ それらの要素に半径(直径または全幅の半分)を設定します。
1396
+ これを設定することは、この数値の2倍の`:width`と`:height`を設定することと同等です。
1397
+
1398
+ === :right » a number ===
1399
+
1400
+ ''すべてのスロットと要素''で利用できます。
1401
+
1402
+ 要素の右端の座標をピクセルで設定します。その端はコンテナの右端に対して配置されます。
1403
+ そのため、`:right => 0`は、スロットの右端とその右端が接するように要素を配置するでしょう。
1404
+ 一方`:right => 20`は要素の右端をそのスロットの右端から左側に向けて20ピクセル
1405
+ 離れたところに配置します。
1406
+
1407
+ '''注意:''' Purple Shoesは`:right`スタイルをサポートしていません。
1408
+
1409
+ === :rise » a number ===
1410
+
1411
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1412
+
1413
+ テキストのフォントを基準から上げたり下げたりします。
1414
+ 例えば、[[Element.sup]]は10ピクセルの`:rise`を行います。
1415
+ 逆に、[[Element.sub]]の要素は-10ピクセルの`:rise`となります。
1416
+
1417
+ === :scroll » true or false ===
1418
+
1419
+ ''flow, stack''で利用できます。
1420
+
1421
+ スロットをスクロールするスロットとします。
1422
+ `:scroll => true`が設定され、そのコンテンツがスロットの高さ以上の場合はスクロールバーが
1423
+ スロットに表示されます。スクロールバーは必要に応じて表示したり非表示になります。
1424
+ それはスロットの幅の内側で表示されるので、スクロールバーのあるなしに関わらず、スロットの幅は
1425
+ 決して変わらないことを意味します。
1426
+
1427
+ '''注意:''' Purple Shoesでは制約があります。今のところ`:scroll`スタイルはお試し版です。
1428
+
1429
+ * スロットのインスタンスメソッド(clear, hide, etc.)が期待通り動きません。
1430
+ * マウスイベントをハンドリングできません。
1431
+ * `flush`メソッドを明示的に記述する必要があります。
1432
+
1433
+ {{{
1434
+ Shoes.app do
1435
+ s = stack left: 100, top: 50, width: 300,
1436
+ height: 100, scroll: true do
1437
+ background gold
1438
+ image File.join(DIR, '../samples/loogink.png')
1439
+ 10.times{para 'hello'}
1440
+ flush
1441
+ end
1442
+ end
1443
+ }}}
1444
+
1445
+ === :secret » true or false ===
1446
+
1447
+ ''ask, edit_line''で利用できます。
1448
+
1449
+ パスワードフィールドのために利用され、この設定は入力された文字を画面上で表示されない
1450
+ ようにします。そのかわり、置き換えられた文字(たとえばアスタリスク)をそれぞれの文字が
1451
+ 入力されるごとに表示します。
1452
+
1453
+ === :size » a number ===
1454
+
1455
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1456
+
1457
+ このテキストブロックまたはテキストの一部の内部で利用されたフォントのサイズをピクセルで設定します。
1458
+
1459
+ フォントサイズは次の文字列を利用することでも大きくすることができるかもしれません:
1460
+
1461
+ * "xx-small" - 現在のサイズの57%
1462
+ * "x-small" - 現在のサイズの64%
1463
+ * "small" - 現在のサイズの83%
1464
+ * "medium" - サイズ変更なし
1465
+ * "large" - 現在のサイズの120%
1466
+ * "x-large" - 現在のサイズの143%
1467
+ * "xx-large" - 現在のサイズの173%
1468
+
1469
+ === :state » a string ===
1470
+
1471
+ ''button, check, edit_box, edit_line, list_box, radio''で利用できます。
1472
+
1473
+ この`:state`スタイルは編集されたくないコントロールを利用不能または固定するためにあります。
1474
+
1475
+ 利用可能なスタイルの設定:
1476
+
1477
+ * nil - コントロールはアクティブで編集可能です。
1478
+ * "readonly" - コントロールはアクティブですが編集不可能です。
1479
+ * "disabled" - コントロールはアクティブはなく(グレイアウト)、編集不可能です。
1480
+
1481
+ === :stretch » a string ===
1482
+
1483
+ ''banner, caption, code, del, em, ins, inscription, link, para, span,
1484
+ strong, sub, sup, subtitle, tagline, title''で利用できます。
1485
+
1486
+ テキストオブジェクトに伸縮したフォントを設定します。
1487
+
1488
+ 利用可能な設定:
1489
+
1490
+ * "condensed" - 狭い幅の文字
1491
+ * "normal" - 標準の幅の文字
1492
+ * "expanded" - 広い幅の文字
1493
+
1494
+ '''注意:''' Purple Shoesは`:stretch`スタイルをサポートしていません。
1495
+
1496
+ === :strikecolor » a RGB array ===
1497
+
1498
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1499
+
1500
+ テキストに棒線を引いて削除するときの線の色です。
1501
+
1502
+ === :strikethrough » a string ===
1503
+
1504
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1505
+
1506
+ このテキストに棒線を引いて削除しますか?2つのオプションがあります:
1507
+
1508
+ * "none" - 棒線を引いて削除しません。
1509
+ * "single" - 1本の棒線を引いて削除します。
1510
+
1511
+ === :stroke » a hex code, a rgb array or a range of either ===
1512
+
1513
+ ''background, banner, border, caption, inscription, para, line, oval,
1514
+ rect, shape, star, subtitle, tagline, title''で利用できます。
1515
+
1516
+ フォアグラウンドのペンの色です。形状の場合は描かれる線の色です。
1517
+ 段落や他のテキストでは、この色で文字が表示されます。
1518
+
1519
+ === :strokewidth » a number ===
1520
+
1521
+ ''background, border, line, oval, rect, shape, star''で利用できます。
1522
+
1523
+ 描かれる線のピクセルでの太さで、形状の線を特徴付けます。
1524
+ 例えば、数値の2が設定されればstrokewidthは2ピクセルになります。
1525
+
1526
+ === :text » a string ===
1527
+
1528
+ ''edit_box, edit_line''で利用できます。
1529
+
1530
+ edit_boxやedit_lineのコンテンツに表示されるメッセージを設定します。
1531
+
1532
+ === :top » a number ===
1533
+
1534
+ ''すべてのスロットと要素''で利用できます。
1535
+
1536
+ オブジェクトの上側の座標を、その親のスロットに対して設定します。
1537
+ オブジェクトに`:top => 40`が設定されたなら、オブジェクトの上端はそのオブジェクトを含む
1538
+ スロットの上端から40ピクセル下に配置されることを意味します。`:top`スタイルが与えられないなら、
1539
+ そのスロットの自然な流れでオブジェクトは自動的に配置されます。
1540
+
1541
+ === :undercolor » a RGB array ===
1542
+
1543
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1544
+
1545
+ テキストの下線に利用される色です。
1546
+
1547
+ === :underline » a string ===
1548
+
1549
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1550
+
1551
+ テキストに下線のスタイルを指示します。
1552
+
1553
+ この設定の選択肢は:
1554
+
1555
+ * "none" - 下線なし。 
1556
+ * "single" - 途切れのない下線。
1557
+ * "double" - 平行な途切れのない2本の下線。
1558
+ * "low" - フォントの基準より下の低い下線。(一般的に1つの文字に対してだけ、得にキーボードアクセラレータを表示するときに推奨されます。)
1559
+ * "error" - 波状の下線、通常はミススペルの指摘を見つけます。
1560
+
1561
+ === :variant » a string ===
1562
+
1563
+ ''banner, caption, code, del, em, ins, inscription, link, para, span,
1564
+ strong, sub, sup, subtitle, tagline, title''で利用できます。
1565
+
1566
+ テキストのグループのためにフォントを変化させます。2つの選択肢:
1567
+
1568
+ * "normal" - 通常のフォント。
1569
+ * "smallcaps" - 大文字が小さく変化することによって置き換えられた小文字のフォント。
1570
+
1571
+ '''注意:''' Purple Shoesは`:variant`スタイルをサポートしていません。
1572
+
1573
+ === :weight » a string ===
1574
+
1575
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1576
+
1577
+ テキストを太文字に設定します。一般的には、このスタイルは次の文字列の内の1つを設定します:
1578
+
1579
+ * "ultralight" - 超軽量の太さ (= 200)
1580
+ * "light" - 軽量の太さ (=300)
1581
+ * "normal" - 通常の太さ (= 400)
1582
+ * "semibold" - 通常と太文字の中間の太さ (=600)
1583
+ * "bold" - 太文字 (= 700)
1584
+ * "ultrabold" - 極端な太文字の太さ (= 800)
1585
+ * "heavy" - 重厚な太さ (= 900)
1586
+
1587
+ しかしながら、数値で太さを直接渡すこともできます。
1588
+
1589
+ === :width » a number ===
1590
+
1591
+ ''すべてのスロットと要素''で利用できます。
1592
+
1593
+ 要素の幅をピクセルで設定します。数値が10進数なら、その幅はパーセンテージに変換されます。
1594
+ (0.0は0%に、1.0は100%になります。)100%の幅は親のスロットを埋め尽くすことを意味します。
1595
+
1596
+ === :wrap » a number ===
1597
+
1598
+ ''banner, caption, inscription, para, span, subtitle, tagline, title''で利用できます。
1599
+
1600
+ どこで改行するか? 選択可能のオプションは以下の通りです。
1601
+
1602
+ * "word" - 単語の区切りで改行します。
1603
+ * "char" - 文字の区切りで改行します。そのため単語が分割される場合があります。
1604
+ * "trim" - はみ出した部分は省略します。
1605
+
1606
+ == Classes List ==
1607
+
1608
+ Purple Shoesで紹介するすべてのクラスの完全な一覧です。
1609
+
1610
+ こちら([[http://rdoc.info/github/ashbb/green_shoes/master/frames/file/README.md Green Shoes RDoc]])
1611
+ を参照下さい。
1612
+
1613
+ == Colors List ==
1614
+
1615
+ 以下はPurple Shoes全体で利用可能な色の一覧です。背景色または枠線の色として。
1616
+ 描かれる線や塗りつぶされる色として。これらの色の大部分はX11やHTMLのパレットから来ています。
1617
+
1618
+ これらの色はすべて名前によって利用できます。(そのため、どんなスロットの内部からでも
1619
+ `tomato`メソッドを呼ぶことで、すてきな赤みがかった色が手に入るでしょう。)
1620
+ それぞれの色の下には、[[Built-in.rgb]]メソッドで利用できる正確な数値を見つけることもできます。
1621
+
1622
+ {COLORS}
1623
+
1624
+ = Slots =
1625
+
1626
+ スロットは画像やテキストなどのレイアウトに使われる箱です。2つの最も一般的なスロットは
1627
+ `スタック(stack)`と`フロー(flow)`です。スロットはPurple Shoesの専門用語で"箱"または
1628
+ "キャンバス"とも言えます
1629
+
1630
+ マウスホイールやページアップやページダウンはあらゆるプラットフォームで普及しているため、
1631
+ 縦のスクロールだけが溢れて問題になりました。そのためPurple Shoesでは、まさにWEBのように
1632
+ 通常は幅が固定です。一方で高さは際限なく続いて行きます。
1633
+
1634
+ さて、そうしたいなら、どんなものでも幅や高さを指定することもできます。それはいくらかの数学を
1635
+ 用いるでしょうが、完璧かもしれません。
1636
+
1637
+ 一般的には、スタックとフローを使うことを提案するでしょう。ここでの目的は、あなたがいくらかの
1638
+ 幅を何かで満たして、幅を満たしながら、ページの下に進みたいということです。
1639
+ これらを、HTMLの"ブロック"と"インライン"のスタイルと類似しているのように考えることができます。
1640
+
1641
+ ==== Stacks ====
1642
+
1643
+ スタックは単純に要素の垂直なスタックです。スタック内のそれぞれの要素は、その上位の要素の
1644
+ 直下に配置されます。
1645
+
1646
+ また、スタックは箱のように形作られます。そのため、スタックが250の幅を与えられたら、
1647
+ そのスタックはそれ自身が250ピクセルの幅の要素となります。
1648
+
1649
+ 新しいスタックを作成するには[[Element.stack]]メソッドを利用し、それはすべてのスロットの
1650
+ 内部で利用できます。そのためスタックは他のスタックやフローを含むことができます。
1651
+
1652
+ ==== Flows ====
1653
+
1654
+ フローは要素をできるだけしっかりと詰め込みます。幅は満たされ、それらの下の要素を包みます。
1655
+ 互いに隣接して配置されたテキストの要素は一つのパラグラフとして表示されます。
1656
+ 画像とウィジェットは同じシリーズとして実行されます。
1657
+
1658
+ スタックのように、フローは箱です。そのためスタックとフローは安全に埋め込むことができ、
1659
+ それらのコンテンツに気を使うことなく、同質です。スタックとフローはそれらのコンテンツだけを
1660
+ 異なって扱います。
1661
+
1662
+ フローを作成するには[[Element.flow]]を呼びます。
1663
+ フローは他のフローやスタックを含むかもしれません。
1664
+
1665
+ 最後に:Purple Shoesのウィンドウはそれ自身がフローです。
1666
+
1667
+ == Art for Slots ==
1668
+
1669
+ それぞれのスロットは、色のついた形状やグラデーションなどでおおうことにできる白紙の表面の
1670
+ キャンバスのようなものです。
1671
+
1672
+ 多くの一般的な形状は`oval`と`rect`メソッドで描かれます。
1673
+ まず、絵筆の色を準備する必要があります。
1674
+
1675
+ `stroke`コマンドは線の色を設定します。
1676
+ `fill`コマンドは線の内部を塗りつぶすために利用する色を設定します。 
1677
+
1678
+ {{{
1679
+ #!ruby
1680
+ Shoes.app do
1681
+ stroke red
1682
+ fill blue
1683
+ oval top: 10, left: 10, radius: 100
1684
+ end
1685
+ }}}
1686
+
1687
+ このコードはまわりに赤い線のある青いパイを与えます。
1688
+ 100ピクセルの幅で、ウィンドウの左上から南東に少しのピクセルを配置します。
1689
+
1690
+ 上記の`blue`と`red`メソッドはRGB配列です。
1691
+ どうやって色を混ぜるかはColorsセクションを見てください。
1692
+
1693
+ ==== Processing と NodeBox からのインスピレーション ====
1694
+
1695
+ この技巧的なメソッドの大抵は文字通りPythonのドローイングキットのNodeBoxから来ています。
1696
+ 次に、NodeBoxは多くのアイデアを、グラフィックとアニメーションのためのJavaのような言語である
1697
+ Processingから得ています。私はそれらのすばらしいプログラムの作者から大きな恩を受けています。
1698
+
1699
+ Purple ShoesはNodeBoxとProcessingから少しの点が違います。
1700
+ 例えば、Purple Shoesはそれ自身のRGB配列を持っていることを含めて、異なるカラーメソッドを
1701
+ 持っていますが、それらはとてもProcessingのカラーメソッドに似ています。
1702
+ そしてPurple Shoesは線を描くことや形状内を塗りつぶすために画像やグラデーションを
1703
+ 利用することも許しています。
1704
+
1705
+ ShoesはいくつかのアニメーションのアイデアをProcessingから取り入れており、
1706
+ Processingのメソッドをしっかりと参考にしようとしながらそれを拡張しています。
1707
+
1708
+ === arc(left, top, width, height, angle1, angle2) » Shoes::Oval ===
1709
+
1710
+ 弧の形状(楕円形の一部)を座標(left, top)に描きます。
1711
+ このメソッドは`:angle1`と`:angle2`のスタイルを提供することにより [[oval]]より
1712
+ 少し多くの制御をが行えます。(実際には、`:angle1`に0と`:angle2`に`2*Math::PI`を
1713
+ 設定することにより、`oval`メソッドをまねることができます。)
1714
+
1715
+ {{{
1716
+ Shoes.app do
1717
+ fill yellow..green
1718
+ stroke red..blue
1719
+ strokewidth 10
1720
+ cap :curve
1721
+
1722
+ a = animate 12 do |i|
1723
+ @e.remove if @e
1724
+ r = i * (Math::PI * 0.01)
1725
+ @e = arc 100, 50, 180, 360, 0, r
1726
+ a.stop if r >= 2*Math::PI
1727
+ end
1728
+ end
1729
+ }}}
1730
+
1731
+ === arrow(left, top, width) » Shoes::Shape ===
1732
+
1733
+ 座標(left, top)に`width`ピクセルの矢を描きます。
1734
+
1735
+ {{{
1736
+ Shoes.app do
1737
+ para 'An arrow shape:', left: 20, top: 10
1738
+ arrow 30, 40, 70
1739
+ end
1740
+ }}}
1741
+
1742
+ === cap(:curve or :rect or :project) » self ===
1743
+
1744
+ 描くすべての線の終点の形状である線の頂点を設定します。
1745
+ `:curve`が設定されるなら、終点はまるくなります。
1746
+ デフォルトは`:rect`で、線の終点は突然に平らになります。
1747
+ `:project`の頂点も平らですが、棒の外側は少し長くなります。
1748
+
1749
+ {{{
1750
+ Shoes.app do
1751
+ nofill
1752
+ strokewidth 20
1753
+ stroke green
1754
+ cap :curve
1755
+ line 100, 100, 300, 100
1756
+ line 100, 250, 300, 300
1757
+ cap :rect
1758
+ line 100, 150, 300, 150
1759
+ stroke blue
1760
+ cap :project
1761
+ line 100, 200, 300, 200
1762
+ line 200, 100, 200, 300
1763
+ strokewidth 1
1764
+ stroke red
1765
+ rect 100, 100, 200, 200
1766
+ end
1767
+ }}}
1768
+
1769
+ === fill(pattern) » pattern ===
1770
+
1771
+ 塗りつぶすバケツの色の指定(またはパターン)を設定します。
1772
+ パターンは色やグラデーションまたは画像が設定できます。
1773
+ そして、一度塗りつぶすバケツが設定されたら、選択されたパターンで色づけられた形状を
1774
+ 描くことができます。
1775
+
1776
+ 画像のパターンで星を描くためには:
1777
+
1778
+ {{{
1779
+ #!ruby
1780
+ Shoes.app do
1781
+ fill File.join(DIR, "../static/gshoes-icon.png")
1782
+ star 200, 200, 5, 100, 50
1783
+ end
1784
+ }}}
1785
+
1786
+ 塗りつぶすバケツをクリアするには`nofill`を使ってください。
1787
+ そして`stroke`メソッドを利用して線(星の枠線)の色を設定してください。
1788
+
1789
+ === nofill() » self ===
1790
+
1791
+ 塗りつぶす色を削除するため、形状は塗りつぶされずに描かれます。
1792
+ その代わりに、形状は線だけを持ち、中央を透明のままにします。
1793
+
1794
+ === nostroke() » self ===
1795
+
1796
+ 線の色を空にします。形状は外側の線が描かれなくなります。
1797
+ `nofill`も設定された場合は、形状は表示されずに描かれます。
1798
+
1799
+ === line(left, top, x2, y2) » Shoes::Line ===
1800
+
1801
+ 現在の線の色(別名"stroke")を使って座標(left, top)から(x2, y2)まで線を描きます。
1802
+
1803
+ === oval(left, top, radius) » Shoes::Oval ===
1804
+
1805
+ 座標(left, top)ピクセルに`radius`ピクセルの幅と高さの円を描きます。
1806
+ 線の色や塗りつぶす色が形状を描くために利用されます。
1807
+ デフォルトでは、座標は楕円形の最も左上の角ですが、これは[[Art.transform]]メソッドを
1808
+ 呼ぶことや、次のメソッドの下の`:center`スタイルを使用することによって変更することができます。
1809
+
1810
+ {{{
1811
+ #!ruby
1812
+ Shoes.app do
1813
+ stroke blue
1814
+ strokewidth 4
1815
+ fill black
1816
+ oval 10, 10, 50
1817
+ end
1818
+ }}}
1819
+
1820
+ 様々な比率の楕円形を描くためには、`oval(left, top, width, height)`のシンタックスを
1821
+ 利用してもいいです。
1822
+
1823
+ === oval(styles) » Shoes::Oval ===
1824
+
1825
+ スタイルのハッシュを利用して円を描きます。次のスタイルがサポートされています:
1826
+
1827
+ * `top`: 楕円形の囲いのy座標。
1828
+ * `left`: 楕円形の囲いのx座標。
1829
+ * `radius`: 円の幅と高さ。
1830
+ * `width`: 楕円形の幅のピクセルでの指定。
1831
+ * `height`: 楕円形の高さのピクセルでの指定。
1832
+ * `center`: 座標を楕円形の中央に指定しますか?(trueまたはfalse)
1833
+
1834
+ これらのスタイルは形状オブジェクトの`style`メソッドを利用して変更されます。
1835
+
1836
+ '''注意:''' Purple Shoesは`:center`スタイルをサポートしていません。
1837
+
1838
+ === rect(top, left, width, height, corners = 0) » Shoes::Rect ===
1839
+
1840
+ 座標(left, top)からwidth x heightの寸法の長方形を描きます。
1841
+ オプションとして、5番目の引数(ピクセルでの角の半径)により長方形の角を丸くすることもできます。
1842
+ 他の形状と同様に、長方形は描く線の色や塗りつぶす色を利用して描かれます。
1843
+
1844
+ {{{
1845
+ #!ruby
1846
+ Shoes.app do
1847
+ stroke rgb(0.5, 0.5, 0.7)
1848
+ fill rgb(1.0, 1.0, 0.9)
1849
+ rect 10, 10, self.width - 20, self.height - 20
1850
+ end
1851
+ }}}
1852
+
1853
+ 上記のサンプルは角の周囲に10ピクセルのマージンを残して、その親の箱の範囲を塗りつぶす
1854
+ 長方形を描きます。デフォルトで親の箱を塗りつぶした長方形のためには`background`も
1855
+ 見てください。
1856
+
1857
+ === rect(styles) » Shoes::Rect ===
1858
+
1859
+ スタイルのハッシュを利用して長方形を描きます。次のスタイルがサポートされています:
1860
+
1861
+ * `top`: 長方形のy座標。
1862
+ * `left`: 長方形のx座標。
1863
+ * `curve`: 長方形の角の半径のピクセル。
1864
+ * `width`: 長方形のピクセルによる幅。
1865
+ * `height`:長方形のピクセルによる高さ。
1866
+ * `center`: 座標を長方形の中央に指定しますか?(trueまたはfalse)
1867
+
1868
+ これらのスタイルは形状オブジェクトの`style`メソッドを利用して変更されます。
1869
+
1870
+ '''注意:''' Purple Shoesは`:center`スタイルをサポートしていません。
1871
+
1872
+ === rotate(degrees: a number) » self ===
1873
+
1874
+ 形状をその角度で描画するために、`度(degrees)`数により描画のために利用される
1875
+ 範囲を回転させます。
1876
+
1877
+ 下の例では、長方形は(30, 30)に45度回転されて描かれます。
1878
+
1879
+ {{{
1880
+ #!ruby
1881
+ Shoes.app do
1882
+ fill "#333"
1883
+ rotate 45
1884
+ rect 30, 30, 40, 40
1885
+ end
1886
+ }}}
1887
+
1888
+ === shape(left, top) { ... } » Shoes::Shape ===
1889
+
1890
+ (left, top)から開始して、続いてブロックの内部で`line_to`、`move_to`、`curve_to`
1891
+ そして`arc_to`を呼ぶことにより、任意の形状を表現(記述)します。
1892
+ 曲がったり弧を描いたりする長い線の形状をスケッチして見ることができます。
1893
+
1894
+ {{{
1895
+ Shoes.app do
1896
+ fill yellow
1897
+ shape do
1898
+ move_to 50, 30
1899
+ curve_to 100, 100, 10, 20, 100, 50
1900
+ line_to 20, 100
1901
+ line_to 30, 30
1902
+ end
1903
+ end
1904
+ }}}
1905
+
1906
+ 形状は他の形状を含むこともできます。
1907
+ そして、形状の内部に[[Art.oval]]、[[Art.rect]]、[[Art.line]]、[[Art.star]]または
1908
+ [[Art.arrow]](さらに、[[Art]]セクションの他のメソッドすべて)を配置することができますが、
1909
+ それらは線の一部ではないでしょう。形状のグループのようなそれらは、すべて1つとして描かれます。
1910
+
1911
+ '''注意:''' Purple Shoesでは、上記の`line_to`、`move_to`、`curve_to`は
1912
+ Cairo::Contextのメソッドです。ブロックの中で直接それらを呼び出しています。
1913
+ そのため、Purple Shoesでは`arc_to`はサポートしていません。また他の形状もShapeブロック
1914
+ 内に含めることができません。
1915
+
1916
+ === star(left, top, points = 10, outer = 100.0, inner = 50.0) » Shoes::Star ===
1917
+
1918
+ 描く線の色や塗りつぶす色を利用して星を描きます。
1919
+ 星は(left, top)の座標を中心点として`頂点(points)`の数とともに配置されます。
1920
+ `outer`の幅は星の全半径をを定義します;`inner`の幅は頂点の始まる星の中央の半径を
1921
+ 指定します。
1922
+
1923
+ === stroke(pattern) » pattern ===
1924
+
1925
+ スロットのアクティブな線の色を設定します。`pattern`は色、グラデーションまたは画像で、
1926
+ それらはすべて"patterns"に分類されます。その線の色はそれに続く形状すべての枠線を
1927
+ 描くときに利用されます。
1928
+
1929
+ つまり、まわりに赤い線を持つ矢印を描くには:
1930
+
1931
+ {{{
1932
+ #!ruby
1933
+ Shoes.app do
1934
+ stroke red
1935
+ nofill
1936
+ star 100, 100
1937
+ end
1938
+ }}}
1939
+
1940
+ 線の色をクリアするには、`nostroke`メソッドを利用します。
1941
+
1942
+ === strokewidth(a number) » self ===
1943
+
1944
+ スロットの内部で描かれるすべての線のサイズを設定します。
1945
+ `stroke`メソッドが線の色を変更する一方、`strokewidth`メソッドは線のサイズを
1946
+ ピクセルで変更します。`strokewidth(4)`を呼ぶことにより4ピクセルの太さで線を描きます。
1947
+
1948
+ === transform(:center or :corner) » self ===
1949
+
1950
+ (`skew`や`rotate`のような)変化は形状の中心あたりで実行されるべきですか?
1951
+ またはその形状の角ですか?Shoesの初期値は`:corner`です。
1952
+
1953
+ '''注意:''' Purple Shoesは`:transform`メソッドをサポートしていません。
1954
+
1955
+ === translate(left, top) » self ===
1956
+
1957
+ スロットの描画の範囲を開始する位置を移動します。
1958
+ 通常は、すべての形状がこの位置から描くことができるように、その範囲は左上の角の
1959
+ (0, 0)から開始します。`translate`により開始位置が(10, 20)に移動されて、
1960
+ (50, 60)に形状が描かれるなら、その形状は実際にはスロットの(60, 80)に描かれます。
1961
+
1962
+ '''注意:''' Purple Shoesは`:translate`メソッドをサポートしていません。
1963
+
1964
+ == Element Creation ==
1965
+
1966
+ Purple Shoesは幅広い種類の要素を持っており、その多くをHTMLからよいところを選んで
1967
+ 採用しています。このページはどのようにしてスロットにそれらの要素を作成するかを記述して
1968
+ います。それらの要素を配置した後でさらにどのようにして変更したり利用するのかについては、
1969
+ このマニュアルの要素(Elements)のセクションを見てください。
1970
+
1971
+ === animate(fps) { |frame| ... } » Shoes::Anim ===
1972
+
1973
+ アプリケーションをそのままにして並列で実行するアニメーションタイマーを開始します。
1974
+ `fps`は秒ごとのフレームの数です。
1975
+ この数は付属するブロックが1秒に何回呼ばれるのかを決定します。
1976
+
1977
+ このブロックは`frame`の数が与えられます。
1978
+ `frame`の数はゼロから始まり、そのブロックが何フレームのアニメーションを表示したのかを
1979
+ 教えます。
1980
+
1981
+ {{{
1982
+ #!ruby
1983
+ Shoes.app do
1984
+ counter = para "STARTING"
1985
+ animate 24 do |frame|
1986
+ counter.replace "FRAME #{frame}"
1987
+ end
1988
+ end
1989
+ }}}
1990
+
1991
+ 上記のアニメーションは1秒間に24回表示されます。
1992
+ 数が与えられないなら、`fps`のデフォルトは10です。
1993
+
1994
+ === background(pattern) » Shoes::Background ===
1995
+
1996
+ 色(またはパターン)を指定して背景(Background)要素を描きます。
1997
+ パターンは色、グラデーションまたは画像です。色と画像は背景全体に敷き詰めます。
1998
+ グラデーションは背景を塗りつぶすように伸びます。
1999
+
2000
+ '''注意してください:''' 背景は実際には要素であり、スタイルではありません。
2001
+ HTMLは背景をスタイルのようにあつかいます。
2002
+ それはすべての箱は一つの背景だけを持てることを意味します。
2003
+ Purple Shoesは背景の要素を重ねることができます。
2004
+
2005
+ {{{
2006
+ #!ruby
2007
+ Shoes.app do
2008
+ background black
2009
+ background white, width: 50
2010
+ end
2011
+ }}}
2012
+
2013
+ 上記の例は二つの背景を塗ります。
2014
+ まず、黒い背景がアプリケーションの表面のエリア全体に塗られます。
2015
+ そして、50ピクセルの白い縞が左側にそって塗られます。
2016
+
2017
+ === banner(text) » Shoes::Banner ===
2018
+
2019
+ バナー(Banner)のテキストブロックを作成します。
2020
+ Purple Shoesは自動的に48ピクセルの大きさにテキストを整形します。
2021
+
2022
+ === border(text, :strokewidth => a number) » Shoes::Border ===
2023
+
2024
+ 色(またはパターン)を指定して枠線(Border)の要素を描きます。
2025
+ パターンは色、グラデーションまたは画像です。色と画像は枠線全体に敷き詰めます。
2026
+ グラデーションは背景を塗りつぶすように伸びます。
2027
+
2028
+ '''注意してください:''' 背景のように、枠線は実際には要素であり、スタイルではありません。
2029
+ HTMLは背景や枠線をスタイルのようにあつかいます。
2030
+ それはすべての箱は一つの枠線だけを持てることを意味します。
2031
+ Purple Shoesはテキストブロック、画像、他のすべてのものにそって、枠線や背景の要素を
2032
+ 重ねることができます。
2033
+
2034
+ === button(text) { ... } » Shoes::Button ===
2035
+
2036
+ 表面にわたってメッセージ`テキスト(text)`の書かれた押しボタンを追加します。
2037
+ ボタンが押されたときに呼ばれる、任意のブロックを取り付けることができます。
2038
+
2039
+ === caption(text) » Shoes::Caption ===
2040
+
2041
+ キャプション(Caption)テキストブロックを作成します。
2042
+ Purple Shoesは14ピクセルの大きさにこのテキストを整形します。
2043
+
2044
+ === check() » Shoes::Check ===
2045
+
2046
+ チェックボックスを追加します。
2047
+
2048
+ === code(text) » String ===
2049
+
2050
+ コード(Code)のテキストの一部を作成します。
2051
+ このテキストはデフォルトで等幅フォントになります。
2052
+
2053
+ === del(text) » String ===
2054
+
2055
+ デフォルトで中央に1本の棒線を引いてテキストを削除した、
2056
+ 削除された(Del)("deleted"の省略形)テキストの一部を作成します。
2057
+
2058
+ === dialog(styles) { ... } » Shoes::App ===
2059
+
2060
+ (まさに [[Element.window]]メソッドを実効したように)新しいアプリケーションのウィンドウを
2061
+ 開きますが、そのウィンドウはダイアログボックスの外観を与えられます。
2062
+
2063
+ '''注意:''' Purple Shoesは`dialog`メソッドをサポートしていません。
2064
+
2065
+ === edit_box(text, :accepts_tab => true or false) » Shoes::EditBox ===
2066
+
2067
+ スロットに大きなマルチラインのテキストエリアを追加します。
2068
+ この`text`はオプションでこの箱の開始時に与えられる文字列です。
2069
+ オプションのブロックをここに取り付けることができ、これはボックスのテキストに対するどんな種類の
2070
+ ユーザの変更でも呼び出されます。
2071
+
2072
+ `accepts_tab`にtrueを設定するとタブが挿入できます。
2073
+ `accepts_tab`にfalseを設定するとタブによるフォーカス移動ができます。
2074
+ デフォルトはfalseです。
2075
+
2076
+ {{{
2077
+ #!ruby
2078
+ Shoes.app do
2079
+ edit_box
2080
+ edit_box text: "HORRAY EDIT ME"
2081
+ edit_box text: "small one",
2082
+ width: 100, height: 160
2083
+ end
2084
+ }}}
2085
+
2086
+ === edit_line(text) » Shoes::EditLine ===
2087
+
2088
+ スロットに一行のテキストボックスを追加します。
2089
+ この`text`はオプションでこの箱の開始時に与えられる文字列です。
2090
+ オプションのブロックをここに取り付けることができ、これはボックスのテキストに対するどんな種類の
2091
+ ユーザの変更でも呼び出されます。
2092
+
2093
+ === em(text) » String ===
2094
+
2095
+ Em("emphasized"の省略形)テキストの一部を作成し、これはデフォルトでイタリック体で
2096
+ 整形されます。
2097
+
2098
+ === every(seconds) { |count| ... } » Shoes::Anim ===
2099
+
2100
+ `animate`メソッドとよく似たタイマーですが、より非常に遅いです。
2101
+ このタイマーは与えられた数の秒(seconds)で、取り付けられたブロックを実行します。
2102
+ そのため、例えば5秒毎にwebサイトを確認する必要があるなら、実際にwebサイトにpingを
2103
+ 打つコードを含むブロックと共に`every(300)`を呼び出します。
2104
+
2105
+ === flow(styles) { ... } » Shoes::Flow ===
2106
+
2107
+ フロー(flow)はPurple Shoesの要素を配置できる目に見えない箱(または"スロット")です。
2108
+ フローとスタックのどちらもメインの[[Slots]]のページでとても詳細に説明されます。
2109
+
2110
+ フローは要素を水平にまとめます。ものを垂直に積み重ねたままにするために
2111
+ [[Element.stack]]を利用するところで、フローはそのコンテンツをページの端から端にわたって
2112
+ 配置します。いったんページの最後に到達したら、フローは要素の新しい行を開始します。
2113
+
2114
+ === image(path) » Shoes::Image ===
2115
+
2116
+ 写真を表示するために[[Image]]の要素を作成します。
2117
+ PNG、JPEGそしてGIFのフォーマットが許されます。
2118
+
2119
+ `path`はファイルのパスまたはURLです。すべての画像はメモリに一時的にキャッシュされ、
2120
+ リモートの画像はローカルのユーザの個人的なShoesディレクトリにもキャッシュされます。
2121
+ リモートの画像はバックグラウンドでロードされます;ブラウザと同様に、画像はすぐには
2122
+ 表示されませんが、それらがロードされたときに表示されます。
2123
+
2124
+ '''注意:''' Purple Shoesは上述のローカルのユーザの個人的なShoesディレクトリへの
2125
+ キャッシュをサポートしていません。
2126
+
2127
+ === imagesize(path) » [width, height] ===
2128
+
2129
+ 画像の幅と高さを素早く手に入れます。
2130
+ 画像はキャッシュにロードされず表示もされません。
2131
+
2132
+ 緊急の注意:このメソッドはリモートの画像(ハードディスクドライブからではなくHTTPにより
2133
+ ロードされた)には利用できません。
2134
+
2135
+ === ins(text) » String ===
2136
+
2137
+ 一本の下線のPurple Shoesスタイルである、Ins("inserted"の省略形)テキストの一部を
2138
+ 作成します。
2139
+
2140
+ === inscription(text) » Shoes::Inscription ===
2141
+
2142
+ 題名(Inscription)のテキストブロックを作成します。
2143
+ Purple Shoesは10ピクセルの大きさにこのテキストを整形します。
2144
+
2145
+ === link(text, :click => proc or string) » Shoes::Link ===
2146
+
2147
+ 一本の下線を持ち線の色を#06E(青色)に整形したリンクテキストブロックを作成します。
2148
+ デフォルトのリンクホバースタイルは一本の下線を持ち線の色を#039(ダークブルー)に整形します。
2149
+
2150
+ === link(text){ ... } » Shoes::Link ===
2151
+
2152
+ この形式でもリンクテキストブロックを作成できます。
2153
+ この場合、ユーザがリンクテキストをクリックするとブロック内のコードが実行されます。
2154
+
2155
+ === list_box(:items => [strings, ...]) » Shoes::ListBox ===
2156
+
2157
+ `items`の配列のすべてのエントリを含むドロップダウンリストボックスを追加します。
2158
+ オプションでブロックを取り付けることができ、これはユーザがボックスの項目を選択したら
2159
+ 呼び出されます。
2160
+
2161
+ {{{
2162
+ #!ruby
2163
+ Shoes.app do
2164
+ stack margin: 10 do
2165
+ para "Pick a card:"
2166
+ list_box items: ["Jac", "Ace", "Jok"] do |item|
2167
+ @p.text = "#{item} was picked!"
2168
+ end
2169
+ @p = para
2170
+ end
2171
+ end
2172
+ }}}
2173
+
2174
+ 選択された文字列をを得るために`ListBox#text`を呼び出します。
2175
+ より多くのヘルプは`リストボックス(ListBox)`のセクションの`ネイティブ`コントロールを見てください。
2176
+
2177
+ === progress() » Shoes::Progress ===
2178
+
2179
+ プログレスバーを追加します。
2180
+
2181
+ === para(text) » Shoes::Para ===
2182
+
2183
+ 12ピクセルの大きさに整形する、Para("paragraph"の省略形)テキストブロックを作成します。
2184
+
2185
+ === radio(group name: a string or symbol) » Shoes::Radio ===
2186
+
2187
+ ラジオボタンを追加します。`グループ名(group name)`が与えられたら、ラジオボタンは
2188
+ グループの一部だとみなされます。同じグループのラジオボタンのうちで、
2189
+ 1つだけをクリックすることができます。(もしグループ名が与えられなければ、そのラジオボタンは
2190
+ 同じスロットの他のすべてのラジオボタンとグループ化されます)
2191
+
2192
+ === span(text) » String ===
2193
+
2194
+ デフォルトでスタイル付けされていない、Spanテキストの一部を作成します。
2195
+
2196
+ {{{
2197
+ Shoes.app do
2198
+ tagline "\n", 'hello ' * 5,
2199
+ span(em('Purple Shoes'), size: 8, rise: 15)
2200
+ end
2201
+ }}}
2202
+
2203
+ === stack(styles) { ... } » Shoes::Stack ===
2204
+
2205
+ 新しいスタックを作成します。スタックはスロットの一種です。
2206
+ (スタックとフローの完全な説明はメインの[[Slots]]のページを見てください。)
2207
+
2208
+ 要するに、スタックは要素を配置するための目に見えない箱("スロット")です。
2209
+ スタックにボタンや画像などを追加して、それらは垂直に積み上げられます。
2210
+ そう、それらは重なります。
2211
+
2212
+ === strong(text) » String ===
2213
+
2214
+ デフォルトで太字に整形された、Strongテキストの一部を作成します。
2215
+
2216
+ === sub(text) » String ===
2217
+
2218
+ デフォルトでテキストは10ピクセル(位置を)下げられx-smallフォントに整形された、
2219
+ Sub("subscript"の省略形)テキストの一部を作成します。
2220
+
2221
+ === subtitle(text) » Shoes::Subtitle ===
2222
+
2223
+ サブタイトル(Subtitle)テキストブロックを作成します。
2224
+ 26ピクセルの大きさにこのテキストを整形します。
2225
+
2226
+ === sup(text) » String ===
2227
+
2228
+ デフォルトでテキストは10ピクセル(位置を)上げられx-smallフォントに整形された、
2229
+ Sup("superscript"の省略形)テキストの一部を作成します。
2230
+
2231
+ === tagline(text) » Shoes::Tagline ===
2232
+
2233
+ タグライン(Tagline)テキストブロックを作成します。このテキストを18ピクセルの大きさに整形します。
2234
+
2235
+ === timer(seconds) { ... } » Fixnum ===
2236
+
2237
+ 1回だけのタイマーです。少しの秒(または分、時)後にいくらかのコードの実行をスケジュールしたい
2238
+ なら、ここにブロックとしてコードを取り付けることができます。
2239
+
2240
+ 今から5秒後にアラートボックスを表示するためには:
2241
+
2242
+ {{{
2243
+ #!ruby
2244
+ Shoes.app do
2245
+ timer 5 do
2246
+ alert "Your five seconds are up."
2247
+ end
2248
+ end
2249
+ }}}
2250
+
2251
+ === title(text) » Shoes::Title ===
2252
+
2253
+ タイトル(Title)テキストブロックを作成します。これらの要素を34ピクセルの大きさに整形します。
2254
+
2255
+ === video(path or url) » Shoes::Video ===
2256
+
2257
+ 動画を埋め込みます。音声を再生します。
2258
+
2259
+ === window(styles) { ... } » Shoes::App ===
2260
+
2261
+ 新しいアプリケーションウィンドウを開きます。
2262
+ このメソッドは初めにアプリケーションを開始するために使われる[[App.Shoes.app]]メソッドと
2263
+ ほとんど同一です。違いは`window`メソッドは新しいウィンドウの[[App.owner]]プロパティを
2264
+ 設定することです。(普通のShoes.appはその`owner`を`nil`に設定します。)
2265
+
2266
+ そのため、新しいウィンドウの`owner`はウィンドウを開始したShoes::Appに設定されるでしょう。
2267
+ この方法により子のウィンドウが親を呼べます。
2268
+
2269
+ {{{
2270
+ #!ruby
2271
+ Shoes.app title: "The Owner" do
2272
+ button "Pop up?" do
2273
+ window do
2274
+ para "Okay, popped up from [#{owner.inspect}]."
2275
+ end
2276
+ end
2277
+ end
2278
+ }}}
2279
+
2280
+ == Events ==
2281
+
2282
+ どのようにしてマウスのクリックを離したことやキーボードをタイプしたことが分かるか
2283
+ 不思議に思いませんか?スロットの内部でマウスが動いたときはいつでもイベントが
2284
+ スロットに送られます。また、キーが押されたときはいつでも。
2285
+ スロットが作成されたり破壊されたときでさえ。それぞれのそれらのイベントをブロックを
2286
+ 取り付けることができます。
2287
+
2288
+ マウスイベントは`motion`、`click`、`hover`そして`leave`を含みます。
2289
+ キーボードのタイピングは`keypress`イベントによって表されます。
2290
+ そして`start`や`finish`イベントはキャンバスを開始するときや破棄されたときを指し示します。
2291
+
2292
+ では、マウスでスロットの上をフロートするときに背景を変更したいとしましょう。
2293
+ スロットの内部にマウスがくるときに背景を変更するためには`hover`イベントを使います。
2294
+ そして、マウスがフロートして離れるときに戻すには`leave`を使います。
2295
+
2296
+ {{{
2297
+ #!ruby
2298
+ Shoes.app do
2299
+ s = stack width: 200, height: 200 do
2300
+ background red
2301
+ end
2302
+ s.hover do
2303
+ s.clear { background blue }
2304
+ end
2305
+ s.leave do
2306
+ s.clear { background red }
2307
+ end
2308
+ end
2309
+ }}}
2310
+
2311
+ === click { |button, left, top| ... } » self ===
2312
+
2313
+ マウスボタンがクリックされたときにはclickブロックが呼ばれます。
2314
+ `button`はマウスボタンのどれが押されたかの数です。
2315
+ `left`や`top`はどこがクリックされたかのマウスの座標です。
2316
+
2317
+ マウスのクリックを離した瞬間をとらえるには、[[Events.release]]イベントを見てください。
2318
+
2319
+ === finish { |self| ... } » self ===
2320
+
2321
+ スロットが取り除かれたときは、finishイベントが発生します。
2322
+ finishブロックはすぐに`self`を手渡し、スロットオブジェクトは取り除かれます。
2323
+
2324
+ '''注意:''' Purple Shoesは`finish`メソッドをサポートしていません。
2325
+
2326
+ === hover { |self| ... } » self ===
2327
+
2328
+ hoverイベントはスロットにマウスが入ったときに発生します。
2329
+ このブロックは`self`を手に入れ、どのオブジェクトの上を通ったかを意味します。
2330
+
2331
+ スロットからマウスが出ていくことをとらえるには、[[Events.leave]]イベントを確認してください。
2332
+
2333
+ === keypress { |key| ... } » self ===
2334
+
2335
+ キー(またはキーの組み合わせ)がいつ押されても、そのブロックは呼ばれます。
2336
+ そのブロックにはキーの性質を表す文字列である`key`を送られます。
2337
+
2338
+ そして、例えば、`Shift-a`が押されたなら、そのブロックは`"A"`の文字列を得ます。
2339
+ また、F1が押されたなら、 `F1`の文字列を受けとります。
2340
+
2341
+ `"Control_L"`, `"Shift_L"`, `"Alt_L"`は左サイドに位置する修飾キーです。
2342
+ もし`Shift-Control-Alt-PgUp`が押されたなら、得られる文字列は、以下の順番で現れます:
2343
+ `"Shift_L"`, `"Control_L"`, `"Alt_L"`, `"Page_Up"`
2344
+
2345
+ シフトキーについて1つ。USキーボードでは、`Shift-7`はアンパサンド(&)です。
2346
+ そのため、`"Shift_L"`と`"7"`ではなく、`"Shift_L"`と`"ampersand"`を得ます。
2347
+ そして、そのようなキーボードで`Shift-Alt-7`を押したら、`"Shift_L"`と`"Alt_L"`と
2348
+ `"ampersand"`という文字列を得るでしょう。
2349
+
2350
+ {{{
2351
+ #!ruby
2352
+ Shoes.app do
2353
+ info = para "NO KEY is PRESSED."
2354
+ keypress do |k|
2355
+ info.replace "#{k.inspect} was PRESSED."
2356
+ end
2357
+ end
2358
+ }}}
2359
+
2360
+ === leave { |self| ... } » self ===
2361
+
2362
+ スロットからマウスカーソルが出て行くときleaveイベントが発生します。
2363
+ その瞬間すでにマウスカーソルはスロットの端の中にはありません。
2364
+ leaveイベントが発生するとき、`self`とともにブロックが呼ばれ、そのスロットオブジェクトは
2365
+ 取り残されます。
2366
+
2367
+ スロットにマウスが入ることを見つけたいなら[[Events.hover]]も見てください。
2368
+
2369
+ === motion { |left, top| ... } » self ===
2370
+
2371
+ マウスがスロットの内部を移動するたびにモーションのブロックは呼ばれます。
2372
+ ブロックはカーソルの`left`や`top`の座標を渡します。
2373
+
2374
+ {{{
2375
+ #!ruby
2376
+ Shoes.app width: 200, height: 200 do
2377
+ background black
2378
+ fill white
2379
+ circ = oval 0, 0, 100, 100
2380
+
2381
+ motion do |top, left|
2382
+ circ.move top - 50, left - 50
2383
+ end
2384
+ end
2385
+ }}}
2386
+
2387
+ === release { |button, left, top| ... } » self ===
2388
+
2389
+ マウスがアンクリック(マウスアップ)のときにreleaseのブロックは実行されます。
2390
+ それは指が持ち上げられたときです。`button`は押し下げられたボタンに対応する数です。
2391
+ `left`や`top`はボタンが離されたときのマウスのの座標です。
2392
+
2393
+ 実際のマウスクリックを捕まえるには、[[Events.click]]イベントを利用してください。
2394
+
2395
+ === start { |self| ... } » self ===
2396
+
2397
+ 初めてスロットが描かれるとき、スタート(start)イベントが実行されます。
2398
+ まさに今描かれたスロットオブジェクトが`self`としてブロックに渡されます。
2399
+
2400
+ '''注意:''' Purple Shoesは`start`メソッドをサポートしていません。
2401
+
2402
+ == Manipulation Blocks ==
2403
+
2404
+ 以下のmanipulationメソッドはスロットの周囲を変更したり新しい要素を挿入することを
2405
+ 手早く片付けます。
2406
+
2407
+ === append() { ... } » self ===
2408
+
2409
+ スロットの最後に要素を追加します。
2410
+
2411
+ {{{
2412
+ #!ruby
2413
+ Shoes.app do
2414
+ @slot = stack { para 'Good Morning' }
2415
+ timer 3 do
2416
+ @slot.append do
2417
+ title "Breaking News"
2418
+ tagline "Astronauts ",
2419
+ "arrested for space shuttle DUI."
2420
+ end
2421
+ end
2422
+ end
2423
+ }}}
2424
+
2425
+
2426
+ `title`や`tagline`の要素を`@slot`の最後に追加します。
2427
+
2428
+ === after(element) { ... } » self ===
2429
+
2430
+ スロットの子として`element`のすぐ後に、スロットの指定した箇所に要素を追加します。
2431
+
2432
+ === before(element) { ... } » self ===
2433
+
2434
+ スロットの子として`element`のすぐ前に、スロットの指定した箇所に要素を追加します。
2435
+
2436
+ === clear() » self ===
2437
+
2438
+ タイマーやネストしたスロットなど、スロットのすべての要素を空にします。
2439
+ スロットのコンテンツを最初から最後までループしてそれぞれの要素の`remove`メソッドを
2440
+ 呼ぶことと効果としては同一です。
2441
+
2442
+ === clear() { ... } » self ===
2443
+
2444
+ clearメソッドはオプションでブロックも取ります。
2445
+ このブロックはスロットのコンテンツを置き換えるために利用されます。
2446
+
2447
+ {{{
2448
+ #!ruby
2449
+ Shoes.app do
2450
+ @slot = stack { para "Old text" }
2451
+ timer 3 do
2452
+ @slot.clear { para "Brand new text" }
2453
+ end
2454
+ end
2455
+ }}}
2456
+
2457
+ この例では、"Old text"パラグラフは排除され、"Brand new text"によって置き換えられます。
2458
+
2459
+ === prepend() { ... } » self ===
2460
+
2461
+ スロットの初めに要素を追加します。
2462
+
2463
+ {{{
2464
+ #!ruby
2465
+ Shoes.app do
2466
+ @slot = stack { para 'Good Morning' }
2467
+ timer 3 do
2468
+ @slot.prepend { para "Your car is ready." }
2469
+ end
2470
+ end
2471
+ }}}
2472
+
2473
+ `@slot`の初めに`para`要素を追加します。
2474
+
2475
+ == Position of a Slot ==
2476
+
2477
+ 他のすべての要素と同様に、スロットは作成されたときに整形することやカスタマイズすることが
2478
+ できます。
2479
+
2480
+ スタックの幅を150ピクセルに設定するためには:
2481
+
2482
+ {{{
2483
+ #!ruby
2484
+ Shoes.app do
2485
+ stack width: 150 do
2486
+ background yellow
2487
+ para "Now that's precision."
2488
+ end
2489
+ end
2490
+ }}}
2491
+
2492
+ それぞれのスタイルの設定は、詳細な設定を手に入れるために利用することのできるメソッドも
2493
+ 持っています。(例えば、`width`メソッドはスロットの幅をピクセルで返します。)
2494
+
2495
+ === displace(left: a number, top: a number) » self ===
2496
+
2497
+ :displace_leftと:displace_topスタイルの設定のためのショートカットメソッドです。
2498
+ 置き換えはレイアウトを変更しないでスロットを移動する便利な方法です。
2499
+ 実際には、`top`と`left`メソッドは置き換えを全く報告しません。
2500
+ そのため、通常、置き換えは一時的なアニメーションのためにあります。
2501
+ 例えば、適当な位置にボタンを少し移動するなど。
2502
+
2503
+ `left`と`top`の数は`displace`に送られ、スロット自身のtopとleftの座標に追加されます。
2504
+ topとleftの座標から差し引くには、負数を利用してください。
2505
+
2506
+ '''注意:''' Purple Shoesは`displace`メソッドをサポートしていません。
2507
+
2508
+ === gutter() » a number ===
2509
+
2510
+ スクロールバーエリアの大きさです。Purple Shoesがスクロールバーを表示する必要があるとき、
2511
+ スクロールバーがウィンドウの端にふれているいくつかの要素を隠してしまうかもしれません。
2512
+ `gutter`はどのくらいのピクセルをスクロールバーが隠すことを期待するかを教えます。
2513
+
2514
+ これは一般的には、次のように右側に詰め物の要素として利用します:
2515
+
2516
+ {{{
2517
+ Shoes.app do
2518
+ stack margin_right: 20 + gutter do
2519
+ para "Insert fat and ratified ",
2520
+ "declaration of independence here..."
2521
+ end
2522
+ end
2523
+ }}}
2524
+
2525
+ === height() » a number ===
2526
+
2527
+ スロットの目に見えるピクセルでの垂直の大きさです。そして、スクロールするスロットの場合は、
2528
+ スロットの全体の大きさを得るために`scroll_height()`の利用を必要とするでしょう。
2529
+
2530
+ === hide() » self ===
2531
+
2532
+ 見えなくするために、スロットを隠します。[[Position.show]]と[[Position.toggle]]も見てください。
2533
+
2534
+ === left() » a number ===
2535
+
2536
+ スロットの位置の左のピクセルです。x-axis座標でも知ることができます。
2537
+
2538
+ === move(left, top) » self ===
2539
+
2540
+ スロットの左上の角である(left、top)の座標を指定してスロットを移動します。
2541
+
2542
+ '''注意:''' Purple Shoesは`move`メソッドをサポートしていません。
2543
+
2544
+ === remove() » self ===
2545
+
2546
+ スロットを削除します。それは表示されなくなり親のコンテンツに記載されなくなります。
2547
+ それは消え去ります。
2548
+
2549
+ '''注意:''' Purple Shoesは`remove`メソッドをサポートしていません。`clear`メソッドを
2550
+ 使用して下さい。
2551
+
2552
+ === scroll() » true or false ===
2553
+
2554
+ スロットにスクロールバーを表示することを許しますか?trueかfalseです。
2555
+ スロットの高さも固定されているときだけスクロールバーが表示されます。
2556
+
2557
+ '''注意:''' Purple Shoesは`scroll`メソッドをサポートしていません。
2558
+
2559
+ === scroll_height() » a number ===
2560
+
2561
+ スクロールによって隠されているすべてを含む、スロット全体の垂直の大きさです。
2562
+
2563
+ '''注意:''' Purple Shoesは`scroll_height`メソッドをサポートしていません。
2564
+
2565
+ === scroll_max() » a number ===
2566
+
2567
+ このスロットでスクロールダウンできる上側(top)の座標です。
2568
+ スクロールバーの上側(top)の座標はいつもゼロです。
2569
+ 下側(bottom)の座標はスロット全体の高さから1ページのスクロール分を引いたものです。
2570
+ この下側(bottom)の座標は`scroll_max`が返す値です。
2571
+
2572
+ これは基本的に`slot.scroll_height - slot.height`と書くためのショートカットです。
2573
+
2574
+ スロットの下側にスクロールするためには、`slot.scroll_top = slot.scroll_max`を利用します。
2575
+
2576
+ === scroll_top() » a number ===
2577
+
2578
+ スロットがスクロールダウンする上側(top)の座標です。
2579
+ そのため、スロットが20ピクセルスクロールダウンされたら、このメソッドは`20`を返します。
2580
+
2581
+ '''注意:''' Purple Shoesは`scroll_top`メソッドをサポートしていません。
2582
+
2583
+ === scroll_top = a number ===
2584
+
2585
+ 任意の座標にスロットをスクロールします。ゼロから`scroll_max`までの間である必要があります。
2586
+
2587
+ '''注意:''' Purple Shoesは`scroll_top=`メソッドをサポートしていません。
2588
+
2589
+ === show() » self ===
2590
+
2591
+ スロットが隠されていた場合、表示します。[[Position.hide]]と[[Position.toggle]]も見てください。
2592
+
2593
+ === style() » styles ===
2594
+
2595
+ 引数なしで`style`メソッドを呼ぶことでスロットに現在適用されているスタイルのハッシュを返します。
2596
+
2597
+ `height`と`width`などのメソッドはスロットの本当のサイズをピクセルで返しますが、
2598
+ `style[:height]`または`style[:width]`を利用することで初めに要求されたサイズを
2599
+ 得ることができます。
2600
+
2601
+ {{{
2602
+ #!ruby
2603
+ Shoes.app do
2604
+ s = stack width: 1.0
2605
+ para s.style[:width]
2606
+ button('Then..'){s.append{para s.style[:width]}}
2607
+ end
2608
+ }}}
2609
+
2610
+ この例では、このスタックの下のパラグラフは最初に"1.0"の文字列を表示しますが、ボタンを
2611
+ クリックした後は"600"の文字列を表示するでしょう。
2612
+
2613
+ === style(styles) » styles ===
2614
+
2615
+ ハッシュのスタイル設定を使ってスロットを修正してください。
2616
+ このページのどんなメソッドでも(もちろん、このメソッドは除いて)スタイルの設定に利用できます。
2617
+ そして、例えば、`width`メソッドがあり、このように`width`スタイルもあります。
2618
+
2619
+ {{{
2620
+ #!ruby
2621
+ Shoes.app do
2622
+ s = stack { background green }
2623
+ s.style width: 400, height: 200
2624
+ end
2625
+ }}}
2626
+
2627
+ === toggle() » self ===
2628
+
2629
+ スロットが表示されているなら非表示にします。また、スロットが非表示なら表示します。
2630
+
2631
+ === top() » a number ===
2632
+
2633
+ スロットの上(top)の位置です。y軸の座標としても知られています。
2634
+
2635
+ === width() » a number ===
2636
+
2637
+ スロットの水平のピクセルサイズです。
2638
+
2639
+ == Traversing the Page ==
2640
+
2641
+ スロット内部の要素を最初から最後までループする必要性に気づくかもしれません。
2642
+ または、ページを登って要素の親のスタックを探す必要があるかもしれません。
2643
+
2644
+ すべての要素で、上位のスロット直接得るために`parent`メソッドを呼ぶことができます。
2645
+ そしてスロットでは、すべての子を得るために`contents`メソッドを呼ぶことができます。
2646
+ (テキストブロックなどのいくつかの要素は、それらの子を得るための`contents`メソッドも
2647
+ 持っています。)
2648
+
2649
+ === contents() » an array of elements ===
2650
+
2651
+ スロットのすべての要素を一覧にします。
2652
+
2653
+ === parent() » a Shoes::Stack or Shoes::Flow ===
2654
+
2655
+ 要素のコンテナのオブジェクトを得ます。
2656
+
2657
+ {{{
2658
+ Shoes.app do
2659
+ s = stack do
2660
+ para 'Purple'
2661
+ @p = para 'Shoes'
2662
+ end
2663
+ para s
2664
+ para s.contents
2665
+ para @p.parent
2666
+ end
2667
+ }}}
2668
+
2669
+ = Elements =
2670
+
2671
+ これはPurple Shoesの要素です。要素は楕円の形状と同じくらい単純です。
2672
+ またはparaのテキスト文字列と同じくらい複雑です。
2673
+ あなたは以前このマニュアルのスロットのセクションでこれらすべての要素に出会ったことがあります。
2674
+
2675
+ Purple Shoesは7つのネイティブコントロールを持ちます:
2676
+ ボタン(Button)、エディットライン(EditLine)、エディットボックス(EditBox)、
2677
+ リストボックス(ListBox)、プログレスメータ(Progress meter)、チェックボックス(Check box)、
2678
+ ラジオ(Radio)。私たちの言う"native"コントロールとは、それらの7つの要素が
2679
+ SWTのAPIを使って直接描画されることを意味します。そのため、プログレスバーでは
2680
+ PNG画像データに変換されることなく描画されます。
2681
+
2682
+ またShoesは7つの他の種類の要素を持っています:背景(Background)、ボーダー(Border)、
2683
+ 画像(Image)、形状(Shape)、テキストブロック(TextBlock)、タイマー(Animate)、
2684
+ そしてビデオ(Video)。それらすべてはどんなオペレーティングシステムでも同じような見え方と
2685
+ 動きになるべきです。
2686
+
2687
+ いったん要素を生成した後でも、それを変更したくなるでしょう。それを動かしたり隠したり
2688
+ またはそれを取り除くために。それらの種類のことを行うために、このセクションのコマンドを
2689
+ 利用するでしょう。
2690
+ (特にどんな要素上でも利用できるコマンドの[[Common Common Methods]]セクションを
2691
+ 確認してください。)
2692
+
2693
+ そして、例として、PNGをスクリーンを配置するためにスロットの`image`メソッドを使ってください。
2694
+ この`image`メソッドはイメージオブジェクトを返します。
2695
+ これらをすっかり変更するためにイメージオブジェクトのこのメソッドを使ってみてください。
2696
+
2697
+ == Common Methods ==
2698
+
2699
+ Purple Shoesでは少しのメソッドがすべての小さな要素によって共有されてます。
2700
+ 移動、表示、非表示。要素の削除。基本的でとても一般的なことです。
2701
+ この一覧はそれらの一般的なコマンドを含んでいます。
2702
+
2703
+ すべてのメソッドの中でもっとも一般的なメソッドの一つは`style`です。
2704
+ (これはスロットの[[Position.style]]メソッドとしてもカバーされます。)
2705
+
2706
+ {{{
2707
+ #!ruby
2708
+ Shoes.app do
2709
+ stack do
2710
+ # Background, text and a button:
2711
+ # both are elements!
2712
+ @back = background green
2713
+ @text = banner "A Message for You, Rudy"
2714
+ @press = button "Stop your messin about!"
2715
+
2716
+ # And so, both can be styled.
2717
+ @text.style size: 12,
2718
+ markup: fg(@text.text, red), margin: 10
2719
+ @press.style width: 400
2720
+ @back.style height: 10
2721
+ end
2722
+ end
2723
+ }}}
2724
+
2725
+ 個別のコマンドについては、左にあるElementsセクションの他のリンクを見てください。
2726
+ ビデオファイルの中断または再生がしたいなら、ビデオの中断や再生は特異なので、
2727
+ [[Video]]セクションを確認してください。中断するボタンという感じではありません。
2728
+
2729
+ === displace(left: a number, top: a number) » self ===
2730
+
2731
+ 要素を移動して置き換えます。しかし周囲のレイアウトは変更しません。
2732
+ 特にアニメーションしている間でも要素の位置を保持したいなら、これは微妙なアニメーションに
2733
+ 重要です。おそらく素早く震えるボタンや視界にスロットを滑り込ませるような。
2734
+
2735
+ 要素を置き換えるとき、それが配置されている左上の角から相対的に移動します。
2736
+ そのため、要素が(20, 40)の座標にあり、2ピクセル左と6ピクセル上に置き換えるなら、
2737
+ 結果的に(22, 46)の座標となります。
2738
+
2739
+ {{{
2740
+ #!ruby
2741
+ # Not yet available
2742
+ Shoes.app do
2743
+ flow :margin => 12 do
2744
+ # Set up three buttons
2745
+ button "One"
2746
+ @two = button "Two"
2747
+ button "Three"
2748
+
2749
+ # Bounce the second button
2750
+ animate do |i|
2751
+ @two.displace(0, (Math.sin(i) * 6).to_i)
2752
+ end
2753
+ end
2754
+ end
2755
+ }}}
2756
+
2757
+ 他の2つのボタンは動かずにじっとしていますが、2番目のボタンが飛び跳ねることに
2758
+ 注目してください。この状況で普通の`move`を使うなら、2番目のボタンはレイアウトから
2759
+ 取り除かれて、2番目のボタンが全くそこにないかのように振る舞うでしょう。
2760
+ ([[Common.move]]の例を見てください。)
2761
+
2762
+ '''特に注意してください:'''表示される要素の座標を得るために`left`と`top`メソッドを
2763
+ 利用するなら、通常の座標を得るだけです。それは置き換えが行われていないかのようです。
2764
+ 置き換えは即座のアニメーションだけを目的とします。
2765
+
2766
+ '''注意:''' Purple Shoesは`displace`メソッドをサポートしていません。
2767
+
2768
+ === height() » a number ===
2769
+
2770
+ エレメントの垂直のピクセルによるスクリーンサイズです。画像の場合には、これは画像全体の
2771
+ サイズではありません。これは要素の現在表示されている高さです。
2772
+
2773
+ 150x150ピクセルの画像を持っていて50ピクセルに幅を設定するなら、このメソッドは50を
2774
+ 返します。
2775
+
2776
+ 例や他の解説のために[[Common.width]]メソッドも見てください。
2777
+
2778
+ === hide() » self ===
2779
+
2780
+ 要素が見えないように、非表示にします。[[Common.show]]や[[Common.toggle]]も
2781
+ 見てください。
2782
+
2783
+ === left() » a number ===
2784
+
2785
+ 要素の左端の位置をピクセルで得ます。
2786
+
2787
+ === move(left: a number, top: a number) » self ===
2788
+
2789
+ スロットの範囲内でピクセルによって指定した位置に要素を移動します。
2790
+ その要素はスロットの内部にあります。しかし、もはやスロットの他の要素と一緒に
2791
+ 積み上げられたりフローされたりしません。その要素は絶対的な位置指定ではなく、
2792
+ 自由に浮かんでいます。
2793
+
2794
+ {{{
2795
+ #!ruby
2796
+ Shoes.app do
2797
+ # Set up three buttons
2798
+ b = button "One"
2799
+ @two = button "Two"
2800
+ button "Three"
2801
+
2802
+ # Bounce the second button
2803
+ animate do |i|
2804
+ @two.move(33, 33 + (Math.sin(i) * 6).to_i)
2805
+ end
2806
+ end
2807
+ }}}
2808
+
2809
+ 3番目のボタンがその位置にスライドすることを許しており、2番目のボタンは特定の場所に
2810
+ 動かされてします。要素を別の場所に変更しないで移動したいなら、
2811
+ [[Common.displace]]メソッドを見てください。
2812
+
2813
+ === parent() » a Shoes::Stack or Shoes::Flow ===
2814
+
2815
+ その要素のコンテナのオブジェクトを得ます。反対のことを行うためにはスロットの
2816
+ [[Traversing.contents]]も見てください:コンテナの要素を得ます。
2817
+
2818
+ === remove() » self ===
2819
+
2820
+ スロットから要素を削除します。(他の言葉で言い換えると:ガベージに投げます。)
2821
+ その要素はもう表示されません。
2822
+
2823
+ === show() » self ===
2824
+
2825
+ 要素が非表示なら、表示します。[[Common.hide]]や[[Common.toggle]]も見てください。
2826
+
2827
+ === style() » styles ===
2828
+
2829
+ ハッシュの形で、要素に適用するフルセットのスタイルを得ます。`width`や`height`や
2830
+ `top`のようなメソッドは特定のピクセルでのサイズを返しますが、`style[:width]`または
2831
+ `style[:top]`を利用すると、初めの設定を得ることができます。
2832
+ ("100%"の幅または"10px"のトップのような)
2833
+
2834
+ {{{
2835
+ #!ruby
2836
+ Shoes.app do
2837
+ # A button which take up the whole page
2838
+ @b = button "All of it",
2839
+ width: width, height: height
2840
+
2841
+ # When clicked, show the styles
2842
+ @b.click { alert(@b.style.inspect) }
2843
+ end
2844
+ }}}
2845
+
2846
+ === style(styles) » styles ===
2847
+
2848
+ 要素のスタイルを変更します。これは要素の`:width`と`:height`、テキストのフォントの
2849
+ `:size`、形状の`:stroke`や`:fill`を含みます。または他の多くのスタイルの設定もです。
2850
+
2851
+ === toggle() » self ===
2852
+
2853
+ 要素が表示されているなら非表示にします。または要素が非表示なら表示します。
2854
+
2855
+ === top() » a number ===
2856
+
2857
+ 要素の上端のピクセルの位置を得ます。
2858
+
2859
+ === width() » a number ===
2860
+
2861
+ 要素の全体の大きさの幅をピクセルで得ます。
2862
+ このメソッドはいつも正確なピクセルサイズを返します。
2863
+ 画像の場合は、画像の全幅ではなく、表示されているサイズだけです。
2864
+ 詳しくは[[Common.height]]メソッドも見てください。
2865
+
2866
+ また、120ピクセルの幅のスタック内に1.0の幅の要素を作成したなら、`120`が返されます。
2867
+ `style[:width]`を呼んだなら、`120`を得ます。
2868
+
2869
+ {{{
2870
+ #!ruby
2871
+ Shoes.app do
2872
+ stack width: 120 do
2873
+ @b = button "Click me", width: 1.0 do
2874
+ alert "button.width = #{@b.width}\n" +
2875
+ "button.style[:width] = " +
2876
+ "#{@b.style[:width]}"
2877
+ end
2878
+ end
2879
+ end
2880
+ }}}
2881
+
2882
+ 幅を設定するためには、[[Common.style]]メソッドをもう一度調べる必要があります。
2883
+ そして、150ピクセルの幅にボタンを設定するには:`@b.style(width: 150)`。
2884
+
2885
+ == Background ==
2886
+
2887
+ 背景はスロット全体に渡って塗られた、グラデーションまたは画像の色です。
2888
+ 背景と枠線はShoes::Patternの種類の一つです。!{:margin_left => 100}man-ele-background.png!
2889
+
2890
+ ''背景(background)''と呼ばれているにも関わらず、この要素は他の要素よりも前面に
2891
+ 表示されます。背景がスロットで塗られた何か他のもの(`rect`または`oval`のような)の
2892
+ 後にきた場合、背景はその要素の上に塗られます。
2893
+
2894
+ もっとも単純な背景は、黒の背景のような[[Element.background]]メソッドによって作成された、
2895
+ 単色の背景です。
2896
+
2897
+ {{{
2898
+ #!ruby
2899
+ Shoes.app do
2900
+ background black
2901
+ end
2902
+ }}}
2903
+
2904
+ このような単純な背景はスロットが含むもの全体を塗りつぶします
2905
+ (この場合は、ウィンドウ全体が黒で塗られます。)
2906
+
2907
+ 好きなように背景のサイズを切り詰めたりあちこち移動したりするためのスタイルを利用できます。
2908
+
2909
+ ウィンドウの上側を50ピクセルに渡って黒い背景で塗りつぶします:
2910
+
2911
+ {{{
2912
+ #!ruby
2913
+ Shoes.app do
2914
+ background black, height: 50
2915
+ end
2916
+ }}}
2917
+
2918
+ または、ウィンドウの右端の50ピクセルの列を塗りつぶします:
2919
+
2920
+ {{{
2921
+ #!ruby
2922
+ Shoes.app do
2923
+ background black, width: 50
2924
+ end
2925
+ }}}
2926
+
2927
+ 背景は普通の要素と同様なので、その他のすべてのメソッドについては[[Elements]]セクションの
2928
+ 始めの部分も見てください。
2929
+
2930
+ === to_pattern() » a Shoes::Pattern ===
2931
+
2932
+ 背景を塗りつぶすために利用されたグラデーションや画像を通常のShoes::Patternオブジェクトに
2933
+ 配置し、色をヤンクします。そして、他のオブジェクトに背景や枠線に渡すことができます。
2934
+ 好きなように再利用してください。
2935
+
2936
+ '''注意:''' Purple Shoesは`to_pattern`メソッドをサポートしていません。
2937
+
2938
+ == Border ==
2939
+
2940
+ 枠線はスロットの周囲の線に塗られた、色やグラデーションや画像です。
2941
+ 前のセクションの背景(background)と同様に、枠線(Border)はShoes::Patternの一種です。
2942
+ !{:margin_left => 100}man-ele-border.png!
2943
+
2944
+ はじめに、すべての枠線はスロットの周囲の外側ではなく、'''内側'''を塗ることについて知ることは
2945
+ 重要です。そのため、50ピクセルの幅のスロットに5ピクセルの枠線を塗るなら、それは枠線で
2946
+ 囲まれたスロットが内部に40ピクセルの幅のエリアを持つことを意味します。
2947
+
2948
+ これは枠線(Border)を[[Background]]の上に塗るなら、その背景の端の上を枠線によって
2949
+ 塗られることも意味します。
2950
+
2951
+ 正にそのようなスロットがここにあります:
2952
+
2953
+ {{{
2954
+ #!ruby
2955
+ Shoes.app do
2956
+ stack width: 50 do
2957
+ border black, strokewidth: 5
2958
+ para fg "=^.^=", green
2959
+ end
2960
+ end
2961
+ }}}
2962
+
2963
+ スロットの外側の修正に枠線を塗りたいなら、もう一つのスロットでそのスロットをラップする
2964
+ 必要があります。その結果、スロットの外側に枠線が配置されます。
2965
+
2966
+ {{{
2967
+ #!ruby
2968
+ Shoes.app do
2969
+ stack width: 60 do
2970
+ border black, strokewidth: 5
2971
+ stack width: 50 do
2972
+ para fg "=^.^=", green
2973
+ end
2974
+ end
2975
+ end
2976
+ }}}
2977
+
2978
+ HTMLや他の多くの言語では、枠線は箱の外側に塗られるため、ボックス全体の幅が
2979
+ 増加します。Purple Shoesは一貫性を考慮してデザインされているため、枠線や
2980
+ マージンや他のどんなものも気にしないでそれは50ピクセルの幅のままです。
2981
+
2982
+ 枠線に利用する他のメソッドについては[[Elements]]セクションも確認してください。
2983
+
2984
+ === to_pattern() » a Shoes::Pattern ===
2985
+
2986
+ 枠線を塗るための色、グラデーションまたは画像を元にした基本のパターンオブジェクトを
2987
+ 作成します。
2988
+
2989
+ '''注意:''' Purple Shoesは`to_pattern`メソッドをサポートしていません。
2990
+
2991
+ == Button ==
2992
+
2993
+ ボタン(Button)は、ご存知のとおり、押しボタンです。それらをクリックしたら何かを行います。
2994
+ ボタンは"OK"または"Are you sure?"などを表示します。そして、よければボタンをクリックします。
2995
+ !{:margin_left => 100}man-ele-button.png!
2996
+
2997
+ {{{
2998
+ #!ruby
2999
+ Shoes.app do
3000
+ button "OK!"
3001
+ button "Are you sure?"
3002
+ end
3003
+ }}}
3004
+
3005
+ 上記の例のボタンはそれらがクリックされたときに何も行いません。
3006
+ 働きを行わせるためには、それぞれのボタンにブロックを取り付けます。
3007
+
3008
+ {{{
3009
+ #!ruby
3010
+ Shoes.app do
3011
+ button "OK!" do
3012
+ append { para "Well okay then." }
3013
+ end
3014
+ button "Are you sure?" do
3015
+ append { para "Your confidence is inspiring." }
3016
+ end
3017
+ end
3018
+ }}}
3019
+
3020
+ このようにボタンにブロックを取り付けました。
3021
+ それぞれのブロックはページに新しいパラグラフを取り付けます。
3022
+ クリックする度に、パラグラフが追加されます。
3023
+
3024
+ これはこれ以上深くはしません。ボタンはクリック可能な句でしかありません。
3025
+
3026
+ 厳密に言えば、次に続く例では他の方法でそれを書いています。
3027
+
3028
+ {{{
3029
+ #!ruby
3030
+ Shoes.app do
3031
+ @b1 = button "OK!"
3032
+ @b1.click{para "Well okay then."}
3033
+ @b2 = button "Are you sure?"
3034
+ @b2.click{para "Your confidence is inspiring."}
3035
+ end
3036
+ }}}
3037
+
3038
+ 見た目は劇的に違いますが、これは同じ動きです。
3039
+ 1つ目の違い:直接ブロックをボタンに取り付けるのではなく、`click`メソッドを通して、
3040
+ ブロックを後で取り付けています。
3041
+
3042
+ 2つ目の違いはボタンには全く関係がありません。Purple Shoesがスロットに要素を直接
3043
+ 追加することを許しているので、`append`ブロックが取り除かれています。
3044
+ そのため直接`para`を呼ぶことができます。(`prepend`、`before`または
3045
+ `after`メソッドの場合にはできません。)
3046
+
3047
+ 以下のメソッドに加えて、ボタンは[[Common]]のすべてのメソッドも継承します。
3048
+
3049
+ === click() { |self| ... } » self ===
3050
+
3051
+ ボタンがクリックされたときには、`click`ブロックが呼ばれます。
3052
+ このブロックは`self`を渡します。意味すること:どちらのボタンでクリックされたか。
3053
+
3054
+ === focus() » self ===
3055
+
3056
+ ボタンのフォーカスを移動します。
3057
+ そのボタンはハイライトされ、ユーザがエンターキーを打てば、クリックされます。
3058
+
3059
+ == Check ==
3060
+
3061
+ チェックボックスはチェックされた状態またはチェックされていない状態になるクリック可能な
3062
+ 四角い箱です。1つのチェックボックスでは通常は"はい(yes)"または"いいえ(no)"の
3063
+ 質問をたずねます。複数のチェックボックスのセットではto-doリストでも見られます。
3064
+ !{:margin_left => 100}man-ele-check.png!
3065
+
3066
+ ここにチェックリストのサンプルがあります。
3067
+
3068
+ {{{
3069
+ #!ruby
3070
+ Shoes.app do
3071
+ stack do
3072
+ flow do
3073
+ check; para "Frances Johnson", width: 200
3074
+ end
3075
+ flow do
3076
+ check; para "Ignatius J. Reilly", width: 200
3077
+ end
3078
+ flow do
3079
+ check
3080
+ para "Winston Niles Rumfoord", width: 200
3081
+ end
3082
+ end
3083
+ end
3084
+ }}}
3085
+
3086
+ 基本的にはチェック(check)を利用するための2つの方法があります。
3087
+ チェックにチェックがクリックされたときに呼ばれるブロックを取り付けます。
3088
+ そして/または、ボックスがチェックされているかどうか確認する`checked?`メソッドを
3089
+ 利用できます。
3090
+
3091
+ では、上記の例に追加しましょう。
3092
+
3093
+ {{{
3094
+ #!ruby
3095
+ Shoes.app do
3096
+ @list = ['Frances Johnson', 'Ignatius J. Reilly',
3097
+ 'Winston Niles Rumfoord']
3098
+
3099
+ stack do
3100
+ @list.map! do |name|
3101
+ flow { @c = check; para name, width: 200 }
3102
+ [@c, name]
3103
+ end
3104
+
3105
+ button "What's been checked?" do
3106
+ selected =
3107
+ @list.map{|c, n| n if c.checked?}.compact
3108
+ alert("You selected: " + selected.join(', '))
3109
+ end
3110
+ end
3111
+ end
3112
+ }}}
3113
+
3114
+ そして、ボタンが押されたときに、`checked?`メソッドを利用して、それぞれのチェックは
3115
+ その状態を尋ねます。
3116
+
3117
+ 下のボタンメソッドの一覧だけでなく、すべての要素が応答できる、[[Common]]メソッドの
3118
+ 一覧も見てください。
3119
+
3120
+ === checked?() » true or false ===
3121
+
3122
+ その箱がチェックされているかどうかを返します。
3123
+ そして、`true`の意味は"はい、この箱はチェックされています!"です。
3124
+
3125
+ === checked = true or false ===
3126
+
3127
+ チェックボックスをマークしたりマークを外したりします。
3128
+ 例えば、`checked = false`を利用して、箱のチェックを外します。
3129
+
3130
+ === click() { |self| ... } » self ===
3131
+
3132
+ チェックボックスがクリックされたときに、その`click`ブロックが呼ばれます。
3133
+ このブロックは、クリックされたチェックボックスオブジェクトの`self`を渡します。
3134
+
3135
+ 箱がチェックされるときとチェックを外すときのどちらもクリックが渡されます。
3136
+
3137
+ === focus() » self ===
3138
+
3139
+ チェックボックスにフォーカスを移動します。そのチェックボックスはハイライトされ、
3140
+ ユーザがエンターキーを打てば、そのチェックボックスはチェックされた状態とチェックされていない
3141
+ 状態の間をトグルします。
3142
+
3143
+ == EditBox ==
3144
+
3145
+ エディットボックス(Edit box)は、テキストを入力するための幅広い長方形の箱です。
3146
+ webでは、それらはテキストエリアと呼ばれます。それらは長い記述を入力するための
3147
+ マルチラインエディットボックスです。エッセイでさえ書けます!
3148
+ !{:margin_left => 100}man-ele-editbox.png!
3149
+
3150
+ スタイルを何も設定しなければ、エディットボックスは200ピクセルx108ピクセルのサイズです。
3151
+ 特定のサイズに設定するために`:width`と`:height`のスタイルを利用することもできます。
3152
+
3153
+ {{{
3154
+ #!ruby
3155
+ Shoes.app do
3156
+ edit_box
3157
+ edit_box width: 100, height: 100
3158
+ end
3159
+ }}}
3160
+
3161
+ ([[Button]]や[[Check]]などの)他のコントロールはクリックイベントだけを持っていますが、
3162
+ [[EditLine]]やエディットボックス(EditBox)は`change`イベントも持っています。
3163
+ 誰かがタイプしたり箱から削除したら`change`のブロックはいつでも呼ばれます。
3164
+
3165
+ {{{
3166
+ #!ruby
3167
+ Shoes.app do
3168
+ edit_box do |e|
3169
+ @counter.text =
3170
+ strong("#{e.text.size}") + " characters"
3171
+ end
3172
+ @counter = para strong("0"), " characters"
3173
+ end
3174
+ }}}
3175
+
3176
+ この例ではブロック内部で[[EditBox.text]]メソッドを利用していることにも注意してください。
3177
+ このメソッドは箱に対してタイプしたすべての文字の文字列をあなたに与えます。
3178
+
3179
+ エディットボックスの更なるメソッドは以下に一覧にしますが、すべての要素が応答できる、
3180
+ [[Common]]メソッドの一覧も見てください。
3181
+
3182
+ === change() { |self| ... } » self ===
3183
+
3184
+ エディットボックスに文字が追加されたり取り除かれるたびに、`chenage`ブロックが
3185
+ 呼ばれます。ブロックには変更されたエディットボックスのオブジェクトである`self`が
3186
+ 与えられます。
3187
+
3188
+ === focus() » self ===
3189
+
3190
+ エディットボックスにフォーカスを移動します。そのエディットボックスはハイライトされ、
3191
+ ユーザはエディットボックスにタイプできます。
3192
+
3193
+ === text() » self ===
3194
+
3195
+ 箱にタイプされた文字を文字列として返します。
3196
+
3197
+ === text = a string ===
3198
+
3199
+ `a string`の文字をエディットボックスに代入します。
3200
+
3201
+ == EditLine ==
3202
+
3203
+ エディットライン(Edit line)は細長い、小さなテキストを入力する箱です。
3204
+ エディットボックスはマルチラインですが、エディットラインは1行です。
3205
+ これはエディットラインです。ちなみに水平です。
3206
+ !{:margin_left => 100}man-ele-editline.png!
3207
+
3208
+ スタイルが設定されていないエディットラインは200ピクセルの幅と28ピクセルの高さです。
3209
+ これはおおよそです。プラットフォームによって高さは様々です。
3210
+
3211
+ {{{
3212
+ #!ruby
3213
+ Shoes.app do
3214
+ stack do
3215
+ edit_line
3216
+ edit_line width: 400
3217
+ end
3218
+ end
3219
+ }}}
3220
+
3221
+ `:width`と`:height`の両方のスタイルを設定することによりサイズを変更することができます。
3222
+ しかしながら、高さはフォントに合わせて調整されるため、一般的には`:width`だけの
3223
+ スタイルを設定します。(そして、現在のバージョンのPurple Shoesでは、エディットラインと
3224
+ エディットボックスフォントはどうやっても変更できません。)
3225
+
3226
+ エディットラインにブロックが与えられたら、`change`イベントを受けとります。
3227
+ changeブロックを利用した例については[[EditBox]]のページを確認してください。
3228
+ 実際には、そのエディットボックスはエディットラインとすべて同じメソッドを持ちます。
3229
+ すべての要素が応答できる、[[Common]]メソッドの一覧も見てください。
3230
+
3231
+ === change() { |self| ... } » self ===
3232
+
3233
+ エディットラインに文字が追加されたり取り除かれるたびに、`chenage`ブロックが呼ばれます。
3234
+ ブロックには変更されたエディットラインのオブジェクトである`self`が与えられます。
3235
+
3236
+ === focus() » self ===
3237
+
3238
+ エディットラインにフォーカスを移動します。そのエディットラインはハイライトされ、
3239
+ ユーザはエディットラインにタイプできます。
3240
+
3241
+ === text() » self ===
3242
+
3243
+ 箱にタイプされた文字を文字列として返します。
3244
+
3245
+ === text = a string ===
3246
+
3247
+ `a string`の文字をエディットボックスに代入します。
3248
+
3249
+ == Image ==
3250
+
3251
+ 画像(image)はPNG、JPEGまたはGIFフォーマットの画像ファイルです。
3252
+ Purple Shoesは画像をリサイズまたはテキストとともにそれらをフローすることができます。
3253
+ !{:margin_left => 100}man-ele-image.png!
3254
+
3255
+ 画像を作成するために、スロット内部で`image`メソッドを利用します:
3256
+
3257
+ {{{
3258
+ #!ruby
3259
+ Shoes.app do
3260
+ para "Nice, nice, very nice. Busy, busy, busy."
3261
+ image File.join DIR,
3262
+ "../static/shoes-manual-apps.png"
3263
+ end
3264
+ }}}
3265
+
3266
+ Purple Shoesに何らかの画像をロードしたとき、それはメモリにキャッシュされます。
3267
+ それは、同じファイルの画像の要素をたくさんロードした場合でも、それは実際には
3268
+ 1回だけファイルをロードすることを意味します。
3269
+
3270
+ webのURLを直接利用することもできます。
3271
+
3272
+ {{{
3273
+ #!ruby
3274
+ Shoes.app do
3275
+ image "http://is.gd/c0mBtb"
3276
+ end
3277
+ }}}
3278
+
3279
+ webから画像がロードされたとき、それはハードディスクドライブとメモリの両方にキャッシュ
3280
+ されます。これは画像が変更されなければ再度ダウンロードをすることを防止します。
3281
+ (不思議に思う場合:正にブラウザが行うetagのようにShoesは変更時間の軌跡を
3282
+ 保持します。)
3283
+
3284
+ '''注意:''' Purple Shoesは、Red Shoesのようなハードドライブキャッシュ管理機能を
3285
+ サポートしていません。
3286
+
3287
+ Purple Shoesはバックグラウンドでシステムのスレッドを使ってリモートの画像もロードします。
3288
+ そのため、リモートの画像を利用することはRubyを妨げることはなく、またどんな強烈な
3289
+ グラフィカルな表示でも進み続けるでしょう。
3290
+
3291
+ === full_height() » a number ===
3292
+
3293
+ 画像全体のピクセルでの高さです。通常は、ピクセルでの画像の高さを知るために
3294
+ [[Common.height]]メソッドを利用できます。しかし画像がリサイズされていたり
3295
+ より大きいサイズなどにスタイルが設定されていた場合は、`height`は変更された
3296
+ サイズを返します。
3297
+
3298
+ `full_height`メソッドは保存されたオリジナルファイルの画像の(ピクセルでの)高さを与えます。
3299
+
3300
+ === full_width() » a number ===
3301
+
3302
+ 画像全体のピクセルでの幅です。[[Common.width]]ではなくこのメソッドを使う理由の
3303
+ 説明については[[Image.full_height]]メソッドを見てください。
3304
+
3305
+ === path() » a string ===
3306
+
3307
+ 画像のURLまたはファイル名です。
3308
+
3309
+ === path = a string ===
3310
+
3311
+ ファイルまたはURLからロードして、画像を他のものに入れ替えます。
3312
+
3313
+ === rotate(degrees: a number) » self ===
3314
+
3315
+ 画像を`degrees`度回転させます。
3316
+
3317
+ {{{
3318
+ Shoes.app do
3319
+ img = image File.join(DIR, '../samples/cy.png')
3320
+ img.move 200, 200
3321
+ animate do |i|
3322
+ img.rotate i*10
3323
+ end
3324
+ end
3325
+ }}}
3326
+
3327
+ == ListBox ==
3328
+
3329
+ リストボックス(List box)(環境によって"コンボボックス(combo box)"または
3330
+ "ドロップダウンボックス(drop-down box)"または"セレクトボックス(select box)"とも
3331
+ 呼ばれています。)は箱をクリックしたときドロップダウンしてオプションが一覧として表示されます。
3332
+ !{:margin_left => 100}man-ele-listbox.png!
3333
+
3334
+ リストボックスは配列からオプションを取得します。
3335
+ 配列(リスト)の文字列は、`:items`スタイルに渡されます。
3336
+
3337
+ {{{
3338
+ #!ruby
3339
+ Shoes.app do
3340
+ para "Choose a fruit:"
3341
+ list_box items: ["Grapes", "Pears", "Apricots"]
3342
+ end
3343
+ }}}
3344
+
3345
+ そして、リストボックスの基本のサイズは200ピクセルの幅と28ピクセルの高さです。
3346
+ この長さは`width`スタイルを利用して調整することができます。
3347
+
3348
+ {{{
3349
+ #!ruby
3350
+ Shoes.app do
3351
+ para "Choose a fruit:"
3352
+ list_box items: ["Grapes", "Pears", "Apricots"],
3353
+ width: 120, choose: "Apricots" do |list|
3354
+ @fruit.text = list.text
3355
+ end
3356
+
3357
+ @fruit = para "No fruit selected"
3358
+ end
3359
+ }}}
3360
+
3361
+ `:width`スタイルに続いて、この例ではもう1つの便利なオプションを利用します。
3362
+ `:choose`オプションは始めからハイライトされるべきアイテムをリストボックスに教えます。
3363
+ (箱が作成された後でアイテムをハイライトするには[[ListBox.choose]]メソッドもあります。)
3364
+
3365
+ リストボックスは[[ListBox.change]]イベントも持っています。次の例では、リストボックスに
3366
+ ブロックを取り付けました。いいですか、この`change`ブロックを見てください。
3367
+ このブロックは誰かが選択されたアイテムを変更するたびに呼ばれます。
3368
+
3369
+ これらは基本的なことです。すべての要素が持っているメソッドの完全な一覧である、
3370
+ [[Common]]メソッドのページを見てください。
3371
+
3372
+ === change() { |self| ... } » self ===
3373
+
3374
+ 誰かがリストボックスの新しいオプションをハイライトするたびに(例えば、アイテムをクリックする
3375
+ ことによって)`change`ブロックは呼ばれます。ブロックには変更されたリストボックスの
3376
+ オブジェクトである`self`が与えられます。
3377
+
3378
+ === choose(item: a string) » self ===
3379
+
3380
+ `item`として与えられた文字列と一致するリストボックス内のオプションを選択します。
3381
+
3382
+ === focus() » self ===
3383
+
3384
+ リストボックスにフォーカスを移動します。そのリストはハイライトされ、ユーザが上や下の
3385
+ 矢印キーを押した場合、リスト内の別のオプションが選択されます。
3386
+
3387
+ === items() » an array of strings ===
3388
+
3389
+ リストボックスにオプションとして現在表示されている文字列の完全な一覧を返します。
3390
+
3391
+ === items = an array of strings ===
3392
+
3393
+ リストボックスのオプションを新しい文字列の一覧で置き換えます。
3394
+
3395
+ === text() » a string ===
3396
+
3397
+ 現在リストボックス内でハイライトされて表示されているテキストを含む文字列です。
3398
+ 何も選択されていないなら、`nil`が応答されます。
3399
+
3400
+ == Progress ==
3401
+
3402
+ プログレスバー(Progress bar)は活動がどこまで進んでいるかを表示します。
3403
+ 一般的には、プログレスバーはパーセンテージで示されます。
3404
+ (0%から100%まで)Shoesは0.0から1.0の10進数を使って進行を考えます。
3405
+ !{:margin_left => 100}man-ele-progress.png!
3406
+
3407
+ シンプルなプログレスバーは200ピクセルの幅ですが、長くするために
3408
+ (すべてのPurple Shoesの要素のように)`:width`スタイルは利用できません。
3409
+
3410
+ '''注意:''' Purple Shoesでは、最小サイズが幅150ピクセルです。
3411
+
3412
+ {{{
3413
+ Shoes.app do
3414
+ title "Progress example"
3415
+ @p = progress left: 10, top: 100, width: width-20
3416
+
3417
+ animate do |i|
3418
+ @p.fraction = (i % 100) / 100.0
3419
+ end
3420
+ end
3421
+ }}}
3422
+
3423
+ プログレスバーを含む、すべての要素に備え付けられたメソッドの一覧については
3424
+ [[Common]]メソッドのページを見てください。
3425
+
3426
+ === fraction() » a decimal number ===
3427
+
3428
+ どこまでプログレスバーが進んでいるかを指し示す、0.0から1.0の10進数の数を返します。
3429
+
3430
+ === fraction = a decimal number ===
3431
+
3432
+ 0.0から1.0の間の10進数の数で進行を設定します。
3433
+
3434
+ == Radio ==
3435
+
3436
+ ラジオボタン(Radio button)はクリック可能な円のグループです。
3437
+ それをマークするには円をクリックしてください。ラジオボタンは1度に1つだけマークできます。
3438
+ (1度に1つのオプションだけしか選択できないところは、リストボックスに似ています。)
3439
+ !{:margin_left => 100}man-ele-radio.png!
3440
+
3441
+ それでは、リストボックスを利用すべきときと、ラジオボタンを利用すべきときをどのようにして
3442
+ 決定しますか?そうですね、リストボックスはボックスをクリックしてドロップダウンを表示すること
3443
+ なく1つのハイライトされたアイテムを表示します。
3444
+ しかし、ラジオボタンはどれがマークされているか気にすることなく、すべて表示されます。
3445
+
3446
+ {{{
3447
+ #!ruby
3448
+ Shoes.app do
3449
+ para "Among these films, which do you prefer?\n"
3450
+ radio
3451
+ para strong("The Taste of Tea"),
3452
+ " by Katsuhito Ishii\n", width: 570
3453
+ radio
3454
+ para strong("Kin-Dza-Dza"),
3455
+ " by Georgi Danelia\n", width: 570
3456
+ radio
3457
+ para strong("Children of Heaven"),
3458
+ " by Majid Majidi\n", width: 570
3459
+ end
3460
+ }}}
3461
+
3462
+ それらは(たくさんの`para`とともに)同じスロット内で一緒にグループ化されているため、
3463
+ 3つのラジオボタンから1度に1つだけが選択できます。
3464
+
3465
+ これらをそれら自身のスロットに移動したら、この例は壊れます。
3466
+
3467
+ {{{
3468
+ #!ruby
3469
+ Shoes.app do
3470
+ stack do
3471
+ para "Among these films, which do you prefer?"
3472
+ flow do
3473
+ radio
3474
+ para "The Taste of Tea by Katsuhito Ishii",
3475
+ width: 300
3476
+ end
3477
+ flow do
3478
+ radio
3479
+ para "Kin-Dza-Dza by Georgi Danelia",
3480
+ width: 300
3481
+ end
3482
+ flow do
3483
+ radio
3484
+ para "Children of Heaven by Majid Majidi",
3485
+ width: 300
3486
+ end
3487
+ end
3488
+ end
3489
+ }}}
3490
+
3491
+ しかし、これは修正できます。
3492
+ 違うスロットのラジオボタンを一緒にグループ化することができ、それらにすべて同じグループ名を
3493
+ 与える必要があります。
3494
+
3495
+ ここでは`:films`グループにそれらすべてのラジオボタンをグループ化しました。
3496
+
3497
+ {{{
3498
+ #!ruby
3499
+ Shoes.app do
3500
+ stack do
3501
+ para "Among these films, which do you prefer?"
3502
+ flow do
3503
+ radio :films
3504
+ para "The Taste of Tea by Katsuhito Ishii",
3505
+ width: 300
3506
+ end
3507
+ flow do
3508
+ radio :films
3509
+ para "Kin-Dza-Dza by Georgi Danelia",
3510
+ width: 300
3511
+ end
3512
+ flow do
3513
+ radio :films
3514
+ para "Children of Heaven by Majid Majidi",
3515
+ width: 300
3516
+ end
3517
+ end
3518
+ end
3519
+ }}}
3520
+
3521
+ 下にあるそれらの一覧を越える更なるメソッドについては、[[Common]]メソッドのページを
3522
+ 詳しく調べてください。それらのメソッドをすべてのラジオボタンで同様に利用できるからです。
3523
+
3524
+ === checked?() » true or false ===
3525
+
3526
+ ラジオボタンがチェックされているかどうかを返します。
3527
+ そして、`true`の意味は"はい、チェックされています!"です。
3528
+
3529
+ === checked = true or false ===
3530
+
3531
+ ラジオボタンをマークしたりマークを外したりします。
3532
+ 例えば、`checked = false`を利用して、ラジオボタンをクリアします。
3533
+
3534
+ === click() { |self| ... } » self ===
3535
+
3536
+ ラジオボタンがクリックされたとき、その`click`ブロックが呼ばれます。
3537
+ このブロックは、クリックされたラジオボタンを示すオブジェクトの`self`を渡します。
3538
+
3539
+ ラジオボタンをマークしたときとマークを外したときの両方で、クリックが送られます。
3540
+
3541
+ === focus() » self ===
3542
+
3543
+ ラジオボタンのフォーカスを移動します。そのラジオボタンはハイライトされます。
3544
+
3545
+ == Shape ==
3546
+
3547
+ 形状(shape)は通常は`oval`と`rect`のようにドローイングメソッドによって作成される
3548
+ アウトラインパスです。!{:margin_left => 100}man-ele-shape.png!
3549
+
3550
+ [[Common]]メソッドのページを見てください。形状はそれらすべてのメソッドに応答できます。
3551
+
3552
+ == TextBlock ==
3553
+
3554
+ テキストブロック(TextBlock)オブジェクトは単独の要素にとして形成されるテキストの
3555
+ グループを示します。例えば、太字のテキストを含むパラグラフです。
3556
+ リンクと太字のテキストを含むキャプションです。(そして、`caption`はテキストブロックの
3557
+ タイプです。しかしながら、`link`と`strong`はテキストクラスのタイプです。)
3558
+ !{:margin_left => 100}man-ele-textblock.png!
3559
+
3560
+ テキストブロックのすべての種類はタイプは[[Element Element Creation]]ページで
3561
+ 確認できます。
3562
+
3563
+ * [[Element.banner]], 48ピクセルのフォント。
3564
+ * [[Element.title]], 34ピクセルのフォント。
3565
+ * [[Element.subtitle]], 26ピクセルのフォント。
3566
+ * [[Element.tagline]], 18ピクセルのフォント。
3567
+ * [[Element.caption]], 14ピクセルのフォント。
3568
+ * [[Element.para]], 12ピクセルのフォント。
3569
+ * [[Element.inscription]], 10ピクセルのフォント。
3570
+
3571
+ === contents() » an array of elements ===
3572
+
3573
+ ブロック内部の整形された文字列すべてのリストです。
3574
+
3575
+ '''注意:''' Purple Shoesは`contents`メソッドをサポートしていません。
3576
+
3577
+ === cursor() » an index ===
3578
+
3579
+ テキストカーソルの位置を返します。このテキストボックス内の文字のインデックスです。
3580
+
3581
+ === cursor = an index or nil ===
3582
+
3583
+ テキストカーソルを表示/非表示します。
3584
+ 例えば、`cursor = 3`は文の先頭から3文字目の位置にテキストカーソルを表示します。
3585
+ `cursor = -1`は文の末尾にテキストカーソルを表示します。
3586
+ `cursor = nil`はテキストカーソルを非表示にします。
3587
+
3588
+ {{{
3589
+ Shoes.app do
3590
+ msg = para 'hello ' * 20
3591
+ msg.cursor = -1
3592
+ keypress do |k|
3593
+ n = case k
3594
+ when 'Left'; -1
3595
+ when 'Right'; 1
3596
+ else
3597
+ next
3598
+ end
3599
+ n += msg.cursor
3600
+ len = msg.text.length
3601
+ n = len unless n > -1
3602
+ msg.cursor = n % (len+1)
3603
+ flush
3604
+ end
3605
+ end
3606
+ }}}
3607
+
3608
+ === highlight() » an array ===
3609
+
3610
+ テキストマーカーの開始位置とハイライトする長さを配列形式で返します。
3611
+
3612
+ === hit(left, top) » an index or nil ===
3613
+
3614
+ マウスカーソルが指し示すテキストのインデックスを返します。
3615
+ `left`と`top` は、マウスの位置です。
3616
+
3617
+ {{{
3618
+ Shoes.app do
3619
+ para 'index: ', width: 50
3620
+ index = para '', width: 20
3621
+ msg = title 'hello ' * 5
3622
+ click do |b, x, y|
3623
+ index.text = msg.hit x, y
3624
+ end
3625
+ end
3626
+ }}}
3627
+
3628
+ === marker() » an index ===
3629
+
3630
+ テキストマーカーの開始位置を返します。
3631
+
3632
+ === marker = an index ===
3633
+
3634
+ テキストマーカーの開始位置からカーソル位置までの文字列をハイライトします。
3635
+
3636
+ {{{
3637
+ Shoes.app do
3638
+ background gainsboro
3639
+ extend HH::Markup
3640
+ code = 'alert "Hello Purple Shoes! " * 5'
3641
+ msg = para highlight code, nil
3642
+ button 'marker' do
3643
+ msg.cursor = 17
3644
+ msg.marker = 14
3645
+ msg.text = highlight msg.markup, nil
3646
+ para msg.highlight
3647
+ flush
3648
+ end
3649
+ end
3650
+ }}}
3651
+
3652
+ === markup() » a text ===
3653
+
3654
+ Pangoのマークアップテキストを返します。
3655
+
3656
+ === replace(a string) ===
3657
+
3658
+ ブロック全体のテキストを`a string`の文字で置き換えます。
3659
+
3660
+ === text() » a string ===
3661
+
3662
+ テキストボックスのすべての文字の文字列を返します。画面に表示されるかのように、
3663
+ すべてのスタイルまたはテキストクラスが取り除かれて実際の文字だけを返します。
3664
+
3665
+ === text = a string ===
3666
+
3667
+ ブロック全体のテキストを`a string`の文字で置き換えます。
3668
+
3669
+ === to_s() » a string ===
3670
+
3671
+ [[TextBlock.text]]のエイリアスです。
3672
+ テキストブロックのすべてのコンテンツをフラットにした文字列を返します。
3673
+
3674
+ == Timers ==
3675
+
3676
+ Purple Shoesは3つのタイマーを持っています:Animate、EveryそしてTimerです。
3677
+ AnimateとEveryの両方は開始してから何度も何度も繰り替えします。
3678
+ タイマーは1度だけ実行されます。1回限りのタイマーです。
3679
+
3680
+ animateとeveryは基本的には同じものです。
3681
+ 違いはanimateは普通は1秒間にとてもたくさん実行されます。
3682
+ そしてeveryは数秒間ごとに実行されるか、まれにしか実行されません。
3683
+
3684
+ animateとeveryは自動的に開始されます。
3685
+
3686
+ === start() » self ===
3687
+
3688
+ どちらのタイプのタイマーもそれ自身で自動的に開始されるため、通常はこれは利用する
3689
+ 必要がありません。しかし、[[Timers.stop]]でタイマーを止めて再開したい場合は、
3690
+ もちろん:これを利用してください!
3691
+
3692
+ '''注意:''' Purple Shoesは`start`メソッドをサポートしていません。
3693
+
3694
+ === stop() » self ===
3695
+
3696
+ animateまたはeveryのループを中断します。
3697
+
3698
+ === pause() » self ===
3699
+
3700
+ animateまたはeveryのループを一時停止します。
3701
+ アニメーションまたはタイマーが停止されていれば、開始します。
3702
+ 既に実行されていれば、停止します。
3703
+
3704
+ == Video ==
3705
+
3706
+ Purple Shoesは埋め込みのMP4, AVI, WMV, QuickTimeや他の様々な人気のある
3707
+ ビデオフォーマットをサポートしています。これはすべてRuby/GStreamerのおかげです。
3708
+ Shoes::Videoオブジェクトをセットアップするために`video`メソッドを利用してください。
3709
+ !{:margin_left => 100}man-ele-video.png!
3710
+
3711
+ {{{
3712
+ Shoes.app width: 400, height: 300 do
3713
+ background gold..cyan, angle: 90
3714
+ space = ' ' * 3
3715
+ v = video 'http://is.gd/xZ6Jih'
3716
+ links = para space,
3717
+ link('play'){v.play; links.move(0, 300)},
3718
+ space, link('pause'){v.pause},
3719
+ space, link('-1sec'){v.time -= 1000},
3720
+ space, link('+1sec'){v.time += 1000},
3721
+ top: 250
3722
+ msg = para left: 250, top: 300
3723
+ every do
3724
+ msg.text = fg("#{(v.position*100).to_i}% " +
3725
+ "(#{v.time/1000}/#{v.length.to_i/1000}sec)",
3726
+ darkcyan)
3727
+ end
3728
+ end
3729
+ }}}
3730
+
3731
+ ビデオフォーマットに加えて、MP3、WAVとOgg Vorbisのような、いくつかの
3732
+ オーディオフォーマットもサポートされています。
3733
+
3734
+ === hide() » self ===
3735
+
3736
+ ビデオを非表示します。既に再生しているなら、ビデオは再生を続けます。
3737
+ これはビデオの表示をオフにするだけです。このメソッドの有力な使い方の1つは、
3738
+ MP3のようなオーディオファイルを再生するときに、ビデオの範囲を破壊することです。
3739
+
3740
+ '''注意:''' 今のところPurple Shoesでは`hide`メソッドをサポートしていません。
3741
+
3742
+ === length() » a number ===
3743
+
3744
+ ミリ秒でのビデオ全体の長さです。ビデオがまだロードされていない場合はnilを返します。
3745
+
3746
+ === move(left, top) » self ===
3747
+
3748
+ (left, top)はビデオの左上の角であり、特定の座標にビデオを移動します。
3749
+
3750
+ '''注意:''' 今のところPurple Shoesでは`move`メソッドをサポートしていません。
3751
+
3752
+ === pause() » self ===
3753
+
3754
+ ビデオが再生されていれば、一時停止します。
3755
+
3756
+ === playing?() » true of false ===
3757
+
3758
+ ビデオを現在再生していれば、trueを返します。または、ビデオが一時停止されていたり
3759
+ 停止されている場合はfalseです。
3760
+
3761
+ === play() » self ===
3762
+
3763
+ 既に再生いなければ、ビデオの再生を開始します。既に再生いるのなら、ビデオは
3764
+ 始めから再度開始します。
3765
+
3766
+ === position() » a decimal ===
3767
+
3768
+ (0.0)から(1.0)の間の10進数の(Floatの)数によるビデオの位置です。
3769
+ 例えば、0.5のFloatの値はビデオの中間の位置を示します。
3770
+
3771
+ === position = a decimal ===
3772
+
3773
+ Floatの値を利用してビデオの位置を設定します。
3774
+ 25%の位置にビデオを移動するなら:`@video.position = 0.25`。
3775
+
3776
+ === remove() » self ===
3777
+
3778
+ ビデオをスロットから取り除きます。なおビデオを停止します。
3779
+
3780
+ '''注意:''' 今のところPurple Shoesでは`remove`メソッドをサポートしていません。
3781
+
3782
+ === show() » self ===
3783
+
3784
+ `hide()`メソッドによって非表示にされていたなら、ビデオを表示します。
3785
+
3786
+ '''注意:''' 今のところPurple Shoesでは`show`メソッドをサポートしていません。
3787
+
3788
+ === stop() » self ===
3789
+
3790
+ ビデオが再生されていれば、停止します。
3791
+
3792
+ === time() » a number ===
3793
+
3794
+ ビデオのミリ秒での時間の位置です。そのため、そのビデオが10秒の再生時間なら、
3795
+ このメソッドは10000の数を返します
3796
+
3797
+ === time = a number ===
3798
+
3799
+ ミリ秒の時間でビデオの位置を設定します。
3800
+
3801
+ === toggle() » self ===
3802
+
3803
+ ビデオの可視性をトグルします。ビデオが表示されていれば、`hide`が呼ばれます。
3804
+ そうでなければ、`show`が呼ばれます。
3805
+
3806
+ '''注意:''' 今のところPurple Shoesでは`toggle`メソッドをサポートしていません。
3807
+
3808
+ = AndSoForth =
3809
+
3810
+ その他の情報をこの場所で。
3811
+
3812
+ == Sample Apps ==
3813
+
3814
+ 楽しみましょう。
3815
+
3816
+ {SAMPLES}
3817
+
3818
+ == FAQ ==
3819
+
3820
+ お役立ち情報:
3821
+
3822
+ * [[http://librelist.com/browser/shoes/ Shoes ML]] 気軽にメーリングリストへ参加下さい。
3823
+ * [[https://github.com/ashbb/purple_shoes/ 最新のソースコード]] は GitHubにあります。
3824
+ * Purple Shoes Gemは、[[http://rubygems.org/gems/purple_shoes RubyGems.org]] にあります。
3825
+
3826
+
3827
+ == vs.RedShoes ==
3828
+
3829
+ Purple ShoesはRed Shoesに従っていますが、完全互換ではありません。
3830
+
3831
+ ==== TextBlock ====
3832
+
3833
+ 以下の2つのコードはRed Shoesでは同じ動作をします。
3834
+
3835
+ {{{
3836
+ Shoes.app do
3837
+ para 'hello ' * 20
3838
+ end
3839
+ }}}
3840
+
3841
+ {{{
3842
+ Shoes.app do
3843
+ 20.times{para 'hello '}
3844
+ end
3845
+ }}}
3846
+
3847
+ でもPurple Shoesでは、`:width`オプションを明示的に付ける必要があります。
3848
+
3849
+ {{{
3850
+ Shoes.app do
3851
+ 20.times{para 'hello ', width: 40}
3852
+ end
3853
+ }}}
3854
+
3855
+ もし`:width`オプションを付けないと、Purple Shoesは`parent.width`でそのテキストブロックを生成します。
3856
+
3857
+ 詳細は、[[http://ashbb.github.com/green_shoes/Red_Shoes_and_Green_Shoes.html Red Shoes and Green Shoes]]を
3858
+ 参照下さい。
3859
+
3860
+ == gshoes ==
3861
+
3862
+ '''gshoes''' は、実行可能なgem コマンドです。いつくかのオプションを持っています。コンソールウィンドウを開いて `gshoes (options or app.rb or app.gsy)` と実行します。
3863
+
3864
+ === -m, -men ===
3865
+
3866
+ 英語マニュアルを表示します。
3867
+
3868
+ === -mjp ===
3869
+
3870
+ 日本語マニュアルを表示します。
3871
+
3872
+ === -p ===
3873
+
3874
+ あなたのPurple Shoesアプリケーションを .gsy ファイルにします。GSYはPurple Shoes YAMLの略です。
3875
+
3876
+ === -v ===
3877
+
3878
+ バージョンを表示します。
3879
+
3880
+ === -h ===
3881
+
3882
+ ヘルプメッセージを表示します。