aboutsummaryrefslogtreecommitdiffstats
path: root/w3mimg/fb/fb_imlib2.c
blob: a5a6043ea7edc1728396b0d439e3efa8314c8f57 (plain) (blame)
ofshex dumpascii
0000 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /*******************************
0020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
0040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ***********./*******************
0060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
0080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 20 20 20 20 20 20 ***********************.........
00a0 20 20 20 20 20 20 20 20 66 62 5f 69 6d 6c 69 62 32 2e 63 20 30 2e 32 20 43 6f 70 79 72 69 67 68 ........fb_imlib2.c.0.2.Copyrigh
00c0 74 20 28 43 29 20 32 30 30 32 2c 20 68 69 74 6f 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a t.(C).2002,.hito..**************
00e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
0100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 ****************************/..#
0120 69 6e 63 6c 75 64 65 20 22 66 62 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 66 62 5f 69 6d 67 2e include."fb.h".#include."fb_img.
0140 68 22 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f 70 72 6d 28 49 4d 41 47 45 20 2a 69 h"..static.void.set_prm(IMAGE.*i
0160 6d 67 29 3b 0a 0a 49 4d 41 47 45 20 2a 66 62 5f 6c 6f 61 64 5f 69 6d 61 67 65 28 63 68 61 72 20 mg);..IMAGE.*fb_load_image(char.
0180 2a 66 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 77 2c 20 69 6e 74 20 68 29 0a 7b 0a 20 20 49 6d 6c *filename,.int.w,.int.h).{...Iml
01a0 69 62 5f 49 6d 61 67 65 20 69 6d 61 67 65 3b 0a 20 20 49 4d 41 47 45 20 2a 69 6d 67 3b 0a 0a 20 ib_Image.image;...IMAGE.*img;...
01c0 20 69 66 28 66 69 6c 65 6e 61 6d 65 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e .if(filename.==.NULL).....return
01e0 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6d 67 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 69 .NULL;....img.=.malloc(sizeof(*i
0200 6d 67 29 29 3b 0a 20 20 69 66 28 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 mg));...if(img.==.NULL).....retu
0220 72 6e 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6d 61 67 65 20 3d 20 69 6d 6c 69 62 5f 6c 6f 61 64 5f 69 rn.NULL;....image.=.imlib_load_i
0240 6d 61 67 65 28 66 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 69 66 28 69 6d 61 67 65 20 3d 3d 20 4e 55 mage(filename);...if(image.==.NU
0260 4c 4c 29 7b 0a 20 20 20 20 66 72 65 65 28 69 6d 67 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4e LL){.....free(img);.....return.N
0280 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 69 6d 6c 69 62 5f 63 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d ULL;...}....imlib_context_set_im
02a0 61 67 65 28 69 6d 61 67 65 29 3b 0a 0a 20 20 69 6d 67 2d 3e 69 6d 61 67 65 20 3d 20 69 6d 61 67 age(image);....img->image.=.imag
02c0 65 3b 0a 20 20 73 65 74 5f 70 72 6d 28 69 6d 67 29 3b 0a 0a 20 20 66 62 5f 72 65 73 69 7a 65 5f e;...set_prm(img);....fb_resize_
02e0 69 6d 61 67 65 28 69 6d 67 2c 20 77 2c 20 68 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 69 6d 67 3b image(img,.w,.h);....return.img;
0300 0a 7d 0a 0a 69 6e 74 20 66 62 5f 64 72 61 77 5f 69 6d 61 67 65 28 49 4d 41 47 45 20 2a 69 6d 67 .}..int.fb_draw_image(IMAGE.*img
0320 2c 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 20 69 6e 74 20 73 78 2c 20 69 6e 74 20 73 79 2c 20 ,.int.x,.int.y,.int.sx,.int.sy,.
0340 69 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 29 0a 7b 0a 20 20 69 6e 74 20 69 int.width,.int.height).{...int.i
0360 2c 20 6a 2c 20 72 2c 20 67 2c 20 62 2c 20 61 20 3d 20 30 2c 20 6f 66 66 73 65 74 3b 0a 0a 20 20 ,.j,.r,.g,.b,.a.=.0,.offset;....
0380 69 66 28 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 0a 20 if(img.==.NULL).....return.1;...
03a0 20 66 6f 72 28 6a 20 3d 20 73 79 3b 20 6a 20 3c 20 73 79 20 2b 20 68 65 69 67 68 74 20 26 26 20 .for(j.=.sy;.j.<.sy.+.height.&&.
03c0 6a 20 3c 20 69 6d 67 2d 3e 68 65 69 67 68 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 6f 66 66 73 65 j.<.img->height;.j++){.....offse
03e0 74 20 3d 20 6a 20 2a 20 69 6d 67 2d 3e 77 69 64 74 68 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 t.=.j.*.img->width;.....for(i.=.
0400 73 78 3b 20 69 20 3c 20 73 78 20 2b 20 77 69 64 74 68 20 26 26 20 69 20 3c 20 69 6d 67 2d 3e 77 sx;.i.<.sx.+.width.&&.i.<.img->w
0420 69 64 74 68 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 20 3d 20 28 69 6d 67 2d 3e 64 61 74 61 idth;.i++){.......a.=.(img->data
0440 5b 6f 66 66 73 65 74 20 2b 20 69 5d 20 3e 3e 20 32 34 29 20 26 20 30 78 30 30 30 30 30 30 66 66 [offset.+.i].>>.24).&.0x000000ff
0460 3b 0a 20 20 20 20 20 20 72 20 3d 20 28 69 6d 67 2d 3e 64 61 74 61 5b 6f 66 66 73 65 74 20 2b 20 ;.......r.=.(img->data[offset.+.
0480 69 5d 20 3e 3e 20 31 36 29 20 26 20 30 78 30 30 30 30 30 30 66 66 3b 0a 20 20 20 20 20 20 67 20 i].>>.16).&.0x000000ff;.......g.
04a0 3d 20 28 69 6d 67 2d 3e 64 61 74 61 5b 6f 66 66 73 65 74 20 2b 20 69 5d 20 3e 3e 20 20 38 29 20 =.(img->data[offset.+.i].>>..8).
04c0 26 20 30 78 30 30 30 30 30 30 66 66 3b 0a 20 20 20 20 20 20 62 20 3d 20 28 69 6d 67 2d 3e 64 61 &.0x000000ff;.......b.=.(img->da
04e0 74 61 5b 6f 66 66 73 65 74 20 2b 20 69 5d 20 20 20 20 20 20 29 20 26 20 30 78 30 30 30 30 30 30 ta[offset.+.i]......).&.0x000000
0500 66 66 3b 0a 0a 20 20 20 20 20 20 69 66 28 61 20 3d 3d 20 30 29 0a 09 66 62 5f 70 73 65 74 28 69 ff;........if(a.==.0)..fb_pset(i
0520 20 2b 20 78 20 2d 20 73 78 2c 20 6a 20 2b 20 79 20 2d 20 73 79 2c 20 62 67 5f 72 2c 20 62 67 5f .+.x.-.sx,.j.+.y.-.sy,.bg_r,.bg_
0540 67 2c 20 62 67 5f 62 29 3b 0a 20 20 20 20 20 20 65 6c 73 65 0a 09 66 62 5f 70 73 65 74 28 69 20 g,.bg_b);.......else..fb_pset(i.
0560 2b 20 78 20 2d 20 73 78 2c 20 6a 20 2b 20 79 20 2d 20 73 79 2c 20 72 2c 20 67 2c 20 62 29 3b 0a +.x.-.sx,.j.+.y.-.sy,.r,.g,.b);.
0580 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 69 6e 74 20 66 62 5f ....}...}...return.0;.}..int.fb_
05a0 72 65 73 69 7a 65 5f 69 6d 61 67 65 28 49 4d 41 47 45 20 2a 69 6d 67 2c 20 69 6e 74 20 77 69 64 resize_image(IMAGE.*img,.int.wid
05c0 74 68 2c 20 69 6e 74 20 68 65 69 67 68 74 29 0a 7b 0a 20 20 49 6d 6c 69 62 5f 49 6d 61 67 65 20 th,.int.height).{...Imlib_Image.
05e0 69 6d 61 67 65 3b 0a 0a 20 20 69 66 28 77 69 64 74 68 20 3c 20 31 20 7c 7c 20 68 65 69 67 68 74 image;....if(width.<.1.||.height
0600 20 3c 20 31 20 7c 7c 20 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 20 .<.1.||.img.==.NULL).....return.
0620 31 3b 0a 0a 20 20 69 66 28 77 69 64 74 68 20 3d 3d 20 69 6d 67 2d 3e 77 69 64 74 68 20 26 26 20 1;....if(width.==.img->width.&&.
0640 68 65 69 67 68 74 20 3d 3d 20 69 6d 67 2d 3e 68 65 69 67 68 74 29 0a 20 20 20 20 72 65 74 75 72 height.==.img->height).....retur
0660 6e 20 30 3b 0a 0a 20 20 69 6d 61 67 65 20 3d 20 69 6d 6c 69 62 5f 63 72 65 61 74 65 5f 63 72 6f n.0;....image.=.imlib_create_cro
0680 70 70 65 64 5f 73 63 61 6c 65 64 5f 69 6d 61 67 65 28 30 2c 20 30 2c 20 69 6d 67 2d 3e 77 69 64 pped_scaled_image(0,.0,.img->wid
06a0 74 68 2c 20 69 6d 67 2d 3e 68 65 69 67 68 74 2c 20 77 69 64 74 68 2c 20 68 65 69 67 68 74 29 3b th,.img->height,.width,.height);
06c0 0a 20 20 69 66 28 69 6d 61 67 65 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 20 ...if(image.==.NULL).....return.
06e0 31 3b 0a 0a 20 20 69 6d 6c 69 62 5f 63 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d 61 67 65 28 69 6d 1;....imlib_context_set_image(im
0700 67 2d 3e 69 6d 61 67 65 29 3b 0a 20 20 69 6d 6c 69 62 5f 66 72 65 65 5f 69 6d 61 67 65 28 29 3b g->image);...imlib_free_image();
0720 0a 0a 20 20 69 6d 67 2d 3e 69 6d 61 67 65 20 3d 20 69 6d 61 67 65 3b 0a 20 20 73 65 74 5f 70 72 ....img->image.=.image;...set_pr
0740 6d 28 69 6d 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 76 6f 69 64 20 66 62 5f 66 m(img);...return.0;.}..void.fb_f
0760 72 65 65 5f 69 6d 61 67 65 28 49 4d 41 47 45 20 2a 69 6d 67 29 0a 7b 0a 20 20 69 66 28 69 6d 67 ree_image(IMAGE.*img).{...if(img
0780 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 0a 20 20 69 6d 6c 69 62 5f 63 .==.NULL).....return;....imlib_c
07a0 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d 61 67 65 28 69 6d 67 2d 3e 69 6d 61 67 65 29 3b 0a 20 20 ontext_set_image(img->image);...
07c0 69 6d 6c 69 62 5f 66 72 65 65 5f 69 6d 61 67 65 28 29 3b 0a 20 20 66 72 65 65 28 69 6d 67 29 3b imlib_free_image();...free(img);
07e0 0a 7d 0a 0a 49 4d 41 47 45 20 2a 66 62 5f 64 75 70 5f 69 6d 61 67 65 28 49 4d 41 47 45 20 2a 69 .}..IMAGE.*fb_dup_image(IMAGE.*i
0800 6d 67 29 0a 7b 0a 20 20 49 6d 6c 69 62 5f 49 6d 61 67 65 20 69 6d 61 67 65 3b 0a 20 20 49 4d 41 mg).{...Imlib_Image.image;...IMA
0820 47 45 20 2a 6e 65 77 5f 69 6d 67 3b 0a 0a 20 20 69 66 28 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a GE.*new_img;....if(img.==.NULL).
0840 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 0a 20 20 6e 65 77 5f 69 6d 67 20 3d 20 6d 61 ....return.NULL;....new_img.=.ma
0860 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 69 6d 67 29 29 3b 0a 20 20 69 66 28 6e 65 77 5f 69 6d 67 lloc(sizeof(*img));...if(new_img
0880 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6d .==.NULL).....return.NULL;....im
08a0 6c 69 62 5f 63 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d 61 67 65 28 69 6d 67 2d 3e 69 6d 61 67 65 lib_context_set_image(img->image
08c0 29 3b 0a 20 20 69 6d 61 67 65 20 3d 20 69 6d 6c 69 62 5f 63 6c 6f 6e 65 5f 69 6d 61 67 65 28 29 );...image.=.imlib_clone_image()
08e0 3b 0a 0a 20 20 69 66 28 69 6d 61 67 65 20 3d 3d 20 4e 55 4c 4c 29 7b 0a 20 20 20 20 66 72 65 65 ;....if(image.==.NULL){.....free
0900 28 6e 65 77 5f 69 6d 67 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 7d 0a (new_img);.....return.NULL;...}.
0920 0a 20 20 6e 65 77 5f 69 6d 67 2d 3e 69 6d 61 67 65 20 3d 20 69 6d 61 67 65 3b 0a 20 20 73 65 74 ...new_img->image.=.image;...set
0940 5f 70 72 6d 28 6e 65 77 5f 69 6d 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 6e 65 77 5f 69 6d 67 3b _prm(new_img);...return.new_img;
0960 0a 7d 0a 0a 69 6e 74 20 66 62 5f 72 6f 74 61 74 65 5f 69 6d 61 67 65 28 49 4d 41 47 45 20 2a 69 .}..int.fb_rotate_image(IMAGE.*i
0980 6d 67 2c 20 69 6e 74 20 61 6e 67 6c 65 29 0a 7b 0a 20 20 69 6e 74 20 6f 72 69 65 6e 74 61 74 69 mg,.int.angle).{...int.orientati
09a0 6f 6e 3b 0a 0a 20 20 69 66 28 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 on;....if(img.==.NULL).....retur
09c0 6e 20 31 3b 0a 0a 20 20 69 6d 6c 69 62 5f 63 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d 61 67 65 28 n.1;....imlib_context_set_image(
09e0 69 6d 67 2d 3e 69 6d 61 67 65 29 3b 0a 0a 20 20 69 66 28 61 6e 67 6c 65 20 3d 3d 20 39 30 29 7b img->image);....if(angle.==.90){
0a00 0a 20 20 20 20 6f 72 69 65 6e 74 61 74 69 6f 6e 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 .....orientation.=.1;...}else.if
0a20 28 61 6e 67 6c 65 20 3d 3d 20 2d 39 30 29 7b 0a 20 20 20 20 6f 72 69 65 6e 74 61 74 69 6f 6e 20 (angle.==.-90){.....orientation.
0a40 3d 20 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a =.3;...}else{.....return.1;...}.
0a60 0a 20 20 69 6d 6c 69 62 5f 69 6d 61 67 65 5f 6f 72 69 65 6e 74 61 74 65 28 6f 72 69 65 6e 74 61 ...imlib_image_orientate(orienta
0a80 74 69 6f 6e 29 3b 0a 20 20 73 65 74 5f 70 72 6d 28 69 6d 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 tion);...set_prm(img);...return.
0aa0 30 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f 70 72 6d 28 49 4d 41 47 45 20 0;.}..static.void.set_prm(IMAGE.
0ac0 2a 69 6d 67 29 0a 7b 0a 20 20 69 66 28 69 6d 67 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 *img).{...if(img.==.NULL).....re
0ae0 74 75 72 6e 3b 0a 0a 20 20 69 6d 6c 69 62 5f 63 6f 6e 74 65 78 74 5f 73 65 74 5f 69 6d 61 67 65 turn;....imlib_context_set_image
0b00 28 69 6d 67 2d 3e 69 6d 61 67 65 29 3b 0a 20 20 69 6d 67 2d 3e 64 61 74 61 20 20 20 3d 20 69 6d (img->image);...img->data...=.im
0b20 6c 69 62 5f 69 6d 61 67 65 5f 67 65 74 5f 64 61 74 61 5f 66 6f 72 5f 72 65 61 64 69 6e 67 5f 6f lib_image_get_data_for_reading_o
0b40 6e 6c 79 28 29 3b 0a 20 20 69 6d 67 2d 3e 77 69 64 74 68 20 20 3d 20 69 6d 6c 69 62 5f 69 6d 61 nly();...img->width..=.imlib_ima
0b60 67 65 5f 67 65 74 5f 77 69 64 74 68 28 29 3b 0a 20 20 69 6d 67 2d 3e 68 65 69 67 68 74 20 3d 20 ge_get_width();...img->height.=.
0b80 69 6d 6c 69 62 5f 69 6d 61 67 65 5f 67 65 74 5f 68 65 69 67 68 74 28 29 3b 0a 7d 0a 00 0a imlib_image_get_height();.}...