26
26
#include " binding-util.h"
27
27
#include " graphics.h"
28
28
29
- /* 'Children' are disposables that are disposed together
30
- * with their parent. Currently this is only used by Viewport
31
- * in RGSS1. */
32
- inline void
33
- disposableAddChild (VALUE disp, VALUE child)
34
- {
35
- GFX_LOCK;
36
- if (NIL_P (disp) || NIL_P (child)) {
37
- return ;
38
- }
39
-
40
- VALUE objID = rb_obj_id (child);
41
-
42
- VALUE children = rb_iv_get (disp, " children" );
43
-
44
- bool exists = false ;
45
-
46
- if (NIL_P (children))
47
- {
48
- children = rb_ary_new ();
49
- rb_iv_set (disp, " children" , children);
50
- }
51
- else {
52
- exists = RTEST (rb_funcall (children, rb_intern (" include?" ), 1 , objID));
53
- }
54
-
55
- if (!exists) {
56
- rb_ary_push (children, objID);
57
- VALUE objectspace = rb_const_get (rb_cObject, rb_intern (" ObjectSpace" ));
58
- VALUE method = rb_funcall (disp, rb_intern (" method" ), 1 , rb_id2sym (rb_intern (" _sprite_finalizer" )));
59
- rb_funcall (objectspace, rb_intern (" define_finalizer" ), 2 , child, method);
60
- }
61
- GFX_UNLOCK;
62
- }
63
-
64
- inline void
65
- disposableRemoveChild (VALUE disp, VALUE child)
66
- {
67
- GFX_LOCK;
68
- if (NIL_P (disp) || NIL_P (child)) {
69
- return ;
70
- }
71
-
72
- VALUE objID = rb_obj_id (child);
73
-
74
- VALUE children = rb_iv_get (disp, " children" );
75
- if (NIL_P (children))
76
- return ;
77
-
78
- VALUE index = rb_funcall (children, rb_intern (" index" ), 1 , objID);
79
- if (NIL_P (index ))
80
- return ;
81
-
82
- rb_funcall (children, rb_intern (" delete_at" ), 1 , index );
83
- GFX_UNLOCK;
84
- }
85
-
86
- inline void
87
- disposableForgetChild (VALUE disp, VALUE child)
88
- {
89
- VALUE children = rb_iv_get (disp, " children" );
90
-
91
- if (NIL_P (children)) {
92
- return ;
93
- }
94
-
95
- VALUE index = rb_funcall (children, rb_intern (" index" ), 1 , child);
96
- if (NIL_P (index )) {
97
- return ;
98
- }
99
-
100
- rb_funcall (children, rb_intern (" delete_at" ), 1 , index );
101
- }
102
-
103
- inline void
104
- disposableDisposeChildren (VALUE disp)
105
- {
106
- VALUE children = rb_iv_get (disp, " children" );
107
-
108
- if (NIL_P (children))
109
- return ;
110
-
111
- for (long i = 0 ; i < RARRAY_LEN (children); ++i) {
112
- int state;
113
- rb_protect ([](VALUE args){
114
- VALUE objectspace = rb_const_get (rb_cObject, rb_intern (" ObjectSpace" ));
115
- VALUE ref = rb_funcall (objectspace, rb_intern (" _id2ref" ), 1 , args);
116
- rb_funcall (ref, rb_intern (" _mkxp_dispose_alias" ), 0 );
117
- return Qnil;
118
- }, rb_ary_entry (children, i), &state);
119
- }
120
- // rb_funcall2(rb_ary_entry(children, i), dispFun, 0, 0);
121
- }
122
-
123
29
template <class C >
124
30
RB_METHOD (disposableDispose)
125
31
{
@@ -134,9 +40,6 @@ RB_METHOD(disposableDispose)
134
40
if (d->isDisposed ())
135
41
return Qnil;
136
42
137
- if (rgssVer == 1 )
138
- disposableDisposeChildren (self);
139
-
140
43
GFX_LOCK;
141
44
d->dispose ();
142
45
GFX_UNLOCK;
@@ -162,11 +65,6 @@ static void disposableBindingInit(VALUE klass)
162
65
{
163
66
_rb_define_method (klass, " dispose" , disposableDispose<C>);
164
67
_rb_define_method (klass, " disposed?" , disposableIsDisposed<C>);
165
-
166
- /* Make sure we always have access to the original method, even
167
- * if it is overridden by user scripts */
168
- if (rgssVer == 1 )
169
- rb_define_alias (klass, " _mkxp_dispose_alias" , " dispose" );
170
68
}
171
69
172
70
template <class C >
0 commit comments