OSDN Git Service

test for replaceBitmapData Lossless with alpha0
[swfed/swfed.git] / src / swf_rect.c
1 #include <stdio.h>
2 #include "bitstream.h"
3 #include "swf_rect.h"
4
5 int
6 swf_rect_parse(bitstream_t *bs, swf_rect_t *rect) {
7     int size;
8     bitstream_align(bs);
9     size = bitstream_getbits(bs, 5);
10     if (size == -1) {
11         return 1;
12     }
13     rect->size = size;
14     rect->x_min = bitstream_getbits_signed(bs, size);
15     rect->x_max = bitstream_getbits_signed(bs, size);
16     rect->y_min = bitstream_getbits_signed(bs, size);
17     rect->y_max = bitstream_getbits_signed(bs, size);
18     return 0;
19 }
20
21 int
22 swf_rect_build(bitstream_t *bs, swf_rect_t *rect) {
23     register unsigned char size;
24     unsigned char x_min_bits = bitstream_need_bits_signed(rect->x_min);
25     unsigned char x_max_bits = bitstream_need_bits_signed(rect->x_max);
26     unsigned char y_min_bits = bitstream_need_bits_signed(rect->y_min);
27     unsigned char y_max_bits = bitstream_need_bits_signed(rect->y_max);
28     size = (x_min_bits>x_max_bits)?x_min_bits:x_max_bits;
29     size = (size>y_min_bits)?size:y_min_bits;
30     size = (size>y_max_bits)?size:y_max_bits;
31     
32     bitstream_align(bs);
33     bitstream_putbits(bs, size, 5);
34     bitstream_putbits_signed(bs, rect->x_min, size);
35     bitstream_putbits_signed(bs, rect->x_max, size);
36     bitstream_putbits_signed(bs, rect->y_min, size);
37     bitstream_putbits_signed(bs, rect->y_max, size);
38     return 0;
39 }
40
41 int
42 swf_rect_print(swf_rect_t *rect, int indent_depth) {
43     print_indent(indent_depth);
44     printf("rect=(%d, %d)-(%d, %d) (f_size=%d)\n",
45            rect->x_min / SWF_TWIPS,
46            rect->y_min / SWF_TWIPS,
47            rect->x_max / SWF_TWIPS,
48            rect->y_max / SWF_TWIPS,
49            rect->size);
50     return 0;
51 }
52
53 int swf_rect_apply_factor(swf_rect_t *rect,
54                           double scale_x, double scale_y,
55                           signed int trans_x, signed int trans_y) {
56     int size_x = rect->x_max - rect->x_min;
57     int size_y = rect->y_max - rect->y_min;
58     rect->x_max = rect->x_min + size_x * scale_x;
59     rect->y_max = rect->y_min + size_y * scale_y;
60     rect->x_min += trans_x * SWF_TWIPS;
61     rect->x_max += trans_x * SWF_TWIPS;
62     rect->y_min += trans_y * SWF_TWIPS;
63     rect->y_max += trans_y * SWF_TWIPS;
64     return 0;
65 }