cyross-ruby-miyako 2.0.0 → 2.0.5.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.
- data/README +106 -154
- data/defines.h +144 -0
- data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
- data/extern.h +29 -0
- data/install_miyako.rb +26 -14
- data/lib/Miyako/API/audio.rb +2 -2
- data/lib/Miyako/API/basic_data.rb +183 -41
- data/lib/Miyako/API/bitmap.rb +474 -2
- data/lib/Miyako/API/choices.rb +215 -48
- data/lib/Miyako/API/collision.rb +267 -251
- data/lib/Miyako/API/diagram.rb +58 -70
- data/lib/Miyako/API/drawing.rb +93 -52
- data/lib/Miyako/API/fixedmap.rb +233 -120
- data/lib/Miyako/API/font.rb +59 -40
- data/lib/Miyako/API/input.rb +34 -27
- data/lib/Miyako/API/layout.rb +154 -172
- data/lib/Miyako/API/map.rb +285 -159
- data/lib/Miyako/API/map_event.rb +4 -4
- data/lib/Miyako/API/modules.rb +1 -1
- data/lib/Miyako/API/movie.rb +8 -5
- data/lib/Miyako/API/parts.rb +44 -9
- data/lib/Miyako/API/plane.rb +37 -2
- data/lib/Miyako/API/screen.rb +90 -22
- data/lib/Miyako/API/shape.rb +118 -37
- data/lib/Miyako/API/sprite.rb +475 -61
- data/lib/Miyako/API/sprite_animation.rb +83 -63
- data/lib/Miyako/API/spriteunit.rb +47 -13
- data/lib/Miyako/API/story.rb +123 -47
- data/lib/Miyako/API/textbox.rb +361 -132
- data/lib/Miyako/API/utility.rb +388 -0
- data/lib/Miyako/API/viewport.rb +54 -349
- data/lib/Miyako/API/yuki.rb +570 -353
- data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
- data/lib/Miyako/EXT/slides.rb +22 -1
- data/lib/Miyako/miyako.rb +12 -13
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/miyako_basicdata.c +590 -0
- data/miyako_bitmap.c +1225 -0
- data/miyako_collision.c +403 -0
- data/miyako_drawing.c +187 -0
- data/miyako_font.c +334 -0
- data/miyako_hsv.c +830 -0
- data/miyako_layout.c +191 -0
- data/miyako_no_katana.c +1074 -0
- data/miyako_transform.c +438 -0
- data/miyako_utility.c +288 -0
- data/sample/Animation1/m1ku.rb +10 -31
- data/sample/Animation1/readme.txt +6 -6
- data/sample/Animation2/lex.rb +1 -0
- data/sample/Animation2/readme.txt +6 -6
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
- data/sample/Diagram_sample/readme.txt +9 -6
- data/sample/Room3/blue.rb +234 -187
- data/sample/Room3/ending.rb +68 -63
- data/sample/Room3/green.rb +159 -124
- data/sample/Room3/main.rb +50 -32
- data/sample/Room3/main_component.rb +3 -2
- data/sample/Room3/readme.txt +6 -6
- data/sample/Room3/red.rb +161 -134
- data/sample/Room3/room3.rb +1 -0
- data/sample/Room3/title.rb +75 -62
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +66 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +108 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
- data/sample/fixed_map_test/readme.txt +38 -38
- data/sample/map_test/chara.rb +17 -9
- data/sample/map_test/main_parts.rb +30 -9
- data/sample/map_test/main_scene.rb +57 -41
- data/sample/map_test/map_manager.rb +13 -30
- data/sample/map_test/map_test.rb +2 -2
- data/sample/map_test/oasis.rb +17 -11
- data/sample/map_test/readme.txt +50 -48
- data/sample/map_test/route.rb +46 -33
- data/sample/map_test/town.rb +19 -13
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +190 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +165 -148
- data/miyako.png +0 -0
- data/miyako_banner.png +0 -0
- data/miyako_no_katana/miyako_no_katana.c +0 -3301
- data/sample/fixed_map_test/map_sample.rb +0 -121
data/lib/Miyako/API/font.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
6
6
|
|
7
7
|
This library is free software; you can redistribute it and/or
|
8
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -25,12 +25,17 @@ module Miyako
|
|
25
25
|
|
26
26
|
=begin rdoc
|
27
27
|
==フォント管理クラス
|
28
|
+
フォントは、等幅フォント奨励(プロポーショナルフォントを選ぶと、文字が正しく描画されない可能性あり)
|
28
29
|
=end
|
29
30
|
class Font
|
30
31
|
extend Forwardable
|
31
32
|
|
33
|
+
# OS_MAC_OS_X = "mac_osx"
|
34
|
+
# ORG_ENC = "UTF-8"
|
35
|
+
# NEW_ENC = "UTF-8-MAC"
|
36
|
+
|
32
37
|
attr_reader :size, :line_skip, :height, :ascent, :descent
|
33
|
-
attr_accessor :color, :use_shadow, :shadow_color, :shadow_margin, :vspace, :
|
38
|
+
attr_accessor :color, :use_shadow, :shadow_color, :shadow_margin, :vspace, :hspace
|
34
39
|
|
35
40
|
@@font_cache = {}
|
36
41
|
|
@@ -43,10 +48,10 @@ module Miyako
|
|
43
48
|
"/ライブラリ/Fonts/", "/システム/ライブラリ/Fonts/"]
|
44
49
|
|
45
50
|
@@font_base_name = Hash.new
|
46
|
-
@@font_base_name["win"] = [{:serif=>"msmincho.ttc", :sans_serif=>"
|
47
|
-
{:serif=>"msmincho.ttc", :sans_serif=>"msgothic.ttc"},
|
51
|
+
@@font_base_name["win"] = [{:serif=>"msmincho.ttc", :sans_serif=>"msgothic.ttc"},
|
48
52
|
{:serif=>"VL-Gothic-Regular.ttf", :sans_serif=>"VL-Gothic-Regular.ttf"},
|
49
|
-
{:serif=>"umeplus-gothic.ttf", :sans_serif=>"umeplus-gothic.ttf"}
|
53
|
+
{:serif=>"umeplus-gothic.ttf", :sans_serif=>"umeplus-gothic.ttf"},
|
54
|
+
{:serif=>"msmincho.ttc", :sans_serif=>"meiryo.ttc"}]
|
50
55
|
@@font_base_name["linux"] = [{:serif=>"sazanami-mincho.ttf", :sans_serif=>"sazanami-gothic.ttf"},
|
51
56
|
{:serif=>"VL-Gothic-Regular.ttf", :sans_serif=>"VL-Gothic-Regular.ttf"},
|
52
57
|
{:serif=>"umeplus-gothic.ttf", :sans_serif=>"umeplus-gothic.ttf"}]
|
@@ -62,7 +67,7 @@ module Miyako
|
|
62
67
|
def Font.search_font_path_file(hash, path) #:nodoc:
|
63
68
|
Dir.glob(path+"*"){|d|
|
64
69
|
hash = Font.search_font_path_file(hash, d+"/") if test(?d, d)
|
65
|
-
d =
|
70
|
+
d = d.encode(Encoding::UTF_8) if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
|
66
71
|
d = d.tr("\\", "\/")
|
67
72
|
hash[$1] = d if (d =~ /\/([^\/\.]+\.tt[fc])\z/ || d =~ /\/([^\/\.]+\.otf)\z/) # MacOSX対応
|
68
73
|
}
|
@@ -72,21 +77,21 @@ module Miyako
|
|
72
77
|
def Font.create_font_path #:nodoc:
|
73
78
|
osn = Miyako::getOSName
|
74
79
|
@@font_base_path[osn].each{|path|
|
75
|
-
path =
|
80
|
+
path = path.encode(Encoding::UTF_8) if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
|
76
81
|
path = path.tr("\\", "\/")
|
77
82
|
@@name_2_font_path = Font.search_font_path_file(@@name_2_font_path, path)
|
78
83
|
}
|
79
84
|
end
|
80
85
|
|
81
86
|
def Font.findFontPath(fname) #:nodoc:
|
82
|
-
fname =
|
87
|
+
fname = fname.encode(Encoding::UTF_8) if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
|
83
88
|
return @@name_2_font_path.fetch(fname, nil)
|
84
89
|
end
|
85
90
|
|
86
91
|
def Font.get_font_inner(fname, fpath, size=16) #:nodoc:
|
87
92
|
if Miyako.getOSName == "mac_osx" # MacOSXはパス名がUTF-8固定のため
|
88
|
-
fname =
|
89
|
-
fpath =
|
93
|
+
fname = fname.encode(Encoding::UTF_8)
|
94
|
+
fpath = fpath.encode(Encoding::UTF_8)
|
90
95
|
end
|
91
96
|
@@font_cache[fname] ||= {}
|
92
97
|
@@font_cache[fname][size] ||= SDL::TTF.open(fpath, size)
|
@@ -103,7 +108,12 @@ module Miyako
|
|
103
108
|
private :init_height
|
104
109
|
|
105
110
|
#===インスタンス生成
|
106
|
-
|
111
|
+
#指定したフォントファイル名から、フォントインスタンスを生成する。
|
112
|
+
#フォントファイルのパスは、Miyako2.0起動時にファイルパス(カレントディレクトリとシステムのフォントディレクトリ)を
|
113
|
+
#再帰的に検索し、先に見つけた方を採用する(同一ファイル名がカレントディレクトリとシステムのディレクトリに両方
|
114
|
+
#存在するときは、カレントディレクトリを優先する)
|
115
|
+
#そのため、フォントファイル名は、パスを指定する必要がない(逆に言うと、パスを指定すると例外が発生する)。
|
116
|
+
#_fname_:: フォントファイル名(フォントファミリー名不可)。パス指定不可
|
107
117
|
#_size_:: フォントの大きさ。単位はピクセル。デフォルトは 16
|
108
118
|
#返却値:: 生成されたインスタンスを返す
|
109
119
|
def initialize(fname, size=16)
|
@@ -111,15 +121,14 @@ module Miyako
|
|
111
121
|
@color = [255, 255, 255]
|
112
122
|
@fname = fname
|
113
123
|
@vspace = 0
|
124
|
+
@hspace = 0
|
114
125
|
@bold = false
|
115
126
|
@italic = false
|
116
127
|
@under_line = false
|
117
|
-
@draw_type = :mild
|
118
128
|
@fpath = Font.findFontPath(@fname) or raise MiyakoError, "Cannot Find Font! : #{@fname}"
|
119
129
|
@font = Font.get_font_inner(@fname, @fpath, @size)
|
120
130
|
@font.style = SDL::TTF::STYLE_NORMAL
|
121
131
|
init_height
|
122
|
-
@draw_text = {:solid => self.method(:_draw_text), :mild => self.method(:_draw_text_mild)}
|
123
132
|
@use_shadow = false
|
124
133
|
@shadow_color = [128, 128, 128]
|
125
134
|
@shadow_margin = [2, 2]
|
@@ -300,40 +309,48 @@ module Miyako
|
|
300
309
|
#_x_:: 描画位置x軸
|
301
310
|
#_y_:: 描画位置Y軸
|
302
311
|
def draw_text(dst, str, x, y)
|
303
|
-
str = str.
|
304
|
-
str
|
305
|
-
return @draw_text[@draw_type][dst, str, x, y]
|
306
|
-
end
|
307
|
-
|
308
|
-
def _draw_text(dst, str, x, y) #:nodoc:
|
309
|
-
@font.drawSolidUTF8(dst.bitmap, str, x + @shadow_margin[0], y + @shadow_margin[1], @shadow_color[0], @shadow_color[1], @shadow_color[2]) if @use_shadow
|
310
|
-
@font.drawSolidUTF8(dst.bitmap, str, x, y, @color[0], @color[1], @color[2])
|
311
|
-
return x + @font.textSize(str)[0]
|
312
|
-
end
|
313
|
-
|
314
|
-
def _draw_text_mild(dst, str, x, y) #:nodoc:
|
315
|
-
src = @font.renderBlendedUTF8(str, @color[0], @color[1], @color[2])
|
316
|
-
if src
|
312
|
+
str = str.encode(Encoding::UTF_8)
|
313
|
+
str.chars{|c|
|
317
314
|
if @use_shadow
|
318
|
-
src2 = @font.renderBlendedUTF8(
|
319
|
-
|
320
|
-
|
315
|
+
src2 = @font.renderBlendedUTF8(c, @shadow_color[0], @shadow_color[1], @shadow_color[2])
|
316
|
+
if src2
|
317
|
+
SpriteUnitFactory.apply(@unit, {:bitmap=>src2, :ow=>src2.w, :oh=>src2.h})
|
318
|
+
Miyako::Bitmap.blit_aa(@unit, dst.to_unit, x+@shadow_margin[0], y+@shadow_margin[1])
|
319
|
+
else
|
320
|
+
break x
|
321
|
+
end
|
321
322
|
end
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
323
|
+
src = @font.renderBlendedUTF8(c, @color[0], @color[1], @color[2])
|
324
|
+
if src
|
325
|
+
SpriteUnitFactory.apply(@unit, {:bitmap=>src, :ow=>src.w, :oh=>src.h})
|
326
|
+
Miyako::Bitmap.blit_aa(@unit, dst.to_unit, x, y)
|
327
|
+
else
|
328
|
+
break x
|
329
|
+
end
|
330
|
+
x += chr_size_inner(c)
|
331
|
+
}
|
332
|
+
return x
|
333
|
+
end
|
334
|
+
|
335
|
+
#===文字列描画したときの大きさを取得する
|
336
|
+
#現在のフォントの設定で指定の文字列を描画したとき、予想される描画サイズを返す。実際に描画は行われない。
|
337
|
+
#_txt_:: 算出したい文字列
|
338
|
+
#返却値:: 文字列を描画したときの大きさ([w,h]の配列)
|
339
|
+
def chr_size_inner(char)
|
340
|
+
return (char.bytesize == 1 ? @size >> 1 : @size) + (@use_shadow ? @shadow_margin[0] : 0) + @hspace
|
328
341
|
end
|
342
|
+
|
343
|
+
private :chr_size_inner
|
329
344
|
|
330
345
|
#===文字列描画したときの大きさを取得する
|
331
346
|
#現在のフォントの設定で指定の文字列を描画したとき、予想される描画サイズを返す。実際に描画は行われない。
|
332
347
|
#_txt_:: 算出したい文字列
|
333
348
|
#返却値:: 文字列を描画したときの大きさ([w,h]の配列)
|
334
349
|
def text_size(txt)
|
335
|
-
|
336
|
-
|
350
|
+
width = txt.chars.inject(0){|r, c|
|
351
|
+
r += (c.bytesize == 1 ? @size >> 1 : @size) } +
|
352
|
+
((@use_shadow ? @shadow_margin[0] : 0) + @hspace) * (txt.chars.to_a.length - 1)
|
353
|
+
return [width, self.line_height]
|
337
354
|
end
|
338
355
|
|
339
356
|
#===指定した高さで描画する際のマージンを求める
|
@@ -362,7 +379,8 @@ module Miyako
|
|
362
379
|
Font.create_font_path
|
363
380
|
|
364
381
|
#===Serifフォント(明朝フォント)を取得する
|
365
|
-
#マルチプラットフォームのソフトを作る際、OS
|
382
|
+
#マルチプラットフォームのソフトを作る際、OS間の差異を吸収するため、
|
383
|
+
#共通の名称でフォントインスタンスを取得するときに使う(主に明朝フォント)
|
366
384
|
#返却値:: OSごとに設定されたフォントイン寸タンス(フォントサイズは16)
|
367
385
|
def Font::serif
|
368
386
|
filename = @@font_base_name[Miyako::getOSName].detect{|base| Font.findFontPath(base[:serif]) }[:serif]
|
@@ -370,7 +388,8 @@ module Miyako
|
|
370
388
|
end
|
371
389
|
|
372
390
|
#===Sans Serifフォント(ゴシックフォント)を取得する
|
373
|
-
#マルチプラットフォームのソフトを作る際、OS
|
391
|
+
#マルチプラットフォームのソフトを作る際、OS間の差異を吸収するため、
|
392
|
+
#共通の名称でフォントインスタンスを取得するときに使う(主にゴシックフォント)
|
374
393
|
#返却値:: OSごとに設定されたフォントイン寸タンス(フォントサイズは16)
|
375
394
|
def Font::sans_serif
|
376
395
|
filename = @@font_base_name[Miyako::getOSName].detect{|base| Font.findFontPath(base[:sans_serif]) }[:sans_serif]
|
data/lib/Miyako/API/input.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
6
6
|
|
7
7
|
This library is free software; you can redistribute it and/or
|
8
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -26,14 +26,14 @@ module Miyako
|
|
26
26
|
#本モジュールでは、キーボードやマウス、ゲームパッドなどの入力装置からの情報を管理する。
|
27
27
|
#メソッドのほとんどは、「押されたかどうか」などの問い合わせメソッドで構成されている。
|
28
28
|
#本モジュールでは、以下のボタンが使用可能。キー(ボタン)すべてシンボルとして定義
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
#_:btn1_ ~ _:btn12_:: ゲームパッドの 1~12 に対応するボタン、もしくはキーボード上の z~n、a~hの各ボタンに対応
|
30
|
+
#_:down,_:left_,_:right_,_:up_:: ゲームパッドの方向ボタンとキーボードの方向キーに対応
|
31
|
+
#_:spc_:: スペースバーに対応
|
32
|
+
#_:ent_:: Enterキーに対応
|
33
|
+
#_:esc_:: エスケープキーに対応
|
34
|
+
#_:alt_:: Altキー(左右)に対応
|
35
|
+
#_:ctl_:: コントロールキー(左右)に対応
|
36
|
+
#_:sft_:: シフトキー(左右)に対応
|
37
37
|
#
|
38
38
|
#また、本モジュールのメソッドに "trigger", "pushed" の2つのメソッドがあるが、
|
39
39
|
#"trigger"系メソッドは、「押されていたら常にtrue」を示すのに対して、
|
@@ -160,8 +160,8 @@ module Miyako
|
|
160
160
|
|
161
161
|
def Input::process_mousebuttondown(e) #:nodoc:
|
162
162
|
set_mouse_button(:trigger, e.button)
|
163
|
-
set_mouse_button(:click, e.button)
|
164
163
|
return unless @@mouse[:inner]
|
164
|
+
click_mouse_button(:click, e.button)
|
165
165
|
set_mouse_button(:drag, e.button)
|
166
166
|
@@mouse[:drag][:x] = @@mouse[:pos][:x]
|
167
167
|
@@mouse[:drag][:y] = @@mouse[:pos][:y]
|
@@ -172,7 +172,6 @@ module Miyako
|
|
172
172
|
reset_mouse_button(:trigger, e.button)
|
173
173
|
click_interval = SDL.getTicks - @@click_start_tick
|
174
174
|
if click_interval < @@mouse[:click][:interval]
|
175
|
-
set_mouse_button(:click, e.button)
|
176
175
|
[:left, :middle, :right].each{|b| @@mouse[:drag][b] = false }
|
177
176
|
else
|
178
177
|
@@mouse[:drop][:left] = @@mouse[:drag][:left] and (e.button == SDL::Mouse::BUTTON_LEFT)
|
@@ -190,6 +189,12 @@ module Miyako
|
|
190
189
|
def Input::process_default(e) #:nodoc:
|
191
190
|
end
|
192
191
|
|
192
|
+
def Input::click_mouse_button(mode, btn) #:nodoc:
|
193
|
+
@@mouse[mode][:left] = (btn == SDL::Mouse::BUTTON_LEFT)
|
194
|
+
@@mouse[mode][:middle] = (btn == SDL::Mouse::BUTTON_MIDDLE)
|
195
|
+
@@mouse[mode][:right] = (btn == SDL::Mouse::BUTTON_RIGHT)
|
196
|
+
end
|
197
|
+
|
193
198
|
def Input::set_mouse_button(mode, btn) #:nodoc:
|
194
199
|
@@mouse[mode][:left] = (btn == SDL::Mouse::BUTTON_LEFT)
|
195
200
|
@@mouse[mode][:middle] = (btn == SDL::Mouse::BUTTON_MIDDLE)
|
@@ -336,21 +341,22 @@ module Miyako
|
|
336
341
|
#===マウスの現在位置を取得する
|
337
342
|
#求める値は、{:x=>n,:y=>n}で示すハッシュとする
|
338
343
|
#原点は、画面領域の左上を{:x=>0,:y=>0}とする
|
339
|
-
#返却値::
|
344
|
+
#返却値:: マウスカーソルの位置を示すPoint構造体
|
340
345
|
def Input::get_mouse_position
|
341
|
-
return
|
346
|
+
return Point.new(@@mouse[:pos][:x],@@mouse[:pos][:y])
|
342
347
|
end
|
343
348
|
|
344
349
|
#===マウスの移動量を取得する
|
345
350
|
#求める値は、{:x=>n,:y=>n}で示すハッシュとする
|
346
351
|
#移動量は、右下方向を正とする
|
347
|
-
#返却値::
|
352
|
+
#返却値:: マウスカーソルの移動量を示すSize構造体
|
348
353
|
def Input::get_mouse_amount
|
349
|
-
return
|
354
|
+
return Size.new(@@mouse[:pos][:dx],@@mouse[:pos][:dy])
|
350
355
|
end
|
351
356
|
|
352
357
|
#===ボタンがクリックされたかを問い合わせるメソッド
|
353
358
|
#ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り
|
359
|
+
#このメソッドを呼び出した後、そのボタンの返却値は、Input.updateが呼ばれない限りfalseになることに注意。
|
354
360
|
#
|
355
361
|
#:left : 左ボタン
|
356
362
|
#:middle : 中ボタン(ホイールをクリック)
|
@@ -360,16 +366,18 @@ module Miyako
|
|
360
366
|
#_btn_:: 問い合わせるボタンを示すシンボル(可変個)
|
361
367
|
#返却値:: ボタンが押されていれば true を返す
|
362
368
|
def Input::click?(btn)
|
363
|
-
|
369
|
+
btns = (btn == :any ? [:left, :middle, :right] : [btn])
|
370
|
+
ret = btns.inject(false){|r, f| r |= @@mouse[:click][f]}
|
371
|
+
return ret
|
364
372
|
end
|
365
373
|
|
366
374
|
#===ボタンが押されているかを問い合わせるメソッド
|
367
375
|
#ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り
|
368
376
|
#
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
377
|
+
#_:left_:: 左ボタン
|
378
|
+
#_:middle_:: 中ボタン(ホイールをクリック)
|
379
|
+
#_:right_:: 右ボタン
|
380
|
+
#_:any_:: 上記ボタンの少なくともどれか一つ
|
373
381
|
#
|
374
382
|
#_btn_:: 問い合わせるボタンを示すシンボル(可変個)
|
375
383
|
#返却値:: ボタンが押されていれば true を返す
|
@@ -381,10 +389,10 @@ module Miyako
|
|
381
389
|
#ドラッグアンドドロップした際に使ったボタンの問い合わせは、
|
382
390
|
#可変個数のシンボルで行う。指定できるボタンは以下の通り
|
383
391
|
#
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
392
|
+
#_:left_:: 左ボタン
|
393
|
+
#_:middle_:: 中ボタン(ホイールをクリック)
|
394
|
+
#_:right_:: 右ボタン
|
395
|
+
#_:any_:: 上記ボタンの少なくともどれか一つ
|
388
396
|
#
|
389
397
|
#_btn_:: 問い合わせるボタンを示すシンボル(可変個)
|
390
398
|
#返却値:: ドラッグアンドドロップが成功していれば、true を返す
|
@@ -414,9 +422,8 @@ module Miyako
|
|
414
422
|
@@mouse[:click][:interval] = v
|
415
423
|
end
|
416
424
|
|
417
|
-
|
418
|
-
|
419
|
-
#_v_:: ボタンのクリック間隔
|
425
|
+
#===マウスカーソルが画面の内側に有るかどうかを問い合わせる
|
426
|
+
#返却値:: マウスカーソルが画面内ならtrueを返す
|
420
427
|
def Input::mouse_cursor_inner?
|
421
428
|
return @@mouse[:inner]
|
422
429
|
end
|
data/lib/Miyako/API/layout.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
6
6
|
|
7
7
|
This library is free software; you can redistribute it and/or
|
8
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -49,16 +49,18 @@ end
|
|
49
49
|
module Miyako
|
50
50
|
|
51
51
|
#==レイアウト情報を示す構造体
|
52
|
-
LayoutStruct = Struct.new(:pos, :size, :base, :
|
52
|
+
LayoutStruct = Struct.new(:pos, :size, :base, :snap, :on_move)
|
53
53
|
#==スナップ構造体
|
54
54
|
LayoutSnapStruct = Struct.new(:sprite, :children)
|
55
|
-
#==レイアウト表示位置ラムダ構造体
|
56
|
-
LayoutSideStruct = Struct.new(:inside, :between, :outside)
|
57
55
|
|
58
56
|
#==レイアウト管理モジュール
|
59
57
|
#位置情報やスナップ、座標丸めなどを管理する
|
58
|
+
#本モジュールはmixinすることで機能する。
|
59
|
+
#また、mixinする場合は、以下の処理を施すこと
|
60
|
+
#1.クラスのinitializeメソッドの最初にinit_layoutメソッドを呼び出す
|
61
|
+
#2.update_layout_positionメソッドを実装する
|
60
62
|
#なお、本モジュールをmixinした場合は、インスタンス変数 @layout が予約される。
|
61
|
-
#@
|
63
|
+
#@layoutへのユーザアクセスは参照のみ許される。
|
62
64
|
module Layout
|
63
65
|
#===現在の位置情報を別のインスタンス変数に反映させるためのテンプレートメソッド
|
64
66
|
#move や centering などのメソッドを呼び出した際に@layout[:pos]の値を反映させるときに使う
|
@@ -70,99 +72,158 @@ module Miyako
|
|
70
72
|
#mixin したクラスの initialize メソッド内で必ず呼び出しておくこと
|
71
73
|
def init_layout
|
72
74
|
@layout = LayoutStruct.new
|
73
|
-
@layout.pos
|
74
|
-
@layout.size
|
75
|
-
@layout.base
|
76
|
-
@layout.
|
77
|
-
@layout.
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
@layout.upper = LayoutSideStruct.new
|
90
|
-
@layout.upper.inside = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos] - @layout.margin[pos][base_size].to_i}
|
91
|
-
@layout.upper.between = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos]/2 - @layout.margin[pos][base_size].to_i}
|
92
|
-
@layout.upper.outside = lambda{|pos, base_size| @layout.base[pos] + base_size + @layout.margin[pos][base_size].to_i}
|
93
|
-
|
94
|
-
@layout.loc = [@layout.lower.inside, @layout.lower.inside]
|
75
|
+
@layout.pos = Point.new(0, 0)
|
76
|
+
@layout.size = Size.new(0, 0)
|
77
|
+
@layout.base = Screen
|
78
|
+
@layout.snap = LayoutSnapStruct.new(nil, Array.new)
|
79
|
+
@layout.on_move = []
|
80
|
+
end
|
81
|
+
|
82
|
+
#===位置移動時に呼び出すブロックを管理する配列にアクセする
|
83
|
+
#moveやleftメソッドを呼び出した時に評価したいブロックを渡すことで、付随処理を自律して行うことが出来る。
|
84
|
+
#引数は、|self, x, y, dx, dy|の5つ。
|
85
|
+
#各引数は、「レシーバ, 移動後x座標位置, 移動後y座標位置, x座標移動量, y座標移動量」の機能がある。
|
86
|
+
#評価が行われるのは、left,outside_left,center,right,outside_right,top,outside_top,middle,bottom,outside_bottom
|
87
|
+
#move,move_toの各メソッド。
|
88
|
+
#返却値:: ブロック管理配列
|
89
|
+
def on_move
|
90
|
+
return @layout.on_move
|
95
91
|
end
|
96
92
|
|
97
93
|
#===mixinしたインスタンスの位置を左端(x軸)に移動させる
|
98
|
-
|
94
|
+
#設置するとき、基準となる空間の内側に設置される
|
95
|
+
#ブロックでは、数値を返却することで、左端からのマージンを設定できる(正の方向へ移動)
|
99
96
|
#ブロック引数は、自分自身の幅
|
100
|
-
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
101
97
|
#返却値:: 自分自身
|
102
|
-
def left(
|
103
|
-
|
104
|
-
|
98
|
+
def left(&margin)
|
99
|
+
base = @layout.base.rect
|
100
|
+
t = @layout.pos[0]
|
101
|
+
@layout.pos[0] = base[0] + (margin ? margin[base[2]].to_i : 0)
|
102
|
+
@layout.snap.children.each{|c| c.left(&margin) }
|
103
|
+
update_layout(@layout.pos[0]-t, 0)
|
104
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)}
|
105
|
+
return self
|
106
|
+
end
|
107
|
+
|
108
|
+
#===mixinしたインスタンスの位置を左端(x軸)に移動させる
|
109
|
+
#設置するとき、基準となる空間の外側に設置される
|
110
|
+
#ブロックでは、数値を返却することで、左端からのマージンを設定できる(負の方向へ移動)
|
111
|
+
#ブロック引数は、自分自身の幅
|
112
|
+
#返却値:: 自分自身
|
113
|
+
def outside_left(&margin)
|
114
|
+
base = @layout.base.rect
|
115
|
+
t = @layout.pos[0]
|
116
|
+
@layout.pos[0] = base[0] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
|
117
|
+
update_layout(@layout.pos[0]-t, 0)
|
118
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)}
|
119
|
+
return self
|
105
120
|
end
|
106
121
|
|
107
122
|
#===mixinしたインスタンスの位置を中間(x軸)に移動させる
|
108
|
-
|
123
|
+
#返却値:: 自分自身
|
124
|
+
def center
|
125
|
+
base = @layout.base.rect
|
126
|
+
t = @layout.pos[0]
|
127
|
+
@layout.pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
|
128
|
+
update_layout(@layout.pos[0]-t, 0)
|
129
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)}
|
130
|
+
return self
|
131
|
+
end
|
132
|
+
|
133
|
+
#===mixinしたインスタンスの位置を右端(x軸)に移動させる
|
134
|
+
#設置するとき、基準となる空間の内側に設置される
|
135
|
+
#ブロックでは、数値を返却することで、右端からのマージンを設定できる(負の方向へ移動)
|
109
136
|
#ブロック引数は、自分自身の幅
|
110
|
-
#_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
|
111
137
|
#返却値:: 自分自身
|
112
|
-
def
|
113
|
-
|
114
|
-
|
138
|
+
def right(&margin)
|
139
|
+
base = @layout.base.rect
|
140
|
+
t = @layout.pos[0]
|
141
|
+
@layout.pos[0] = base[0] + base[2] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
|
142
|
+
update_layout(@layout.pos[0]-t, 0)
|
143
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)}
|
144
|
+
return self
|
115
145
|
end
|
116
146
|
|
117
147
|
#===mixinしたインスタンスの位置を右端(x軸)に移動させる
|
118
|
-
|
148
|
+
#設置するとき、基準となる空間の外側に設置される
|
149
|
+
#ブロックでは、数値を返却することで、右端からのマージンを設定できる(正の方向へ移動)
|
119
150
|
#ブロック引数は、自分自身の幅
|
120
|
-
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
121
151
|
#返却値:: 自分自身
|
122
|
-
def
|
123
|
-
|
124
|
-
|
152
|
+
def outside_right(&margin)
|
153
|
+
base = @layout.base.rect
|
154
|
+
t = @layout.pos[0]
|
155
|
+
@layout.pos[0] = base[0] + base[2] + (margin ? margin[base[2]].to_i : 0)
|
156
|
+
update_layout(@layout.pos[0]-t, 0)
|
157
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)}
|
158
|
+
return self
|
125
159
|
end
|
126
160
|
|
127
161
|
#===mixinしたインスタンスの位置を上端(y軸)に移動させる
|
128
|
-
|
162
|
+
#設置するとき、基準となる空間の内側に設置される
|
163
|
+
#ブロックでは、数値を返却することで、上端からのマージンを設定できる(正の方向へ移動)
|
129
164
|
#ブロック引数は、自分自身の幅
|
130
|
-
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
131
165
|
#返却値:: 自分自身
|
132
|
-
def top(
|
133
|
-
|
134
|
-
|
166
|
+
def top(&margin)
|
167
|
+
base = @layout.base.rect
|
168
|
+
t = @layout.pos[1]
|
169
|
+
@layout.pos[1] = base[1] + (margin ? margin[base[3]].to_i : 0)
|
170
|
+
update_layout(0, @layout.pos[1]-t)
|
171
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)}
|
172
|
+
return self
|
135
173
|
end
|
136
174
|
|
137
|
-
#===mixin
|
138
|
-
|
175
|
+
#===mixinしたインスタンスの位置を上端(y軸)に移動させる
|
176
|
+
#設置するとき、基準となる空間の内側に設置される
|
177
|
+
#ブロックでは、数値を返却することで、上端からのマージンを設定できる(負の方向へ移動)
|
139
178
|
#ブロック引数は、自分自身の幅
|
140
|
-
#_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
|
141
179
|
#返却値:: 自分自身
|
142
|
-
def
|
143
|
-
|
144
|
-
|
180
|
+
def outside_top(&margin)
|
181
|
+
base = @layout.base.rect
|
182
|
+
t = @layout.pos[1]
|
183
|
+
@layout.pos[1] = base[1] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
|
184
|
+
update_layout(0, @layout.pos[1]-t)
|
185
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)}
|
186
|
+
return self
|
187
|
+
end
|
188
|
+
|
189
|
+
#===mixinしたインスタンスの位置を中間(y軸)に移動させる
|
190
|
+
#返却値:: 自分自身
|
191
|
+
def middle
|
192
|
+
base = @layout.base.rect
|
193
|
+
t = @layout.pos[1]
|
194
|
+
@layout.pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
|
195
|
+
update_layout(0, @layout.pos[1]-t)
|
196
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)}
|
197
|
+
return self
|
145
198
|
end
|
146
199
|
|
147
200
|
#===mixinしたインスタンスの位置を下端(y軸)に移動させる
|
148
|
-
|
201
|
+
#設置するとき、基準となる空間の内側に設置される
|
202
|
+
#ブロックでは、数値を返却することで、下端からのマージンを設定できる(負の方向へ移動)
|
149
203
|
#ブロック引数は、自分自身の幅
|
150
|
-
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
151
204
|
#返却値:: 自分自身
|
152
|
-
def bottom(
|
153
|
-
|
154
|
-
|
205
|
+
def bottom(&margin)
|
206
|
+
base = @layout.base.rect
|
207
|
+
t = @layout.pos[1]
|
208
|
+
@layout.pos[1] = base[1] + base[3] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
|
209
|
+
update_layout(0, @layout.pos[1]-t)
|
210
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)}
|
211
|
+
return self
|
155
212
|
end
|
156
213
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
214
|
+
#===mixinしたインスタンスの位置を下端(y軸)に移動させる
|
215
|
+
#設置するとき、基準となる空間の外側に設置される
|
216
|
+
#ブロックでは、数値を返却することで、下端からのマージンを設定できる(正の方向へ移動)
|
217
|
+
#ブロック引数は、自分自身の幅
|
218
|
+
#返却値:: 自分自身
|
219
|
+
def outside_bottom(&margin)
|
220
|
+
base = @layout.base.rect
|
221
|
+
t = @layout.pos[1]
|
222
|
+
@layout.pos[1] = base[1] + base[3] + (margin ? margin[base[3]].to_i : 0)
|
223
|
+
update_layout(0, @layout.pos[1]-t)
|
224
|
+
@layout.on_move.each{|block| block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)}
|
225
|
+
return self
|
163
226
|
end
|
164
|
-
|
165
|
-
private :set_layout_inner
|
166
227
|
|
167
228
|
#===レイアウトに関するインスタンスを解放する
|
168
229
|
#インスタンス変数 @layout 内のインスタンスを解放する
|
@@ -220,102 +281,29 @@ module Miyako
|
|
220
281
|
end
|
221
282
|
|
222
283
|
#===インスタンスのサイズをレイアウト情報に反映させる
|
284
|
+
#このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
|
223
285
|
#_w_:: インスタンスの幅(たとえば、Sprite#ow の値)
|
224
286
|
#_h_:: インスタンスの幅(たとえば、Sprite#oh の値)
|
225
287
|
#返却値:: 自分自身を返す
|
226
288
|
def set_layout_size(w, h)
|
227
289
|
@layout.size[0] = w
|
228
290
|
@layout.size[1] = h
|
229
|
-
calc_layout
|
230
291
|
return self
|
231
292
|
end
|
232
293
|
|
233
|
-
def get_base_width #:nodoc:
|
234
|
-
return @layout.base[2] || Screen.w
|
235
|
-
end
|
236
|
-
|
237
|
-
def get_base_height #:nodoc:
|
238
|
-
return @layout.base[3] || Screen.h
|
239
|
-
end
|
240
|
-
|
241
|
-
private :get_base_width, :get_base_height
|
242
|
-
|
243
294
|
#===レイアウト情報の値を更新する
|
244
|
-
|
245
|
-
|
246
|
-
|
295
|
+
#_dx_:: 位置の変化量(x方向)
|
296
|
+
#_dx_:: 位置の変化量(y方向)
|
297
|
+
def update_layout(dx, dy)
|
247
298
|
update_layout_position
|
248
|
-
@layout.snap.children.each{|sc|
|
249
|
-
sc.snap
|
250
|
-
}
|
251
|
-
end
|
252
|
-
|
253
|
-
#===あとで書く
|
254
|
-
#_w_:: あとで書く
|
255
|
-
#_h_:: あとで書く
|
256
|
-
#返却値:: あとで書く
|
257
|
-
def set_base_size(w, h)
|
258
|
-
@layout.base[2] = w
|
259
|
-
@layout.base[3] = h
|
260
|
-
calc_layout
|
261
|
-
return self
|
262
|
-
end
|
263
|
-
|
264
|
-
#===あとで書く
|
265
|
-
#返却値:: あとで書く
|
266
|
-
def reset_base_size
|
267
|
-
@layout.base[2] = nil
|
268
|
-
@layout.base[3] = nil
|
269
|
-
calc_layout
|
270
|
-
return self
|
271
|
-
end
|
272
|
-
|
273
|
-
#===あとで書く
|
274
|
-
#_x_:: あとで書く
|
275
|
-
#_y_:: あとで書く
|
276
|
-
#返却値:: あとで書く
|
277
|
-
def set_base_point(x, y)
|
278
|
-
@layout.base[0], @layout.base[1] = [x, y]
|
279
|
-
calc_layout
|
280
|
-
return self
|
299
|
+
@layout.snap.children.each{|sc| sc.update_layout(dx, dy) }
|
281
300
|
end
|
282
301
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
#_w_:: あとで書く
|
287
|
-
#_h_:: あとで書く
|
288
|
-
#返却値:: あとで書く
|
289
|
-
def set_base(x, y, w, h)
|
290
|
-
@layout.base[0] = x
|
291
|
-
@layout.base[1] = y
|
292
|
-
@layout.base[2] = w
|
293
|
-
@layout.base[3] = h
|
294
|
-
calc_layout
|
295
|
-
return self
|
296
|
-
end
|
297
|
-
|
298
|
-
#===あとで書く
|
299
|
-
#返却値:: あとで書く
|
300
|
-
def reset_base
|
301
|
-
@layout.base[0] = 0
|
302
|
-
@layout.base[1] = 0
|
303
|
-
@layout.base[2] = nil
|
304
|
-
@layout.base[3] = nil
|
305
|
-
calc_layout
|
306
|
-
return self
|
307
|
-
end
|
308
|
-
|
309
|
-
#===あとで書く
|
310
|
-
#返却値:: あとで書く
|
311
|
-
def get_base
|
312
|
-
return @layout.base
|
313
|
-
end
|
314
|
-
|
315
|
-
#===あとで書く
|
316
|
-
#返却値:: あとで書く
|
302
|
+
#===インスタンスの位置・大きさを求める
|
303
|
+
#インスタンスの位置・大きさをRect構造体で求める
|
304
|
+
#返却値:: Rect構造体
|
317
305
|
def rect
|
318
|
-
return Rect.new(
|
306
|
+
return Rect.new(@layout.pos[0], @layout.pos[1], @layout.size[0], @layout.size[1])
|
319
307
|
end
|
320
308
|
|
321
309
|
#===インスタンスのレイアウトを指定の別のインスタンスに依存(スナップ)させる
|
@@ -329,35 +317,27 @@ module Miyako
|
|
329
317
|
@layout.snap.sprite = spr
|
330
318
|
spr.add_snap_child(self)
|
331
319
|
end
|
332
|
-
|
333
|
-
rect = @layout.snap.sprite.rect
|
334
|
-
@layout.base[0] = rect[0]
|
335
|
-
@layout.base[1] = rect[1]
|
336
|
-
@layout.base[2] = rect[2]
|
337
|
-
@layout.base[3] = rect[3]
|
338
|
-
end
|
339
|
-
calc_layout
|
320
|
+
@layout.base = @layout.snap.sprite || Screen
|
340
321
|
return self
|
341
322
|
end
|
342
323
|
|
343
324
|
#===すべてのインスタンスとの依存関係を解消する
|
325
|
+
#このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
|
344
326
|
#返却値:: 自分自身を返す
|
345
327
|
def reset_snap
|
346
328
|
@layout.snap.sprite =nil
|
329
|
+
@layout.base = Screen
|
347
330
|
@layout.snap.children = Array.new
|
348
|
-
calc_layout
|
349
331
|
return self
|
350
332
|
end
|
351
333
|
|
352
334
|
def add_snap_child(spr) #:nodoc:
|
353
|
-
@layout.snap.children
|
354
|
-
calc_layout
|
335
|
+
@layout.snap.children << spr unless @layout.snap.children.include?(spr)
|
355
336
|
return self
|
356
337
|
end
|
357
338
|
|
358
339
|
def delete_snap_child(spr) #:nodoc:
|
359
340
|
spr.each{|s| @layout.snap.children.delete(s) }
|
360
|
-
calc_layout
|
361
341
|
return self
|
362
342
|
end
|
363
343
|
|
@@ -368,10 +348,7 @@ module Miyako
|
|
368
348
|
def set_snap_children(cs) #:nodoc:
|
369
349
|
@layout.snap.children.each{|c| c.set_snap_sprite(nil) }
|
370
350
|
@layout.snap.children = cs
|
371
|
-
@layout.snap.children.each{|c|
|
372
|
-
c.set_snap_sprite(self)
|
373
|
-
}
|
374
|
-
calc_layout
|
351
|
+
@layout.snap.children.each{|c| c.set_snap_sprite(self) }
|
375
352
|
return self
|
376
353
|
end
|
377
354
|
|
@@ -383,7 +360,6 @@ module Miyako
|
|
383
360
|
@layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
|
384
361
|
@layout.snap.sprite = ss
|
385
362
|
@layout.snap.sprite.add_snap_child(self) if @layout.snap.sprite
|
386
|
-
calc_layout
|
387
363
|
return self
|
388
364
|
end
|
389
365
|
|
@@ -396,23 +372,29 @@ module Miyako
|
|
396
372
|
end
|
397
373
|
|
398
374
|
#===インスタンスを指定の移動量で移動させる
|
375
|
+
#ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
399
376
|
#_x_:: x 座標の移動量
|
400
377
|
#_y_:: y 座標の移動量
|
401
378
|
#返却値:: 自分自身を返す
|
402
379
|
def move(x, y)
|
403
|
-
@layout.off[0] = @layout.off[0] + x
|
404
|
-
@layout.off[1] = @layout.off[1] + y
|
405
|
-
calc_layout
|
406
|
-
return self
|
407
380
|
end
|
408
381
|
|
409
382
|
#===インスタンスを指定の位置に移動させる
|
383
|
+
#ブロックを渡したとき、ブロックの評価した結果、偽になったときは移動させた値を元に戻す
|
410
384
|
#_x_:: 移動後の x 座標の位置
|
411
385
|
#_y_:: 移動後の y 座標の位置
|
412
386
|
#返却値:: 自分自身を返す
|
413
|
-
def move_to(x, y)
|
414
|
-
|
415
|
-
|
387
|
+
def move_to(x, y, &block)
|
388
|
+
end
|
389
|
+
|
390
|
+
#===Segment構造体を生成する
|
391
|
+
# 生成される線分は、x方向が[pos.x,pos.x+ow-1]、y方向が[pos.y,pos.y+oh-1]となる
|
392
|
+
#返却値:: 生成したSegment構造体インスタンス
|
393
|
+
def segment
|
394
|
+
return Segment.new([@layout.pos[0],
|
395
|
+
@layout.pos[0]+@layout.size[0]-1],
|
396
|
+
[@layout.pos[1],
|
397
|
+
@layout.pos[1]+@layout.size[1]-1])
|
416
398
|
end
|
417
399
|
end
|
418
400
|
|