ruby-miyako 2.1.4 → 2.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/miyako_bitmap.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
- =拡張ライブラリmiyako_no_katana
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
@@ -48,28 +48,28 @@ static volatile int one = Qnil;
48
48
  static GLOBAL_DEFINE_GET_STRUCT(Surface, GetSurface, cSurface, "SDL::Surface");
49
49
 
50
50
  /*
51
- 画像をαチャネル付き画像へ転送する
51
+ :nodoc:
52
52
  */
53
53
  static VALUE bitmap_miyako_blit_aa(VALUE self, VALUE vsrc, VALUE vdst, VALUE vx, VALUE vy)
54
54
  {
55
55
  MiyakoBitmap src, dst;
56
56
  MiyakoSize size;
57
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
57
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
58
+ int x, y, a1, a2;
58
59
 
59
60
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, vx, vy, 1);
60
61
 
61
62
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
62
-
63
- SDL_LockSurface(src.surface);
64
- SDL_LockSurface(dst.surface);
65
-
66
- int x, y;
67
- for(y = 0; y < size.h; y++)
68
- {
63
+
64
+ SDL_LockSurface(src.surface);
65
+ SDL_LockSurface(dst.surface);
66
+
67
+ for(y = 0; y < size.h; y++)
68
+ {
69
69
  Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
70
70
  Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
71
- for(x = 0; x < size.w; x++)
72
- {
71
+ for(x = 0; x < size.w; x++)
72
+ {
73
73
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
74
74
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
75
75
  src.color.a = (*ppsrc >> 24) & 0xff | src.a255;
@@ -86,8 +86,8 @@ static VALUE bitmap_miyako_blit_aa(VALUE self, VALUE vsrc, VALUE vdst, VALUE vx,
86
86
  src.color.r = (*ppsrc >> 16) & 0xff;
87
87
  src.color.g = (*ppsrc >> 8) & 0xff;
88
88
  src.color.b = (*ppsrc ) & 0xff;
89
- int a1 = src.color.a + 1;
90
- int a2 = 256 - src.color.a;
89
+ a1 = src.color.a + 1;
90
+ a2 = 256 - src.color.a;
91
91
  *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << 16 |
92
92
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << 8 |
93
93
  ((src.color.b * a1 + dst.color.b * a2) >> 8) |
@@ -120,35 +120,36 @@ static VALUE bitmap_miyako_blit_aa(VALUE self, VALUE vsrc, VALUE vdst, VALUE vx,
120
120
  }
121
121
  }
122
122
 
123
- SDL_UnlockSurface(src.surface);
124
- SDL_UnlockSurface(dst.surface);
123
+ SDL_UnlockSurface(src.surface);
124
+ SDL_UnlockSurface(dst.surface);
125
125
 
126
126
  return vdst;
127
127
  }
128
128
 
129
129
  /*
130
- 2つの画像のandを取る
130
+ :nodoc:
131
131
  */
132
132
  static VALUE bitmap_miyako_blit_and(VALUE self, VALUE vsrc, VALUE vdst)
133
133
  {
134
134
  MiyakoBitmap src, dst;
135
135
  MiyakoSize size;
136
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
136
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
137
+ int x, y;
138
+ Uint32 *ppsrc, *ppdst;
137
139
 
138
140
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
139
141
 
140
142
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
141
-
142
- SDL_LockSurface(src.surface);
143
- SDL_LockSurface(dst.surface);
144
-
145
- int x, y;
146
- for(y = 0; y < size.h; y++)
147
- {
148
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
149
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
150
- for(x = 0; x < size.w; x++)
151
- {
143
+
144
+ SDL_LockSurface(src.surface);
145
+ SDL_LockSurface(dst.surface);
146
+
147
+ for(y = 0; y < size.h; y++)
148
+ {
149
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
150
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
151
+ for(x = 0; x < size.w; x++)
152
+ {
152
153
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
153
154
  src.color.a = (*ppsrc >> 24) & 0xff | src.a255;
154
155
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
@@ -167,36 +168,37 @@ static VALUE bitmap_miyako_blit_and(VALUE self, VALUE vsrc, VALUE vdst)
167
168
  }
168
169
  }
169
170
 
170
- SDL_UnlockSurface(src.surface);
171
- SDL_UnlockSurface(dst.surface);
171
+ SDL_UnlockSurface(src.surface);
172
+ SDL_UnlockSurface(dst.surface);
172
173
 
173
174
  return vdst;
174
175
  }
175
176
 
176
177
 
177
178
  /*
178
- 2つの画像のorを取り、別の画像へ転送する
179
+ :nodoc:
179
180
  */
180
181
  static VALUE bitmap_miyako_blit_or(VALUE self, VALUE vsrc, VALUE vdst)
181
182
  {
182
183
  MiyakoBitmap src, dst;
183
184
  MiyakoSize size;
184
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
185
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
186
+ int x, y;
187
+ Uint32 *ppsrc, *ppdst;
185
188
 
186
189
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
187
190
 
188
191
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
189
-
190
- SDL_LockSurface(src.surface);
191
- SDL_LockSurface(dst.surface);
192
-
193
- int x, y;
194
- for(y = 0; y < size.h; y++)
195
- {
196
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
197
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
198
- for(x = 0; x < size.w; x++)
199
- {
192
+
193
+ SDL_LockSurface(src.surface);
194
+ SDL_LockSurface(dst.surface);
195
+
196
+ for(y = 0; y < size.h; y++)
197
+ {
198
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
199
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
200
+ for(x = 0; x < size.w; x++)
201
+ {
200
202
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
201
203
  src.color.a = (*ppsrc >> 24) & 0xff | src.a255;
202
204
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
@@ -215,36 +217,37 @@ static VALUE bitmap_miyako_blit_or(VALUE self, VALUE vsrc, VALUE vdst)
215
217
  }
216
218
  }
217
219
 
218
- SDL_UnlockSurface(src.surface);
219
- SDL_UnlockSurface(dst.surface);
220
+ SDL_UnlockSurface(src.surface);
221
+ SDL_UnlockSurface(dst.surface);
220
222
 
221
223
  return vdst;
222
224
  }
223
225
 
224
226
 
225
227
  /*
226
- 2つの画像のxorを取り、別の画像へ転送する
228
+ :nodoc:
227
229
  */
228
230
  static VALUE bitmap_miyako_blit_xor(VALUE self, VALUE vsrc, VALUE vdst)
229
231
  {
230
232
  MiyakoBitmap src, dst;
231
233
  MiyakoSize size;
232
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
234
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
235
+ int x, y;
236
+ Uint32 *ppsrc, *ppdst;
233
237
 
234
238
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
235
239
 
236
240
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
237
-
238
- SDL_LockSurface(src.surface);
239
- SDL_LockSurface(dst.surface);
240
-
241
- int x, y;
242
- for(y = 0; y < size.h; y++)
243
- {
244
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
245
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
246
- for(x = 0; x < size.w; x++)
247
- {
241
+
242
+ SDL_LockSurface(src.surface);
243
+ SDL_LockSurface(dst.surface);
244
+
245
+ for(y = 0; y < size.h; y++)
246
+ {
247
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
248
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
249
+ for(x = 0; x < size.w; x++)
250
+ {
248
251
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
249
252
  src.color.a = (*ppsrc >> 24) & 0xff | src.a255;
250
253
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
@@ -263,40 +266,41 @@ static VALUE bitmap_miyako_blit_xor(VALUE self, VALUE vsrc, VALUE vdst)
263
266
  }
264
267
  }
265
268
 
266
- SDL_UnlockSurface(src.surface);
267
- SDL_UnlockSurface(dst.surface);
269
+ SDL_UnlockSurface(src.surface);
270
+ SDL_UnlockSurface(dst.surface);
268
271
 
269
272
  return vdst;
270
273
  }
271
274
 
272
275
  /*
273
- 画像をαチャネル付き画像へ転送する
276
+ :nodoc:
274
277
  */
275
278
  static VALUE bitmap_miyako_colorkey_to_alphachannel(VALUE self, VALUE vsrc, VALUE vdst, VALUE vcolor_key)
276
279
  {
277
280
  MiyakoBitmap src, dst;
278
281
  MiyakoSize size;
279
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
280
- MiyakoColor color_key;
282
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
283
+ MiyakoColor color_key;
284
+ int x, y;
285
+ Uint32 *ppsrc, *ppdst;
281
286
 
282
287
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
283
-
288
+
284
289
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
285
290
 
286
- color_key.r = NUM2INT(*(RARRAY_PTR(vcolor_key) + 0));
287
- color_key.g = NUM2INT(*(RARRAY_PTR(vcolor_key) + 1));
288
- color_key.b = NUM2INT(*(RARRAY_PTR(vcolor_key) + 2));
291
+ color_key.r = NUM2INT(*(RARRAY_PTR(vcolor_key) + 0));
292
+ color_key.g = NUM2INT(*(RARRAY_PTR(vcolor_key) + 1));
293
+ color_key.b = NUM2INT(*(RARRAY_PTR(vcolor_key) + 2));
289
294
 
290
- SDL_LockSurface(src.surface);
291
- SDL_LockSurface(dst.surface);
292
-
293
- int x, y;
294
- for(y = 0; y < size.h; y++)
295
- {
296
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
297
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
298
- for(x = 0; x < size.w; x++)
299
- {
295
+ SDL_LockSurface(src.surface);
296
+ SDL_LockSurface(dst.surface);
297
+
298
+ for(y = 0; y < size.h; y++)
299
+ {
300
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
301
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
302
+ for(x = 0; x < size.w; x++)
303
+ {
300
304
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
301
305
  src.color.r = (*ppsrc >> 16) & 0xff;
302
306
  src.color.g = (*ppsrc >> 8) & 0xff;
@@ -315,35 +319,35 @@ static VALUE bitmap_miyako_colorkey_to_alphachannel(VALUE self, VALUE vsrc, VALU
315
319
  }
316
320
  }
317
321
 
318
- SDL_UnlockSurface(src.surface);
319
- SDL_UnlockSurface(dst.surface);
322
+ SDL_UnlockSurface(src.surface);
323
+ SDL_UnlockSurface(dst.surface);
320
324
 
321
325
  return vdst;
322
326
  }
323
327
 
324
328
  /*
325
- 画像のαチャネルを255に拡張する
326
329
  */
327
330
  static VALUE bitmap_miyako_reset_alphachannel(VALUE self, VALUE vsrc, VALUE vdst)
328
331
  {
329
332
  MiyakoBitmap src, dst;
330
333
  MiyakoSize size;
331
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
334
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
335
+ int x, y;
336
+ Uint32 *ppsrc, *ppdst;
332
337
 
333
338
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
334
339
 
335
340
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
336
-
337
- SDL_LockSurface(src.surface);
338
- SDL_LockSurface(dst.surface);
339
-
340
- int x, y;
341
- for(y = 0; y < size.h; y++)
342
- {
343
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
344
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
345
- for(x = 0; x < size.w; x++)
346
- {
341
+
342
+ SDL_LockSurface(src.surface);
343
+ SDL_LockSurface(dst.surface);
344
+
345
+ for(y = 0; y < size.h; y++)
346
+ {
347
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
348
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
349
+ for(x = 0; x < size.w; x++)
350
+ {
347
351
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
348
352
  *ppdst = *ppsrc | (0xff << 24);
349
353
  #else
@@ -354,35 +358,35 @@ static VALUE bitmap_miyako_reset_alphachannel(VALUE self, VALUE vsrc, VALUE vdst
354
358
  }
355
359
  }
356
360
 
357
- SDL_UnlockSurface(src.surface);
358
- SDL_UnlockSurface(dst.surface);
361
+ SDL_UnlockSurface(src.surface);
362
+ SDL_UnlockSurface(dst.surface);
359
363
 
360
364
  return vdst;
361
365
  }
362
366
 
363
367
  /*
364
- 画像をαチャネル付き画像へ転送する
365
368
  */
366
369
  static VALUE bitmap_miyako_colorkey_to_alphachannel_self(VALUE self, VALUE vdst, VALUE vcolor_key)
367
370
  {
368
371
  MiyakoBitmap dst;
369
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
370
- MiyakoColor color_key;
372
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
373
+ MiyakoColor color_key;
374
+ int x, y;
375
+ Uint32 *ppdst;
371
376
 
372
377
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
373
-
374
- color_key.r = NUM2INT(*(RARRAY_PTR(vcolor_key) + 0));
375
- color_key.g = NUM2INT(*(RARRAY_PTR(vcolor_key) + 1));
376
- color_key.b = NUM2INT(*(RARRAY_PTR(vcolor_key) + 2));
377
-
378
- SDL_LockSurface(dst.surface);
379
-
380
- int x, y;
381
- for(y = 0; y < dst.rect.h; y++)
382
- {
383
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
384
- for(x = 0; x < dst.rect.w; x++)
385
- {
378
+
379
+ color_key.r = NUM2INT(*(RARRAY_PTR(vcolor_key) + 0));
380
+ color_key.g = NUM2INT(*(RARRAY_PTR(vcolor_key) + 1));
381
+ color_key.b = NUM2INT(*(RARRAY_PTR(vcolor_key) + 2));
382
+
383
+ SDL_LockSurface(dst.surface);
384
+
385
+ for(y = 0; y < dst.rect.h; y++)
386
+ {
387
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
388
+ for(x = 0; x < dst.rect.w; x++)
389
+ {
386
390
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
387
391
  dst.color.r = (*ppdst >> 16) & 0xff;
388
392
  dst.color.g = (*ppdst >> 8) & 0xff;
@@ -400,29 +404,29 @@ static VALUE bitmap_miyako_colorkey_to_alphachannel_self(VALUE self, VALUE vdst,
400
404
  }
401
405
  }
402
406
 
403
- SDL_UnlockSurface(dst.surface);
407
+ SDL_UnlockSurface(dst.surface);
404
408
 
405
409
  return vdst;
406
410
  }
407
411
 
408
412
  /*
409
- 画像のαチャネルを255に拡張する
410
413
  */
411
414
  static VALUE bitmap_miyako_reset_alphachannel_self(VALUE self, VALUE vdst)
412
415
  {
413
416
  MiyakoBitmap dst;
414
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
417
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
418
+ int x, y;
419
+ Uint32 *ppdst;
415
420
 
416
421
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
417
422
 
418
- SDL_LockSurface(dst.surface);
419
-
420
- int x, y;
421
- for(y = 0; y < dst.rect.h; y++)
422
- {
423
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
424
- for(x = 0; x < dst.rect.w; x++)
425
- {
423
+ SDL_LockSurface(dst.surface);
424
+
425
+ for(y = 0; y < dst.rect.h; y++)
426
+ {
427
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
428
+ for(x = 0; x < dst.rect.w; x++)
429
+ {
426
430
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
427
431
  *ppdst = *ppdst | 0xff << 24;
428
432
  #else
@@ -432,43 +436,44 @@ static VALUE bitmap_miyako_reset_alphachannel_self(VALUE self, VALUE vdst)
432
436
  }
433
437
  }
434
438
 
435
- SDL_UnlockSurface(dst.surface);
439
+ SDL_UnlockSurface(dst.surface);
436
440
 
437
441
  return vdst;
438
442
  }
439
443
 
440
444
  /*
441
- 画像のαチャネルの値を一定の割合で変化させて転送する
442
445
  */
443
446
  static VALUE bitmap_miyako_dec_alpha(VALUE self, VALUE vsrc, VALUE vdst, VALUE degree)
444
447
  {
445
448
  MiyakoBitmap src, dst;
446
449
  MiyakoSize size;
447
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
450
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
451
+ int x, y, a1, a2;
452
+ double deg;
453
+ Uint32 da, *ppsrc, *ppdst;
448
454
 
449
455
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
450
456
 
451
457
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
452
-
453
- double deg = NUM2DBL(degree);
458
+
459
+ deg = NUM2DBL(degree);
454
460
  if(deg < -1.0 || deg > 1.0){
455
461
  char buf[256];
456
462
  sprintf(buf, "Illegal degree! : %.15g", deg);
457
463
  rb_raise(eMiyakoError, buf);
458
464
  }
459
465
  deg = 1.0 - deg;
460
- Uint32 da = (Uint32)(255.0 * deg);
461
-
462
- SDL_LockSurface(src.surface);
463
- SDL_LockSurface(dst.surface);
464
-
465
- int x, y;
466
- for(y = 0; y < size.h; y++)
467
- {
468
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
469
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
470
- for(x = 0; x < size.w; x++)
471
- {
466
+ da = (Uint32)(255.0 * deg);
467
+
468
+ SDL_LockSurface(src.surface);
469
+ SDL_LockSurface(dst.surface);
470
+
471
+ for(y = 0; y < size.h; y++)
472
+ {
473
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
474
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
475
+ for(x = 0; x < size.w; x++)
476
+ {
472
477
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
473
478
  src.color.r = (*ppsrc >> 16) & 0xff;
474
479
  src.color.g = (*ppsrc >> 8) & 0xff;
@@ -490,8 +495,8 @@ static VALUE bitmap_miyako_dec_alpha(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
490
495
  dst.color.r = (*ppdst >> 16) & 0xff;
491
496
  dst.color.g = (*ppdst >> 8) & 0xff;
492
497
  dst.color.b = (*ppdst ) & 0xff;
493
- int a1 = src.color.a + 1;
494
- int a2 = 256 - src.color.a;
498
+ a1 = src.color.a + 1;
499
+ a2 = 256 - src.color.a;
495
500
  *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << 16 |
496
501
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << 8 |
497
502
  ((src.color.b * a1 + dst.color.b * a2) >> 8) |
@@ -505,18 +510,18 @@ static VALUE bitmap_miyako_dec_alpha(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
505
510
  if(src.color.a > 0x80000000){ src.color.a = 0; }
506
511
  if(src.color.a > 255){ src.color.a = 255; }
507
512
  dst.color.a = (*pdst & dst.fmt->Amask) | dst.a255;
508
- if(dst.color.a == 0 || src.color.a == 255){
509
- *ppdst = src.color.r << dst.fmt->Rshift |
513
+ if(dst.color.a == 0 || src.color.a == 255){
514
+ *ppdst = src.color.r << dst.fmt->Rshift |
510
515
  src.color.g << dst.fmt->Gshift |
511
516
  src.color.b << dst.fmt->Bshift |
512
517
  src.color.a;
513
- ppsrc++;
514
- ppdst++;
515
- continue;
516
- }
517
- int a1 = src.color.a + 1;
518
- int a2 = 256 - src.color.a;
519
- *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
518
+ ppsrc++;
519
+ ppdst++;
520
+ continue;
521
+ }
522
+ a1 = src.color.a + 1;
523
+ a2 = 256 - src.color.a;
524
+ *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
520
525
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << dst.fmt->Gshift |
521
526
  ((src.color.b * a1 + dst.color.b * a2) >> 8) << dst.fmt->Bshift |
522
527
  0xff;
@@ -526,44 +531,45 @@ static VALUE bitmap_miyako_dec_alpha(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
526
531
  }
527
532
  }
528
533
 
529
- SDL_UnlockSurface(src.surface);
530
- SDL_UnlockSurface(dst.surface);
534
+ SDL_UnlockSurface(src.surface);
535
+ SDL_UnlockSurface(dst.surface);
531
536
 
532
537
  return vdst;
533
538
  }
534
539
 
535
540
  /*
536
- 画像の色を一定の割合で黒に近づける(ブラックアウト)
537
541
  */
538
542
  static VALUE bitmap_miyako_black_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE degree)
539
543
  {
540
544
  MiyakoBitmap src, dst;
541
545
  MiyakoSize size;
542
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
546
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
547
+ int x, y, a1, a2;
548
+ double deg;
549
+ Uint32 d, *ppsrc, *ppdst;
543
550
 
544
551
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
545
552
 
546
553
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
547
-
548
- double deg = NUM2DBL(degree);
554
+
555
+ deg = NUM2DBL(degree);
549
556
  if(deg < -1.0 || deg > 1.0){
550
557
  char buf[256];
551
558
  sprintf(buf, "Illegal degree! : %.15g", deg);
552
559
  rb_raise(eMiyakoError, buf);
553
560
  }
554
561
  deg = 1.0 - deg;
555
- Uint32 d = (Uint32)(255.0 * deg);
556
-
557
- SDL_LockSurface(src.surface);
558
- SDL_LockSurface(dst.surface);
559
-
560
- int x, y;
561
- for(y = 0; y < size.h; y++)
562
- {
563
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
564
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
565
- for(x = 0; x < size.w; x++)
566
- {
562
+ d = (Uint32)(255.0 * deg);
563
+
564
+ SDL_LockSurface(src.surface);
565
+ SDL_LockSurface(dst.surface);
566
+
567
+ for(y = 0; y < size.h; y++)
568
+ {
569
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
570
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
571
+ for(x = 0; x < size.w; x++)
572
+ {
567
573
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
568
574
  src.color.r = (*ppsrc >> 16) & 0xff;
569
575
  src.color.g = (*ppsrc >> 8) & 0xff;
@@ -584,17 +590,17 @@ static VALUE bitmap_miyako_black_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
584
590
  dst.color.g = (*ppdst >> 8) & 0xff;
585
591
  dst.color.b = (*ppdst ) & 0xff;
586
592
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
587
- if(dst.color.a == 0 || src.color.a == 255){
588
- *ppdst = src.color.r << 16 |
593
+ if(dst.color.a == 0 || src.color.a == 255){
594
+ *ppdst = src.color.r << 16 |
589
595
  src.color.g << 8 |
590
596
  src.color.b |
591
597
  src.color.a << 24;
592
- ppsrc++;
593
- ppdst++;
594
- continue;
595
- }
596
- int a1 = src.color.a + 1;
597
- int a2 = 256 - src.color.a;
598
+ ppsrc++;
599
+ ppdst++;
600
+ continue;
601
+ }
602
+ a1 = src.color.a + 1;
603
+ a2 = 256 - src.color.a;
598
604
  *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << 16 |
599
605
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << 8 |
600
606
  ((src.color.b * a1 + dst.color.b * a2) >> 8) |
@@ -616,18 +622,18 @@ static VALUE bitmap_miyako_black_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
616
622
  if(src.color.a > 0x80000000){ src.color.a = 0; }
617
623
  }
618
624
  dst.color.a = (*pdst & dst.fmt->Amask) | dst.a255;
619
- if(dst.color.a == 0 || src.color.a == 255){
620
- *ppdst = src.color.r << dst.fmt->Rshift |
625
+ if(dst.color.a == 0 || src.color.a == 255){
626
+ *ppdst = src.color.r << dst.fmt->Rshift |
621
627
  src.color.g << dst.fmt->Gshift |
622
628
  src.color.b << dst.fmt->Bshift |
623
629
  src.color.a;
624
- ppsrc++;
625
- ppdst++;
626
- continue;
627
- }
628
- int a1 = src.color.a + 1;
629
- int a2 = 256 - src.color.a;
630
- *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
630
+ ppsrc++;
631
+ ppdst++;
632
+ continue;
633
+ }
634
+ a1 = src.color.a + 1;
635
+ a2 = 256 - src.color.a;
636
+ *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
631
637
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << dst.fmt->Gshift |
632
638
  ((src.color.b * a1 + dst.color.b * a2) >> 8) << dst.fmt->Bshift |
633
639
  0xff;
@@ -637,44 +643,45 @@ static VALUE bitmap_miyako_black_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
637
643
  }
638
644
  }
639
645
 
640
- SDL_UnlockSurface(src.surface);
641
- SDL_UnlockSurface(dst.surface);
646
+ SDL_UnlockSurface(src.surface);
647
+ SDL_UnlockSurface(dst.surface);
642
648
 
643
- return vdst;
649
+ return vdst;
644
650
  }
645
651
 
646
652
  /*
647
- 画像の色を一定の割合で白に近づける(ホワイトアウト)
648
653
  */
649
654
  static VALUE bitmap_miyako_white_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE degree)
650
655
  {
651
656
  MiyakoBitmap src, dst;
652
657
  MiyakoSize size;
653
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
658
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
659
+ int x, y, a1, a2;
660
+ double deg;
661
+ Uint32 d, *ppsrc, *ppdst;
654
662
 
655
663
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
656
664
 
657
665
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
658
-
659
- double deg = NUM2DBL(degree);
666
+
667
+ deg = NUM2DBL(degree);
660
668
  if(deg < -1.0 || deg > 1.0){
661
669
  char buf[256];
662
670
  sprintf(buf, "Illegal degree! : %.15g", deg);
663
671
  rb_raise(eMiyakoError, buf);
664
672
  }
665
673
  deg = 1.0 - deg;
666
- Uint32 d = (Uint32)(255.0 * deg);
667
-
668
- SDL_LockSurface(src.surface);
669
- SDL_LockSurface(dst.surface);
670
-
671
- int x, y;
672
- for(y = 0; y < size.h; y++)
673
- {
674
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
675
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
676
- for(x = 0; x < size.w; x++)
677
- {
674
+ d = (Uint32)(255.0 * deg);
675
+
676
+ SDL_LockSurface(src.surface);
677
+ SDL_LockSurface(dst.surface);
678
+
679
+ for(y = 0; y < size.h; y++)
680
+ {
681
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
682
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
683
+ for(x = 0; x < size.w; x++)
684
+ {
678
685
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
679
686
  src.color.r = (*ppsrc >> 16) & 0xff;
680
687
  src.color.g = (*ppsrc >> 8) & 0xff;
@@ -695,17 +702,17 @@ static VALUE bitmap_miyako_white_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
695
702
  dst.color.g = (*ppdst >> 8) & 0xff;
696
703
  dst.color.b = (*ppdst ) & 0xff;
697
704
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
698
- if(dst.color.a == 0 || src.color.a == 255){
699
- *ppdst = src.color.r << 16 |
705
+ if(dst.color.a == 0 || src.color.a == 255){
706
+ *ppdst = src.color.r << 16 |
700
707
  src.color.g << 8 |
701
708
  src.color.b |
702
709
  src.color.a << 24;
703
- ppsrc++;
704
- ppdst++;
705
- continue;
706
- }
707
- int a1 = src.color.a + 1;
708
- int a2 = 256 - src.color.a;
710
+ ppsrc++;
711
+ ppdst++;
712
+ continue;
713
+ }
714
+ a1 = src.color.a + 1;
715
+ a2 = 256 - src.color.a;
709
716
  *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << 16 |
710
717
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << 8 |
711
718
  ((src.color.b * a1 + dst.color.b * a2) >> 8) |
@@ -727,18 +734,18 @@ static VALUE bitmap_miyako_white_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
727
734
  if(src.color.a > 255){ src.color.a = 255; }
728
735
  }
729
736
  dst.color.a = (*pdst & dst.fmt->Amask) | dst.a255;
730
- if(dst.color.a == 0 || src.color.a == 255){
731
- *ppdst = src.color.r << dst.fmt->Rshift |
737
+ if(dst.color.a == 0 || src.color.a == 255){
738
+ *ppdst = src.color.r << dst.fmt->Rshift |
732
739
  src.color.g << dst.fmt->Gshift |
733
740
  src.color.b << dst.fmt->Bshift |
734
741
  src.color.a;
735
- ppsrc++;
736
- ppdst++;
737
- continue;
738
- }
739
- int a1 = src.color.a + 1;
740
- int a2 = 256 - src.color.a;
741
- *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
742
+ ppsrc++;
743
+ ppdst++;
744
+ continue;
745
+ }
746
+ a1 = src.color.a + 1;
747
+ a2 = 256 - src.color.a;
748
+ *ppdst = ((src.color.r * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
742
749
  ((src.color.g * a1 + dst.color.g * a2) >> 8) << dst.fmt->Gshift |
743
750
  ((src.color.b * a1 + dst.color.b * a2) >> 8) << dst.fmt->Bshift |
744
751
  0xff;
@@ -748,56 +755,56 @@ static VALUE bitmap_miyako_white_out(VALUE self, VALUE vsrc, VALUE vdst, VALUE d
748
755
  }
749
756
  }
750
757
 
751
- SDL_UnlockSurface(src.surface);
752
- SDL_UnlockSurface(dst.surface);
758
+ SDL_UnlockSurface(src.surface);
759
+ SDL_UnlockSurface(dst.surface);
753
760
 
754
- return vdst;
761
+ return vdst;
755
762
  }
756
763
 
757
764
  /*
758
- 画像のRGB値を反転させる
759
765
  */
760
766
  static VALUE bitmap_miyako_inverse(VALUE self, VALUE vsrc, VALUE vdst)
761
767
  {
762
768
  MiyakoBitmap src, dst;
763
769
  MiyakoSize size;
764
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
770
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
771
+ int x, y, a1, a2;
772
+ Uint32 *ppsrc, *ppdst;
765
773
 
766
774
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
767
775
 
768
776
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
769
-
770
- SDL_LockSurface(src.surface);
771
- SDL_LockSurface(dst.surface);
772
-
773
- int x, y;
774
- for(y = 0; y < size.h; y++)
775
- {
776
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
777
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
778
- for(x = 0; x < size.w; x++)
779
- {
777
+
778
+ SDL_LockSurface(src.surface);
779
+ SDL_LockSurface(dst.surface);
780
+
781
+ for(y = 0; y < size.h; y++)
782
+ {
783
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
784
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
785
+ for(x = 0; x < size.w; x++)
786
+ {
780
787
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
781
788
  src.color.a = (*ppsrc >> 24) & 0xff | src.a255;
782
- if(src.color.a == 0){ ppsrc++; ppdst++; continue; }
789
+ if(src.color.a == 0){ ppsrc++; ppdst++; continue; }
783
790
  src.color.r = (*ppsrc >> 16) & 0xff;
784
791
  src.color.g = (*ppsrc >> 8) & 0xff;
785
792
  src.color.b = (*ppsrc ) & 0xff;
786
793
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
787
- if(dst.color.a == 0 || src.color.a == 255){
788
- *ppdst = (src.color.r ^ 0xff) << 16 |
794
+ if(dst.color.a == 0 || src.color.a == 255){
795
+ *ppdst = (src.color.r ^ 0xff) << 16 |
789
796
  (src.color.g ^ 0xff) << 8 |
790
797
  (src.color.b ^ 0xff) |
791
798
  (src.color.a ) << 24;
792
- ppsrc++;
793
- ppdst++;
794
- continue;
795
- }
799
+ ppsrc++;
800
+ ppdst++;
801
+ continue;
802
+ }
796
803
  dst.color.r = (*ppdst >> 16) & 0xff;
797
804
  dst.color.g = (*ppdst >> 8) & 0xff;
798
805
  dst.color.b = (*ppdst ) & 0xff;
799
- int a1 = src.color.a + 1;
800
- int a2 = 256 - src.color.a;
806
+ a1 = src.color.a + 1;
807
+ a2 = 256 - src.color.a;
801
808
  *ppdst = (((src.color.r ^ 0xff) * a1 + dst.color.r * a2) >> 8) << 16 |
802
809
  (((src.color.g ^ 0xff) * a1 + dst.color.g * a2) >> 8) << 8 |
803
810
  (((src.color.b ^ 0xff) * a1 + dst.color.b * a2) >> 8) |
@@ -808,18 +815,18 @@ static VALUE bitmap_miyako_inverse(VALUE self, VALUE vsrc, VALUE vdst)
808
815
  src.color.b = (*ppsrc & src.fmt->Bmask) >> src.fmt->Bshift;
809
816
  src.color.a = (*ppsrc & src.fmt->Amask) | src.a255;
810
817
  dst.color.a = (*ppdst & dst.fmt->Amask) | dst.a255;
811
- if(dst.color.a == 0 || src.color.a == 255){
812
- *ppdst = (src.color.r ^ 0xff) << dst.fmt->Rshift |
818
+ if(dst.color.a == 0 || src.color.a == 255){
819
+ *ppdst = (src.color.r ^ 0xff) << dst.fmt->Rshift |
813
820
  (src.color.g ^ 0xff) << dst.fmt->Gshift |
814
821
  (src.color.b ^ 0xff) << dst.fmt->Bshift |
815
822
  src.color.a;
816
- ppsrc++;
817
- ppdst++;
818
- continue;
819
- }
820
- int a1 = src.color.a + 1;
821
- int a2 = 256 - src.color.a;
822
- *ppdst = (((src.color.r ^ 0xff) * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
823
+ ppsrc++;
824
+ ppdst++;
825
+ continue;
826
+ }
827
+ int a1 = src.color.a + 1;
828
+ int a2 = 256 - src.color.a;
829
+ *ppdst = (((src.color.r ^ 0xff) * a1 + dst.color.r * a2) >> 8) << dst.fmt->Rshift |
823
830
  (((src.color.g ^ 0xff) * a1 + dst.color.g * a2) >> 8) << dst.fmt->Gshift |
824
831
  (((src.color.b ^ 0xff) * a1 + dst.color.b * a2) >> 8) << dst.fmt->Bshift |
825
832
  0xff;
@@ -829,39 +836,40 @@ static VALUE bitmap_miyako_inverse(VALUE self, VALUE vsrc, VALUE vdst)
829
836
  }
830
837
  }
831
838
 
832
- SDL_UnlockSurface(src.surface);
833
- SDL_UnlockSurface(dst.surface);
839
+ SDL_UnlockSurface(src.surface);
840
+ SDL_UnlockSurface(dst.surface);
834
841
 
835
- return vdst;
842
+ return vdst;
836
843
  }
837
844
 
838
845
  /*
839
- 画像のαチャネルの値を一定の割合で変化させて転送する
840
846
  */
841
847
  static VALUE bitmap_miyako_dec_alpha_self(VALUE self, VALUE vdst, VALUE degree)
842
848
  {
843
849
  MiyakoBitmap dst;
844
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
850
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
851
+ int x, y;
852
+ double deg;
853
+ Uint32 da, *ppdst;
845
854
 
846
855
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
847
856
 
848
- double deg = NUM2DBL(degree);
857
+ deg = NUM2DBL(degree);
849
858
  if(deg < -1.0 || deg > 1.0){
850
859
  char buf[256];
851
860
  sprintf(buf, "Illegal degree! : %.15g", deg);
852
861
  rb_raise(eMiyakoError, buf);
853
862
  }
854
863
  deg = 1.0 - deg;
855
- Uint32 da = (Uint32)(255.0 * deg);
856
-
857
- SDL_LockSurface(dst.surface);
858
-
859
- int x, y;
860
- for(y = 0; y < dst.rect.h; y++)
861
- {
862
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
863
- for(x = 0; x < dst.rect.w; x++)
864
- {
864
+ da = (Uint32)(255.0 * deg);
865
+
866
+ SDL_LockSurface(dst.surface);
867
+
868
+ for(y = 0; y < dst.rect.h; y++)
869
+ {
870
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
871
+ for(x = 0; x < dst.rect.w; x++)
872
+ {
865
873
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
866
874
  dst.color.r = (*ppdst >> 16) & 0xff;
867
875
  dst.color.g = (*ppdst >> 8) & 0xff;
@@ -891,38 +899,39 @@ static VALUE bitmap_miyako_dec_alpha_self(VALUE self, VALUE vdst, VALUE degree)
891
899
  }
892
900
  }
893
901
 
894
- SDL_UnlockSurface(dst.surface);
902
+ SDL_UnlockSurface(dst.surface);
895
903
 
896
904
  return vdst;
897
905
  }
898
906
 
899
907
  /*
900
- 画像の色を一定の割合で黒に近づける(ブラックアウト)
901
908
  */
902
909
  static VALUE bitmap_miyako_black_out_self(VALUE self, VALUE vdst, VALUE degree)
903
910
  {
904
911
  MiyakoBitmap dst;
905
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
912
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
913
+ int x, y;
914
+ double deg;
915
+ Uint32 d, *ppdst;
906
916
 
907
917
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
908
918
 
909
- double deg = NUM2DBL(degree);
919
+ deg = NUM2DBL(degree);
910
920
  if(deg < -1.0 || deg > 1.0){
911
921
  char buf[256];
912
922
  sprintf(buf, "Illegal degree! : %.15g", deg);
913
923
  rb_raise(eMiyakoError, buf);
914
924
  }
915
925
  deg = 1.0 - deg;
916
- Uint32 d = (Uint32)(255.0 * deg);
917
-
918
- SDL_LockSurface(dst.surface);
919
-
920
- int x, y;
921
- for(y = 0; y < dst.rect.h; y++)
922
- {
923
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
924
- for(x = 0; x < dst.rect.w; x++)
925
- {
926
+ d = (Uint32)(255.0 * deg);
927
+
928
+ SDL_LockSurface(dst.surface);
929
+
930
+ for(y = 0; y < dst.rect.h; y++)
931
+ {
932
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
933
+ for(x = 0; x < dst.rect.w; x++)
934
+ {
926
935
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
927
936
  dst.color.r = (*ppdst >> 16) & 0xff;
928
937
  dst.color.g = (*ppdst >> 8) & 0xff;
@@ -968,38 +977,39 @@ static VALUE bitmap_miyako_black_out_self(VALUE self, VALUE vdst, VALUE degree)
968
977
  }
969
978
  }
970
979
 
971
- SDL_UnlockSurface(dst.surface);
980
+ SDL_UnlockSurface(dst.surface);
972
981
 
973
982
  return vdst;
974
983
  }
975
984
 
976
985
  /*
977
- 画像の色を一定の割合で白に近づける(ホワイトアウト)
978
986
  */
979
987
  static VALUE bitmap_miyako_white_out_self(VALUE self, VALUE vdst, VALUE degree)
980
988
  {
981
989
  MiyakoBitmap dst;
982
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
990
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
991
+ int x, y;
992
+ double deg;
993
+ Uint32 d, *ppdst;
983
994
 
984
995
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
985
996
 
986
- double deg = NUM2DBL(degree);
997
+ deg = NUM2DBL(degree);
987
998
  if(deg < -1.0 || deg > 1.0){
988
999
  char buf[256];
989
1000
  sprintf(buf, "Illegal degree! : %.15g", deg);
990
1001
  rb_raise(eMiyakoError, buf);
991
1002
  }
992
1003
  deg = 1.0 - deg;
993
- Uint32 d = (Uint32)(255.0 * deg);
994
-
995
- SDL_LockSurface(dst.surface);
996
-
997
- int x, y;
998
- for(y = 0; y < dst.rect.h; y++)
999
- {
1000
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
1001
- for(x = 0; x < dst.rect.w; x++)
1002
- {
1004
+ d = (Uint32)(255.0 * deg);
1005
+
1006
+ SDL_LockSurface(dst.surface);
1007
+
1008
+ for(y = 0; y < dst.rect.h; y++)
1009
+ {
1010
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
1011
+ for(x = 0; x < dst.rect.w; x++)
1012
+ {
1003
1013
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
1004
1014
  dst.color.r = (*ppdst >> 16) & 0xff;
1005
1015
  dst.color.g = (*ppdst >> 8) & 0xff;
@@ -1045,29 +1055,29 @@ static VALUE bitmap_miyako_white_out_self(VALUE self, VALUE vdst, VALUE degree)
1045
1055
  }
1046
1056
  }
1047
1057
 
1048
- SDL_UnlockSurface(dst.surface);
1058
+ SDL_UnlockSurface(dst.surface);
1049
1059
 
1050
1060
  return vdst;
1051
1061
  }
1052
1062
 
1053
1063
  /*
1054
- 画像のRGB値を反転させる
1055
1064
  */
1056
1065
  static VALUE bitmap_miyako_inverse_self(VALUE self, VALUE vdst)
1057
1066
  {
1058
1067
  MiyakoBitmap dst;
1059
1068
  SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
1069
+ int x, y;
1070
+ Uint32 *ppdst;
1060
1071
 
1061
1072
  _miyako_setup_unit(vdst, scr, &dst, Qnil, Qnil, 1);
1062
1073
 
1063
- SDL_LockSurface(dst.surface);
1064
-
1065
- int x, y;
1066
- for(y = 0; y < dst.rect.h; y++)
1067
- {
1068
- Uint32 *ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
1069
- for(x = 0; x < dst.rect.w; x++)
1070
- {
1074
+ SDL_LockSurface(dst.surface);
1075
+
1076
+ for(y = 0; y < dst.rect.h; y++)
1077
+ {
1078
+ ppdst = dst.ptr + (dst.rect.y + y) * dst.surface->w + dst.rect.x;
1079
+ for(x = 0; x < dst.rect.w; x++)
1080
+ {
1071
1081
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
1072
1082
  dst.color.r = (*ppdst >> 16) & 0xff;
1073
1083
  dst.color.g = (*ppdst >> 8) & 0xff;
@@ -1091,34 +1101,34 @@ static VALUE bitmap_miyako_inverse_self(VALUE self, VALUE vdst)
1091
1101
  }
1092
1102
  }
1093
1103
 
1094
- SDL_UnlockSurface(dst.surface);
1104
+ SDL_UnlockSurface(dst.surface);
1095
1105
 
1096
- return vdst;
1106
+ return vdst;
1097
1107
  }
1098
1108
 
1099
1109
  /*
1100
- 2枚の画像の加算合成を行う
1101
1110
  */
1102
1111
  static VALUE bitmap_miyako_additive_synthesis(VALUE self, VALUE vsrc, VALUE vdst)
1103
1112
  {
1104
1113
  MiyakoBitmap src, dst;
1105
1114
  MiyakoSize size;
1106
- SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
1115
+ SDL_Surface *scr = GetSurface(rb_iv_get(mScreen, "@@screen"))->surface;
1116
+ int x, y;
1117
+ Uint32 *ppsrc, *ppdst;
1107
1118
 
1108
1119
  _miyako_setup_unit_2(vsrc, vdst, scr, &src, &dst, Qnil, Qnil, 1);
1109
1120
 
1110
1121
  if(_miyako_init_rect(&src, &dst, &size) == 0) return Qnil;
1111
-
1112
- SDL_LockSurface(src.surface);
1113
- SDL_LockSurface(dst.surface);
1114
-
1115
- int x, y;
1116
- for(y = 0; y < size.h; y++)
1117
- {
1118
- Uint32 *ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
1119
- Uint32 *ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
1120
- for(x = 0; x < size.w; x++)
1121
- {
1122
+
1123
+ SDL_LockSurface(src.surface);
1124
+ SDL_LockSurface(dst.surface);
1125
+
1126
+ for(y = 0; y < size.h; y++)
1127
+ {
1128
+ ppsrc = src.ptr + (src.rect.y + y) * src.surface->w + src.rect.x;
1129
+ ppdst = dst.ptr + (dst.rect.y + src.y + y) * dst.surface->w + dst.rect.x + src.x;
1130
+ for(x = 0; x < size.w; x++)
1131
+ {
1122
1132
  #if SDL_BYTEORDER == SDL_LIL_ENDIAN
1123
1133
  src.color.r = (*ppsrc >> 16) & 0xff;
1124
1134
  src.color.g = (*ppsrc >> 8) & 0xff;
@@ -1129,12 +1139,12 @@ static VALUE bitmap_miyako_additive_synthesis(VALUE self, VALUE vsrc, VALUE vdst
1129
1139
  dst.color.b = (*ppdst ) & 0xff;
1130
1140
  dst.color.a = (*ppdst >> 24) & 0xff | dst.a255;
1131
1141
  dst.color.r += src.color.r;
1132
- if(dst.color.r > 255){ dst.color.r = 255; }
1133
- dst.color.g += src.color.g;
1134
- if(dst.color.g > 255){ dst.color.g = 255; }
1135
- dst.color.b += src.color.b;
1136
- if(dst.color.b > 255){ dst.color.b = 255; }
1137
- dst.color.a = (dst.color.a > src.color.a ? dst.color.a : src.color.a);
1142
+ if(dst.color.r > 255){ dst.color.r = 255; }
1143
+ dst.color.g += src.color.g;
1144
+ if(dst.color.g > 255){ dst.color.g = 255; }
1145
+ dst.color.b += src.color.b;
1146
+ if(dst.color.b > 255){ dst.color.b = 255; }
1147
+ dst.color.a = (dst.color.a > src.color.a ? dst.color.a : src.color.a);
1138
1148
  *ppdst = dst.color.r << 16 |
1139
1149
  dst.color.g << 8 |
1140
1150
  dst.color.b |
@@ -1149,12 +1159,12 @@ static VALUE bitmap_miyako_additive_synthesis(VALUE self, VALUE vsrc, VALUE vdst
1149
1159
  dst.color.b = (*ppdst & dst.fmt->Bmask) >> dst.fmt->Bshift;
1150
1160
  dst.color.a = (*ppdst & dst.fmt->Amask) | dst.a255;
1151
1161
  dst.color.r += src.color.r;
1152
- if(dst.color.r > 255){ dst.color.r = 255; }
1153
- dst.color.g += src.color.g;
1154
- if(dst.color.g > 255){ dst.color.g = 255; }
1155
- dst.color.b += src.color.b;
1156
- if(dst.color.b > 255){ dst.color.b = 255; }
1157
- dst.color.a = (dst.color.a > src.color.a ? dst.color.a : src.color.a);
1162
+ if(dst.color.r > 255){ dst.color.r = 255; }
1163
+ dst.color.g += src.color.g;
1164
+ if(dst.color.g > 255){ dst.color.g = 255; }
1165
+ dst.color.b += src.color.b;
1166
+ if(dst.color.b > 255){ dst.color.b = 255; }
1167
+ dst.color.a = (dst.color.a > src.color.a ? dst.color.a : src.color.a);
1158
1168
  *ppdst = dst.color.r << dst.fmt->Rshift |
1159
1169
  dst.color.g << dst.fmt->Gshift |
1160
1170
  dst.color.b << dst.fmt->Bshift |
@@ -1165,14 +1175,13 @@ static VALUE bitmap_miyako_additive_synthesis(VALUE self, VALUE vsrc, VALUE vdst
1165
1175
  }
1166
1176
  }
1167
1177
 
1168
- SDL_UnlockSurface(src.surface);
1169
- SDL_UnlockSurface(dst.surface);
1178
+ SDL_UnlockSurface(src.surface);
1179
+ SDL_UnlockSurface(dst.surface);
1170
1180
 
1171
- return vdst;
1181
+ return vdst;
1172
1182
  }
1173
1183
 
1174
1184
  /*
1175
- 2枚の画像の減算合成を行う
1176
1185
  */
1177
1186
  static VALUE bitmap_miyako_subtraction_synthesis(VALUE self, VALUE src, VALUE dst)
1178
1187
  {
@@ -1200,7 +1209,7 @@ void Init_miyako_bitmap()
1200
1209
  nZero = INT2NUM(zero);
1201
1210
  one = 1;
1202
1211
  nOne = INT2NUM(one);
1203
-
1212
+
1204
1213
  rb_define_singleton_method(cBitmap, "blit_aa", bitmap_miyako_blit_aa, 4);
1205
1214
  rb_define_singleton_method(cBitmap, "blit_and", bitmap_miyako_blit_and, 2);
1206
1215
  rb_define_singleton_method(cBitmap, "blit_or", bitmap_miyako_blit_or, 2);