ruby-miyako-mswin32 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. data/README +1115 -0
  2. data/img/cursor.png +0 -0
  3. data/img/cursors.png +0 -0
  4. data/img/dice.png +0 -0
  5. data/img/wait_cursor.png +0 -0
  6. data/img/win_base.png +0 -0
  7. data/img/window.png +0 -0
  8. data/install_miyako.rb +87 -0
  9. data/lib/Miyako/API/audio.rb +584 -0
  10. data/lib/Miyako/API/basic_data.rb +1026 -0
  11. data/lib/Miyako/API/bitmap.rb +534 -0
  12. data/lib/Miyako/API/choices.rb +481 -0
  13. data/lib/Miyako/API/collision.rb +638 -0
  14. data/lib/Miyako/API/diagram.rb +586 -0
  15. data/lib/Miyako/API/drawing.rb +151 -0
  16. data/lib/Miyako/API/exceptions.rb +105 -0
  17. data/lib/Miyako/API/fixedmap.rb +462 -0
  18. data/lib/Miyako/API/font.rb +430 -0
  19. data/lib/Miyako/API/input.rb +456 -0
  20. data/lib/Miyako/API/layout.rb +644 -0
  21. data/lib/Miyako/API/map.rb +583 -0
  22. data/lib/Miyako/API/map_event.rb +222 -0
  23. data/lib/Miyako/API/modules.rb +357 -0
  24. data/lib/Miyako/API/movie.rb +166 -0
  25. data/lib/Miyako/API/parts.rb +188 -0
  26. data/lib/Miyako/API/plane.rb +205 -0
  27. data/lib/Miyako/API/screen.rb +341 -0
  28. data/lib/Miyako/API/shape.rb +443 -0
  29. data/lib/Miyako/API/sprite.rb +773 -0
  30. data/lib/Miyako/API/sprite_animation.rb +494 -0
  31. data/lib/Miyako/API/sprite_list.rb +1135 -0
  32. data/lib/Miyako/API/spriteunit.rb +168 -0
  33. data/lib/Miyako/API/story.rb +350 -0
  34. data/lib/Miyako/API/textbox.rb +773 -0
  35. data/lib/Miyako/API/utility.rb +419 -0
  36. data/lib/Miyako/API/viewport.rb +190 -0
  37. data/lib/Miyako/API/yuki.rb +1180 -0
  38. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  39. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  40. data/lib/Miyako/EXT/slides.rb +157 -0
  41. data/lib/Miyako/miyako.rb +201 -0
  42. data/lib/Miyako/miyako_no_katana.so +0 -0
  43. data/lib/Miyako/miyako_require_only.rb +35 -0
  44. data/logo/EGSR_logo.png +0 -0
  45. data/logo/EGSR_logo_bg.png +0 -0
  46. data/logo/EGSR_logo_fg.png +0 -0
  47. data/logo/EGSR_title_banner.png +0 -0
  48. data/logo/EGSR_title_logo.png +0 -0
  49. data/logo/miyako.png +0 -0
  50. data/logo/miyako_banner.png +0 -0
  51. data/logo/space.png +0 -0
  52. data/sample/Animation1/m1ku.rb +68 -0
  53. data/sample/Animation1/m1ku_arm_0.png +0 -0
  54. data/sample/Animation1/m1ku_arm_1.png +0 -0
  55. data/sample/Animation1/m1ku_arm_2.png +0 -0
  56. data/sample/Animation1/m1ku_arm_3.png +0 -0
  57. data/sample/Animation1/m1ku_back.jpg +0 -0
  58. data/sample/Animation1/m1ku_body.png +0 -0
  59. data/sample/Animation1/m1ku_eye_0.png +0 -0
  60. data/sample/Animation1/m1ku_eye_1.png +0 -0
  61. data/sample/Animation1/m1ku_eye_2.png +0 -0
  62. data/sample/Animation1/m1ku_eye_3.png +0 -0
  63. data/sample/Animation1/m1ku_hair_front.png +0 -0
  64. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  65. data/sample/Animation1/readme.txt +72 -0
  66. data/sample/Animation2/lex.rb +96 -0
  67. data/sample/Animation2/lex_back.png +0 -0
  68. data/sample/Animation2/lex_body.png +0 -0
  69. data/sample/Animation2/lex_roadroller.png +0 -0
  70. data/sample/Animation2/lex_wheel_0.png +0 -0
  71. data/sample/Animation2/lex_wheel_1.png +0 -0
  72. data/sample/Animation2/lex_wheel_2.png +0 -0
  73. data/sample/Animation2/readme.txt +72 -0
  74. data/sample/Animation2/song_title.png +0 -0
  75. data/sample/Diagram_sample/back.png +0 -0
  76. data/sample/Diagram_sample/chr01.png +0 -0
  77. data/sample/Diagram_sample/chr02.png +0 -0
  78. data/sample/Diagram_sample/cursor.png +0 -0
  79. data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
  80. data/sample/Diagram_sample/readme.txt +90 -0
  81. data/sample/Diagram_sample/wait_cursor.png +0 -0
  82. data/sample/Room3/blue.rb +297 -0
  83. data/sample/Room3/ending.rb +180 -0
  84. data/sample/Room3/green.rb +220 -0
  85. data/sample/Room3/image/akamatsu.png +0 -0
  86. data/sample/Room3/image/aoyama.png +0 -0
  87. data/sample/Room3/image/congra.png +0 -0
  88. data/sample/Room3/image/congratulation.png +0 -0
  89. data/sample/Room3/image/congratulation_bg.png +0 -0
  90. data/sample/Room3/image/cursor.png +0 -0
  91. data/sample/Room3/image/midori.png +0 -0
  92. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  93. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  94. data/sample/Room3/image/room_blue.png +0 -0
  95. data/sample/Room3/image/room_green.png +0 -0
  96. data/sample/Room3/image/room_red.png +0 -0
  97. data/sample/Room3/image/start.png +0 -0
  98. data/sample/Room3/image/three_doors.png +0 -0
  99. data/sample/Room3/image/wait_cursor.png +0 -0
  100. data/sample/Room3/main.rb +120 -0
  101. data/sample/Room3/main_component.rb +59 -0
  102. data/sample/Room3/readme.txt +76 -0
  103. data/sample/Room3/red.rb +227 -0
  104. data/sample/Room3/room3.rb +25 -0
  105. data/sample/Room3/title.rb +184 -0
  106. data/sample/ball_action_sample.rb +204 -0
  107. data/sample/blit_rop.rb +70 -0
  108. data/sample/cairo_sample.rb +25 -0
  109. data/sample/circle_collision_test.rb +66 -0
  110. data/sample/collision_test.rb +33 -0
  111. data/sample/collision_test2.rb +108 -0
  112. data/sample/fixed_map_test/cursor.png +0 -0
  113. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  114. data/sample/fixed_map_test/map.csv +19 -0
  115. data/sample/fixed_map_test/map_01.png +0 -0
  116. data/sample/fixed_map_test/mapchip.csv +23 -0
  117. data/sample/fixed_map_test/monster.png +0 -0
  118. data/sample/fixed_map_test/readme.txt +72 -0
  119. data/sample/map_test/chara.rb +58 -0
  120. data/sample/map_test/chr1.png +0 -0
  121. data/sample/map_test/cursor.png +0 -0
  122. data/sample/map_test/main_parts.rb +69 -0
  123. data/sample/map_test/main_scene.rb +153 -0
  124. data/sample/map_test/map.png +0 -0
  125. data/sample/map_test/map2.png +0 -0
  126. data/sample/map_test/map_layer.csv +127 -0
  127. data/sample/map_test/map_manager.rb +75 -0
  128. data/sample/map_test/map_test.rb +23 -0
  129. data/sample/map_test/mapchip.csv +21 -0
  130. data/sample/map_test/oasis.rb +71 -0
  131. data/sample/map_test/readme.txt +89 -0
  132. data/sample/map_test/route.rb +157 -0
  133. data/sample/map_test/sea.png +0 -0
  134. data/sample/map_test/town.rb +74 -0
  135. data/sample/map_test/wait_cursor.png +0 -0
  136. data/sample/map_test/window.png +0 -0
  137. data/sample/polygon_test.rb +35 -0
  138. data/sample/rasterscroll.rb +25 -0
  139. data/sample/takahashi.rb +42 -0
  140. data/sample/text.png +0 -0
  141. data/sample/textbox_sample.rb +190 -0
  142. data/sample/transform.rb +54 -0
  143. data/sample/utility_test.rb +73 -0
  144. data/sample/utility_test2.rb +61 -0
  145. data/sample/utility_test3.rb +64 -0
  146. data/sample/utility_test4.rb +73 -0
  147. data/uninstall_miyako.rb +19 -0
  148. metadata +199 -0
@@ -0,0 +1,443 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ @@modes = [:text, :txt_calc, :takahashi, :tk_calc]
25
+
26
+ #==テキストや図形を描画するクラス
27
+ #図形は、長方形・丸み付き長方形・円・楕円が描画可能
28
+ #文字列は、通常の文字列と高橋メソッド形式文字列が描画可能
29
+ class Shape
30
+ def init_parameter(parameter)
31
+ @text = parameter[:text]
32
+ @size = parameter[:size] ||= Size.new(100,100)
33
+ @color = parameter[:color] ||= Color[:white]
34
+ @font = parameter[:font] ||= Font.sans_serif
35
+ @ray = parameter[:ray] ||= 0
36
+ @edge = parameter[:edge] ||= nil
37
+ @align = parameter[:align] ||= :left
38
+ @valign = parameter[:valign] ||= :middle
39
+ @lines = parameter[:lines] ||= 2
40
+ @vertexes = parameter[:vertexes] ||= []
41
+ end
42
+
43
+ @@shape_executer = Shape.new
44
+
45
+ #===テキストを描画した画像を作成
46
+ #_param_:: 設定パラメータ。ハッシュ形式。
47
+ #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
48
+ #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left))
49
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
50
+ #_&block_:: 描画するテキスト(Yuki形式)
51
+ #返却値:: テキストを描画したスプライト
52
+ def Shape.text(param, &block)
53
+ raise MiyakoValueError, "Cannot find any text(:text parameter)!" unless (param[:text] || block)
54
+ @@shape_executer.create_text(param, block)
55
+ end
56
+
57
+ #===テキストを高橋メソッド形式で描画した画像を作成
58
+ #指定した大きさの矩形・行数で文字を描画する。
59
+ #指定した行数で描画を基準に文字サイズを算出する。
60
+ #但し、文字列が長すぎる時は、その文字数を基準に文字サイズを算出する。
61
+ #ブロックに渡した行数が指定数より多くなると文字列がはみ出るため、注意すること。
62
+ #_param_:: 設定パラメータ。ハッシュ形式。
63
+ #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
64
+ #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left),
65
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]))
66
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
67
+ #(:lines => 描画する行数(デフォルトは2))
68
+ #_&block_:: 描画するテキスト(Yuki形式)
69
+ #返却値:: テキストを描画したスプライト
70
+ def Shape.takahashi(param, &block)
71
+ @@shape_executer.takahashi(param, block)
72
+ end
73
+
74
+ #===長方形を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
75
+ #_param_:: 設定パラメータ。ハッシュ形式。
76
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]),
77
+ #:color => 長方形の色[r,g,b(,a)]、デフォルトはColor[:white],
78
+ #:edge] => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
79
+ #返却値:: 描画したスプライト
80
+ def Shape.box(param)
81
+ @@shape_executer.box(param)
82
+ end
83
+
84
+ #===丸み付き長方形を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
85
+ #_param_:: 設定パラメータ。ハッシュ形式。
86
+ #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]),
87
+ #:ray => 丸みの半径の大きさ(ピクセル単位。デフォルトは0),
88
+ #:color => 長方形の色[r,g,b(,a)]、デフォルトはColor[:white],
89
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
90
+ #返却値:: 描画したスプライト
91
+ def Shape.roundbox(param)
92
+ @@shape_executer.roundbox(param)
93
+ end
94
+
95
+ #===円を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
96
+ #_param_:: 設定パラメータ。ハッシュ形式。
97
+ #(:ray => 円の半径の大きさ(ピクセル単位。デフォルトは0),
98
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
99
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
100
+ #返却値:: 描画したスプライト
101
+ def Shape.circle(param)
102
+ @@shape_executer.circle(param)
103
+ end
104
+
105
+ #===楕円を描画する(エッジ付きも可。そのとき、エッジは指定したサイズより内側に描画する)
106
+ #_param_:: 設定パラメータ。ハッシュ形式。
107
+ #(:size => 楕円の半径の横・縦の大きさ(ピクセル単位。デフォルトは0),
108
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
109
+ #:edge => エッジを設定する。値は{:color=>色, :width=>幅}のハッシュを割り付ける)
110
+ #返却値:: 描画したスプライト
111
+ def Shape.ellipse(param)
112
+ @@shape_executer.ellipse(param)
113
+ end
114
+
115
+ #===多角形を描画する
116
+ #_param_:: 設定パラメータ。ハッシュ形式。
117
+ #:vertexes => 頂点リスト。[x,y]形式の配列の配列,
118
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
119
+ #返却値:: 描画したスプライト
120
+ def Shape.polygon(param)
121
+ @@shape_executer.polygon(param)
122
+ end
123
+
124
+ def create_text(param, text_block) #:nodoc:
125
+ init_parameter(param)
126
+ text_block = lambda{ @text } if @text
127
+ org_size = @font.size
128
+ org_color = @font.color
129
+ @margins = []
130
+ @heights = []
131
+ area_size = calc(text_block)
132
+ @sprite = Sprite.new({size: area_size, type: :ac})
133
+ Drawing.fill(@sprite, [0, 0, 0])
134
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
135
+ case @align
136
+ when :left
137
+ @margins = @margins.map{|v| 0 }
138
+ when :center
139
+ @margins = @margins.map{|v| (area_size.w - v) >> 1 }
140
+ when :right
141
+ @margins = @margins.map{|v| area_size.w - v }
142
+ end
143
+ @lines = @margins.length
144
+ vmargin = 0
145
+ case @valign
146
+ when :top
147
+ vmargin = 0
148
+ when :middle
149
+ vmargin = (area_size.h - @heights.inject(:+)) >> 1
150
+ when :bottom
151
+ vmargin = area_size.h - @heights.inject(:+)
152
+ end
153
+ @locate = Point.new(@margins.shift, vmargin)
154
+ text instance_eval(&text_block)
155
+ @font.size = org_size
156
+ @font.color = org_color
157
+ return @sprite
158
+ end
159
+
160
+ def takahashi(param, text_block) #:nodoc:
161
+ init_parameter(param)
162
+ org_size = @font.size
163
+ org_color = @font.color
164
+ olines = @lines
165
+ # calc font size
166
+ @font.size = @size[1] / @lines
167
+ # calc font size incldue line_height
168
+ @font.size = @font.size * @font.size / @font.line_height
169
+ set_font_size_inner(text_block)
170
+ # over lines?
171
+ if @lines > olines
172
+ @font.size = @size[1] / @lines
173
+ @font.size = @font.size * @font.size / @font.line_height
174
+ set_font_size_inner(text_block)
175
+ end
176
+ # over width?
177
+ if @img_size.w > @size[0]
178
+ @font.size = @font.size * @size[0] / @img_size.w
179
+ set_font_size_inner(text_block)
180
+ end
181
+ case @align
182
+ when :left
183
+ @margins = @margins.map{|v| 0 }
184
+ when :center
185
+ @margins = @margins.map{|v| (@size[0] - v) / 2 }
186
+ when :right
187
+ @margins = @margins.map{|v| @size[0] - v }
188
+ end
189
+ vmargin = 0
190
+ case @valign
191
+ when :top
192
+ vmargin = 0
193
+ when :middle
194
+ vmargin = (@size[1] - @heights.inject(:+)) >> 1
195
+ when :bottom
196
+ vmargin = @size[1] - @heights.inject(:+)
197
+ end
198
+ @sprite = Sprite.new({size: @size, type: :ac})
199
+ Drawing.fill(@sprite, [0, 0, 0])
200
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
201
+ @locate = Point.new(@margins.shift, vmargin)
202
+ text instance_eval(&text_block)
203
+ @font.size = org_size
204
+ @font.color = org_color
205
+ return @sprite
206
+ end
207
+
208
+ def set_font_size_inner(text_block) #:nodoc:
209
+ @max_height = @font.line_height
210
+ @margins = []
211
+ @heights = []
212
+ @lines = 1
213
+ tcalc(text_block)
214
+ end
215
+
216
+ def calc(block) #:nodoc:
217
+ @locate = Point.new(0, 0)
218
+ @img_size = Size.new(0, 0)
219
+ @max_height = @font.line_height
220
+ @lines = 1
221
+ @calc_mode = true
222
+ text instance_eval(&block)
223
+ @calc_mode = false
224
+ if @locate.x != 0
225
+ @margins << @locate.x
226
+ @img_size.w = [@locate.x, @img_size.w].max
227
+ @img_size.h += @max_height
228
+ @heights << @max_height
229
+ end
230
+ return @img_size
231
+ end
232
+
233
+ def tcalc(block) #:nodoc:
234
+ @locate = Point.new(0, 0)
235
+ @img_size = Size.new(0, 0)
236
+ @calc_mode = true
237
+ text instance_eval(&block)
238
+ @calc_mode = false
239
+ if @locate.x != 0
240
+ @margins << @locate.x if @locate.x != 0
241
+ @heights << @max_height
242
+ end
243
+ @img_size.w = [@locate.x, @img_size.w].max
244
+ end
245
+
246
+ #===Shape.textメソッドのブロック内で使用する、文字描画指示メソッド
247
+ #(例)Shape.text(){ text "abc" }
248
+ #(例)Shape.takahashi(:size=>[200,200]){ text "名前重要" }
249
+ #_text_:: 描画するテキスト
250
+ #返却値:: 自分自身
251
+ def text(txt)
252
+ return self if txt.eql?(self)
253
+ txt = txt.gsub(/[\n\r\t\f]/,"")
254
+ @font.draw_text(@sprite, txt, @locate.x, @locate.y) unless @calc_mode
255
+ @locate.x += @font.text_size(txt)[0]
256
+ return self
257
+ end
258
+
259
+ #===Shape.text/takahashiメソッドのブロック内で使用する、文字色指示メソッド
260
+ #ブロック内で指定した範囲でのみ色が変更される
261
+ #(例)Shape.text(){ text "abc"; cr; color(:red){"def"} }
262
+ #_color_:: 変更する色([r,g,b])もしくはColor[]メソッドの引数
263
+ #返却値:: 自分自身
264
+ def color(color, &block)
265
+ @font.color_during(Color.to_rgb(color)){ text instance_eval(&block) }
266
+ return self
267
+ end
268
+
269
+ #===Shape.textメソッドのブロック内で使用する、文字サイズ指示メソッド
270
+ #ブロック内で指定した範囲でのみサイズが変更される
271
+ #(例)Shape.text(){ text "abc"; cr; size(16){"def"} }
272
+ #_size_:: 変更するサイズ(整数)
273
+ #返却値:: 自分自身
274
+ def size(size, &block)
275
+ @font.size_during(size){
276
+ @max_height = [@max_height, @font.line_height].max
277
+ size_inner(@font.margin_height(@valign, @max_height), &block)
278
+ }
279
+ return self
280
+ end
281
+
282
+ def size_inner(margin, &block) #:nodoc:
283
+ @locate.y += margin
284
+ text instance_eval(&block)
285
+ @locate.y -= margin
286
+ end
287
+
288
+ #===Shape.textメソッドのブロック内で使用する、太文字指示メソッド
289
+ #ブロック内で指定した範囲でのみ太文字になる
290
+ #(使用すると文字の端が切れてしまう場合あり!)
291
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
292
+ #返却値:: 自分自身
293
+ def bold(&block)
294
+ @font.bold{ text instance_eval(&block) }
295
+ return self
296
+ end
297
+
298
+ #===Shape.textメソッドのブロック内で使用する、斜体指示メソッド
299
+ #ブロック内で指定した範囲でのみ斜体文字になる
300
+ #(使用すると文字の端が切れてしまう場合あり!)
301
+ #(例)Shape.text(){ text "abc"; cr; italic{"def"} }
302
+ #返却値:: 自分自身
303
+ def italic(&block)
304
+ @font.italic{ text instance_eval(&block) }
305
+ return self
306
+ end
307
+
308
+ #===Shape.textメソッドのブロック内で使用する、下線指示メソッド
309
+ #ブロック内で指定した範囲でのみ文字に下線が付く
310
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
311
+ #返却値:: 自分自身
312
+ def under_line(&block)
313
+ @font.under_line{ text instance_eval(&block) }
314
+ return self
315
+ end
316
+
317
+ #===Shape.text/takahashiメソッドのブロック内で使用する、改行指示メソッド
318
+ #(例)Shape.text(){ text "abc"; cr; bold{"def"} }
319
+ #返却値:: 自分自身
320
+ def cr
321
+ if @calc_mode
322
+ @margins << @locate.x
323
+ @heights << @max_height
324
+ @img_size.w = [@locate.x, @img_size.w].max
325
+ @img_size.h += @max_height
326
+ @locate.x = 0
327
+ @lines += 1
328
+ else
329
+ @locate.x = @margins.shift || 0
330
+ end
331
+ @locate.y += @max_height
332
+ return self
333
+ end
334
+
335
+ def box(param) #:nodoc:
336
+ init_parameter(param)
337
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
338
+ w = @size[0]
339
+ h = @size[1]
340
+ Drawing.fill(s, [0, 0, 0])
341
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
342
+ if @edge
343
+ width = @edge[:width]
344
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@edge[:color]), true)
345
+ Drawing.rect(s, [width, width, w-width*2-1, h-width*2-1], Color.to_rgb(@color), true)
346
+ else
347
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@color), true)
348
+ end
349
+ return s
350
+ end
351
+
352
+ def roundbox_basic(s, x, y, w, h, r, c) #:nodoc:
353
+ color = Color.to_rgb(c)
354
+ Drawing.circle(s, [r+x, r+y], r, color, true)
355
+ Drawing.circle(s, [w-r-x-1, r+y], r, color, true)
356
+ Drawing.circle(s, [r+x, h-r-y-1], r, color, true)
357
+ Drawing.circle(s, [w-r-x-1, h-r-y-1], r, color, true)
358
+ Drawing.rect(s, [x, y+r, w-x*2, h-y*2-r*2], color, true)
359
+ Drawing.rect(s, [x+r, y, w-x*2-r*2, h-x*2], color, true)
360
+ end
361
+
362
+ def roundbox(param) #:nodoc:
363
+ init_parameter(param)
364
+ w = @size[0]
365
+ h = @size[1]
366
+ s = Sprite.new(size: @size, type: :ac)
367
+ Drawing.fill(s, [0, 0, 0])
368
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
369
+ if @edge
370
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@edge[:color]))
371
+ roundbox_basic(s, [@edge[:width], @edge[:width], w, h], @ray, Color.to_rgb(@color))
372
+ else
373
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@color))
374
+ end
375
+ return s
376
+ end
377
+
378
+ def circle(param) #:nodoc:
379
+ init_parameter(param)
380
+ s = Sprite.new(size: [@ray*2+1, @ray*2+1], type: :alpha_channel)
381
+ Drawing.fill(s, [0, 0, 0])
382
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
383
+ if @edge
384
+ et, ec = sp.get_param(:edge)[0..1]
385
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@edge[:color]), true)
386
+ Drawing.circle(s, [@ray, @ray], @ray-@edge[:width], Color.to_rgb(@color), true)
387
+ else
388
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@color), true)
389
+ end
390
+ return s
391
+ end
392
+
393
+ def ellipse(param) #:nodoc:
394
+ init_parameter(param)
395
+ w = @size[0]
396
+ w2 = w * 2 + 1
397
+ h = @size[1]
398
+ h2 = h * 2 + 1
399
+ s = Sprite.new(size: [w2, h2], type: :alpha_channel)
400
+ Drawing.fill(s, [0, 0, 0])
401
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
402
+ if @edge
403
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@edge[:color]), true)
404
+ Drawing.ellipse(s, [w, h], w-@edge[:width], h-@edge[:width], Color.to_rgb(@color), true)
405
+ else
406
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@color), true)
407
+ end
408
+ return s
409
+ end
410
+
411
+ def polygon(param) #:nodoc:
412
+ init_parameter(param)
413
+
414
+ min_x, max_x = @vertexes.map{|v| v[0]}.minmax
415
+ min_y, max_y = @vertexes.map{|v| v[1]}.minmax
416
+
417
+ w = max_x - min_x
418
+ h = max_y - min_y
419
+
420
+ @vertexes = @vertexes.map{|v| [v[0]-min_x, v[1]-min_y]}
421
+
422
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
423
+ Drawing.fill(s, [0, 0, 0])
424
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
425
+ Drawing.polygon(s, @vertexes, Color.to_rgb(@color), true)
426
+ return s
427
+ end
428
+
429
+ private :roundbox_basic
430
+ end
431
+ end
432
+
433
+ class String
434
+ #===文字列から、その文字を描画したスプライトを作成する
435
+ #自分自身が持つ文字列をShape.textメソッドを使用して画像を作成する
436
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
437
+ #_data_:: 描画するフォント(Fontクラスのインスタンス)
438
+ def to_sprite(data)
439
+ sprite = Miyako::Shape.text({:text => self, :font => data})
440
+ yield sprite if block_given?
441
+ return sprite
442
+ end
443
+ end