ruby-miyako 2.1.4 → 2.1.5
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 +42 -5
- data/lib/Miyako/API/choices.rb +0 -2
- data/lib/Miyako/API/collision.rb +0 -4
- data/lib/Miyako/API/fixedmap.rb +0 -3
- data/lib/Miyako/API/i_yuki.rb +28 -46
- data/lib/Miyako/API/layout.rb +0 -1
- data/lib/Miyako/API/map.rb +0 -2
- data/lib/Miyako/API/map_event.rb +0 -3
- data/lib/Miyako/API/map_struct.rb +0 -2
- data/lib/Miyako/API/parts.rb +0 -11
- data/lib/Miyako/API/screen.rb +3 -4
- data/lib/Miyako/API/shape.rb +27 -27
- data/lib/Miyako/API/sprite.rb +0 -2
- data/lib/Miyako/API/story.rb +0 -2
- data/lib/Miyako/API/textbox.rb +9 -11
- data/lib/Miyako/API/utility.rb +2 -2
- data/lib/Miyako/API/yuki.rb +19 -8
- data/lib/Miyako/miyako.rb +3 -0
- data/miyako_basicdata.c +52 -5
- data/miyako_bitmap.c +351 -342
- data/miyako_collision.c +77 -67
- data/miyako_diagram.c +22 -21
- data/miyako_drawing.c +9 -6
- data/miyako_font.c +63 -53
- data/miyako_hsv.c +428 -436
- data/miyako_input_audio.c +17 -14
- data/miyako_layout.c +23 -18
- data/miyako_no_katana.c +284 -248
- data/miyako_sprite2.c +30 -18
- data/miyako_transform.c +95 -93
- data/miyako_utility.c +9 -18
- data/miyako_yuki.c +10 -6
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +2 -2
- data/sample/Room3/room3.rb +8 -10
- data/sample/ball_action_sample.rb +8 -8
- data/sample/map_test/main_scene.rb +1 -1
- data/sample/map_test/map_test.rb +8 -8
- data/sample/takahashi.rb +14 -14
- data/win/miyako_no_katana.so +0 -0
- metadata +6 -4
data/miyako_font.c
CHANGED
@@ -20,8 +20,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
20
20
|
*/
|
21
21
|
|
22
22
|
/*
|
23
|
-
|
24
|
-
Authors::
|
23
|
+
=miyako_no_katana
|
24
|
+
Authors:: Cyross Makoto
|
25
25
|
Version:: 2.0
|
26
26
|
Copyright:: 2007-2008 Cyross Makoto
|
27
27
|
License:: LGPL2.1
|
@@ -59,55 +59,65 @@ static GLOBAL_DEFINE_GET_STRUCT(TTFont, Get_TTFont, cTTFFont, "SDL::TT::Font");
|
|
59
59
|
|
60
60
|
static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE vy)
|
61
61
|
{
|
62
|
+
int font_size, shadow_margin_x, shadow_margin_y, hspace, x, y, a1, a2, margin_x, margin_y;
|
63
|
+
TTF_Font *font;
|
64
|
+
VALUE *p_font_color, *p_shadow_color;
|
65
|
+
VALUE use_shadow, shadow_margin, chr;
|
66
|
+
SDL_Color fore_color, shadow_color;
|
67
|
+
SDL_Surface *scr, *ssrc, *ssrc2;
|
68
|
+
SDL_Rect drect;
|
69
|
+
MiyakoBitmap src, dst;
|
70
|
+
char *sptr;
|
71
|
+
Uint32 sr, sg, sb, sa;
|
72
|
+
Uint32 dr, dg, db, da;
|
73
|
+
Uint32 *psrc2, *psrc, *ppsrc2, *ppdst;
|
74
|
+
int i, n, clen;
|
75
|
+
const char *ptr;
|
76
|
+
int len;
|
77
|
+
rb_encoding *enc;
|
78
|
+
|
62
79
|
rb_secure(4);
|
63
80
|
StringValue(str);
|
64
81
|
|
65
82
|
str = rb_funcall(str, id_encode, 1, rb_const_get(cEncoding, id_utf8));
|
66
83
|
|
67
|
-
|
84
|
+
font = Get_TTFont(rb_iv_get(self, "@font"))->font;
|
85
|
+
|
86
|
+
p_font_color = RARRAY_PTR(rb_iv_get(self, "@color"));
|
68
87
|
|
69
|
-
VALUE *p_font_color = RARRAY_PTR(rb_iv_get(self, "@color"));
|
70
|
-
SDL_Color fore_color;
|
71
88
|
fore_color.r = NUM2INT(*(p_font_color+0));
|
72
89
|
fore_color.g = NUM2INT(*(p_font_color+1));
|
73
90
|
fore_color.b = NUM2INT(*(p_font_color+2));
|
74
91
|
fore_color.unused = 0;
|
75
92
|
|
76
|
-
|
77
|
-
SDL_Color shadow_color;
|
93
|
+
p_shadow_color = RARRAY_PTR(rb_iv_get(self, "@shadow_color"));
|
78
94
|
shadow_color.r = NUM2INT(*(p_shadow_color+0));
|
79
95
|
shadow_color.g = NUM2INT(*(p_shadow_color+1));
|
80
96
|
shadow_color.b = NUM2INT(*(p_shadow_color+2));
|
81
97
|
shadow_color.unused = 0;
|
82
98
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
99
|
+
font_size = NUM2INT(rb_iv_get(self, "@size"));
|
100
|
+
use_shadow = rb_iv_get(self, "@use_shadow");
|
101
|
+
shadow_margin = rb_iv_get(self, "@shadow_margin");
|
102
|
+
shadow_margin_x = (use_shadow == Qtrue ? NUM2INT(*(RARRAY_PTR(shadow_margin)+0)) : 0);
|
103
|
+
shadow_margin_y = (use_shadow == Qtrue ? NUM2INT(*(RARRAY_PTR(shadow_margin)+1)) : 0);
|
104
|
+
hspace = NUM2INT(rb_iv_get(self, "@hspace"));
|
89
105
|
|
90
|
-
|
91
|
-
SDL_Rect drect;
|
106
|
+
scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
|
92
107
|
|
93
|
-
MiyakoBitmap src, dst;
|
94
108
|
_miyako_setup_unit(vdst, scr, &dst, vx, vy, 0);
|
95
109
|
|
96
|
-
|
110
|
+
sptr = RSTRING_PTR(str);
|
97
111
|
|
98
112
|
src.x = dst.x;
|
99
113
|
src.y = dst.y;
|
100
114
|
|
101
|
-
int x, y;
|
102
|
-
Uint32 sr, sg, sb, sa;
|
103
|
-
Uint32 dr, dg, db, da;
|
104
|
-
|
105
115
|
if(use_shadow == Qtrue)
|
106
116
|
{
|
107
|
-
|
117
|
+
ssrc2 = TTF_RenderUTF8_Blended(font, sptr, shadow_color);
|
108
118
|
|
109
119
|
if(ssrc2 == NULL) return INT2NUM(src.x);
|
110
|
-
|
120
|
+
psrc2 = (Uint32 *)(ssrc2->pixels);
|
111
121
|
|
112
122
|
src.x += shadow_margin_x;
|
113
123
|
src.y += shadow_margin_y;
|
@@ -129,7 +139,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
129
139
|
}
|
130
140
|
if(size2.w > ssrc2->w){ size2.w = ssrc2->w; }
|
131
141
|
|
132
|
-
|
142
|
+
margin_x = 0;
|
133
143
|
if(src.x < 0)
|
134
144
|
{
|
135
145
|
int tmp_w = ssrc2->w + src.x;
|
@@ -151,7 +161,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
151
161
|
}
|
152
162
|
if(size2.h > ssrc2->h){ size2.h = ssrc2->h; }
|
153
163
|
|
154
|
-
|
164
|
+
margin_y = 0;
|
155
165
|
if(src.y < 0)
|
156
166
|
{
|
157
167
|
int tmp_h = ssrc2->h + src.y;
|
@@ -170,8 +180,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
170
180
|
|
171
181
|
for(y = 0; y < size2.h; y++)
|
172
182
|
{
|
173
|
-
|
174
|
-
|
183
|
+
ppsrc2 = psrc2 + (y+margin_y) * ssrc2->w + margin_x;
|
184
|
+
ppdst = dst.ptr + (src.y + y) * dst.surface->w + src.x;
|
175
185
|
for(x = 0; x < size2.w; x++)
|
176
186
|
{
|
177
187
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
@@ -191,8 +201,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
191
201
|
sr = (Uint32)((*ppsrc2 >> 16)) & 0xff;
|
192
202
|
sg = (Uint32)((*ppsrc2 >> 8)) & 0xff;
|
193
203
|
sb = (Uint32)((*ppsrc2)) & 0xff;
|
194
|
-
|
195
|
-
|
204
|
+
a1 = sa + 1;
|
205
|
+
a2 = 256 - sa;
|
196
206
|
*ppdst = (((sr * a1 + dr * a2) >> 8)) << 16 |
|
197
207
|
(((sg * a1 + dg * a2) >> 8)) << 8 |
|
198
208
|
(((sb * a1 + db * a2) >> 8)) |
|
@@ -204,8 +214,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
204
214
|
sr = *ppsrc2 & 0xff0000;
|
205
215
|
sg = *ppsrc2 & 0xff00;
|
206
216
|
sb = *ppsrc2 & 0xff;
|
207
|
-
|
208
|
-
|
217
|
+
a1 = sa + 1;
|
218
|
+
a2 = 256 - sa;
|
209
219
|
*ppdst = ((sr * a1 + dr * a2) & 0xff000000 |
|
210
220
|
(sg * a1 + dg * a2) & 0xff0000 |
|
211
221
|
(sb * a1 + db * a2)) >> 8 |
|
@@ -227,8 +237,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
227
237
|
sr = (Uint32)(((*ppsrc2 & ssrc2->format->Rmask) >> ssrc2->format->Rshift));
|
228
238
|
sg = (Uint32)(((*ppsrc2 & ssrc2->format->Gmask) >> ssrc2->format->Gshift));
|
229
239
|
sb = (Uint32)(((*ppsrc2 & ssrc2->format->Bmask) >> ssrc2->format->Bshift));
|
230
|
-
|
231
|
-
|
240
|
+
a1 = sa + 1;
|
241
|
+
a2 = 256 - sa;
|
232
242
|
*ppdst = (((sr * a1 + dr * a2) >> 8)) << dst.fmt->Rshift |
|
233
243
|
(((sg * a1 + dg * a2) >> 8)) << dst.fmt->Gshift |
|
234
244
|
(((sb * a1 + db * a2) >> 8)) << dst.fmt->Bshift |
|
@@ -249,7 +259,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
249
259
|
src.y = dst.y;
|
250
260
|
}
|
251
261
|
|
252
|
-
|
262
|
+
ssrc = TTF_RenderUTF8_Blended(font, sptr, fore_color);
|
253
263
|
|
254
264
|
if(ssrc == NULL) return INT2NUM(src.x);
|
255
265
|
|
@@ -261,7 +271,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
261
271
|
}
|
262
272
|
else
|
263
273
|
{
|
264
|
-
|
274
|
+
psrc = (Uint32 *)(ssrc->pixels);
|
265
275
|
|
266
276
|
MiyakoSize size;
|
267
277
|
|
@@ -273,7 +283,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
273
283
|
}
|
274
284
|
if(size.w > ssrc->w){ size.w = ssrc->w; }
|
275
285
|
|
276
|
-
|
286
|
+
margin_x = 0;
|
277
287
|
if(src.x < 0)
|
278
288
|
{
|
279
289
|
int tmp_w = ssrc->w + src.x;
|
@@ -295,7 +305,7 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
295
305
|
}
|
296
306
|
if(size.h > ssrc->h){ size.h = ssrc->h; }
|
297
307
|
|
298
|
-
|
308
|
+
margin_y = 0;
|
299
309
|
if(src.y < 0)
|
300
310
|
{
|
301
311
|
int tmp_h = ssrc->h + src.y;
|
@@ -335,8 +345,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
335
345
|
sr = (Uint32)(((*ppsrc) >> 16)) & 0xff;
|
336
346
|
sg = (Uint32)(((*ppsrc) >> 8)) & 0xff;
|
337
347
|
sb = (Uint32)(((*ppsrc))) & 0xff;
|
338
|
-
|
339
|
-
|
348
|
+
a1 = sa + 1;
|
349
|
+
a2 = 256 - sa;
|
340
350
|
*ppdst = (((sr * a1 + dr * a2) >> 8)) << 16 |
|
341
351
|
(((sg * a1 + dg * a2) >> 8)) << 8 |
|
342
352
|
(((sb * a1 + db * a2) >> 8)) |
|
@@ -348,8 +358,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
348
358
|
sr = *ppsrc & 0xff0000;
|
349
359
|
sg = *ppsrc & 0xff00;
|
350
360
|
sb = *ppsrc & 0xff;
|
351
|
-
|
352
|
-
|
361
|
+
a1 = sa + 1;
|
362
|
+
a2 = 256 - sa;
|
353
363
|
*ppdst = ((sr * a1 + dr * a2) & 0xff000000 |
|
354
364
|
(sg * a1 + dg * a2) & 0xff0000 |
|
355
365
|
(sb * a1 + db * a2)) >> 8 |
|
@@ -371,8 +381,8 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
371
381
|
sr = (Uint32)(((*ppsrc & ssrc->format->Rmask) >> ssrc->format->Rshift));
|
372
382
|
sg = (Uint32)(((*ppsrc & ssrc->format->Gmask) >> ssrc->format->Gshift));
|
373
383
|
sb = (Uint32)(((*ppsrc & ssrc->format->Bmask) >> ssrc->format->Bshift));
|
374
|
-
|
375
|
-
|
384
|
+
a1 = sa + 1;
|
385
|
+
a2 = 256 - sa;
|
376
386
|
*ppdst = (((sr * a1 + dr * a2) >> 8)) << dst.fmt->Rshift |
|
377
387
|
(((sg * a1 + dg * a2) >> 8)) << dst.fmt->Gshift |
|
378
388
|
(((sb * a1 + db * a2) >> 8)) << dst.fmt->Bshift |
|
@@ -388,15 +398,14 @@ static VALUE font_draw_text(VALUE self, VALUE vdst, VALUE str, VALUE vx, VALUE v
|
|
388
398
|
}
|
389
399
|
SDL_FreeSurface(ssrc);
|
390
400
|
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
rb_encoding *enc = rb_enc_get(str);
|
401
|
+
ptr = RSTRING_PTR(str);
|
402
|
+
len = RSTRING_LEN(str);
|
403
|
+
enc = rb_enc_get(str);
|
395
404
|
for(i=0; i<len; i+=n)
|
396
405
|
{
|
397
406
|
n = rb_enc_mbclen(ptr+i, ptr+len, enc);
|
398
|
-
|
399
|
-
|
407
|
+
chr = rb_str_subseq(str, i, n);
|
408
|
+
clen = RSTRING_LEN(chr);
|
400
409
|
dst.x += (clen==1 ? font_size>>1 : font_size) + shadow_margin_x + hspace;
|
401
410
|
}
|
402
411
|
return INT2NUM(dst.x);
|
@@ -418,18 +427,19 @@ static VALUE font_text_size(VALUE self, VALUE str)
|
|
418
427
|
int shadow_margin_x = (use_shadow == Qtrue ? NUM2INT(*(RARRAY_PTR(shadow_margin)+0)) : 0);
|
419
428
|
int hspace = NUM2INT(rb_iv_get(self, "@hspace"));
|
420
429
|
|
421
|
-
|
430
|
+
VALUE chr, array;
|
431
|
+
int i, n, l=0, clen;
|
422
432
|
const char *ptr = RSTRING_PTR(str);
|
423
433
|
int len = RSTRING_LEN(str);
|
424
434
|
rb_encoding *enc = rb_enc_get(str);
|
425
435
|
for(i=0; i<len; i+=n)
|
426
436
|
{
|
427
437
|
n = rb_enc_mbclen(ptr+i, ptr+len, enc);
|
428
|
-
|
429
|
-
|
438
|
+
chr = rb_str_subseq(str, i, n);
|
439
|
+
clen = RSTRING_LEN(chr);
|
430
440
|
l += (clen==1 ? font_size>>1 : font_size) + shadow_margin_x + hspace;
|
431
441
|
}
|
432
|
-
|
442
|
+
array = rb_ary_new();
|
433
443
|
rb_ary_push(array, INT2NUM(l));
|
434
444
|
rb_ary_push(array, font_line_height(self));
|
435
445
|
return array;
|