aboutsummaryrefslogtreecommitdiffstats
path: root/w3mimg/fb/fb_gdkpixbuf.c
blob: 3faeadca4a46f7629a90272bdf675f2a9e740d9e (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 67 64 6b 70 69 78 62 75 66 2e 63 20 30 2e 32 20 43 6f 70 79 72 ........fb_gdkpixbuf.c.0.2.Copyr
00c0 69 67 68 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 ight.(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 2a 2a 2a 2f *******************************/
0120 0a 0a 23 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 ..#include."fb.h".#include."fb_i
0140 6d 67 2e 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 mg.h"..static.void.set_prm(IMAGE
0160 20 2a 69 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 .*img);..IMAGE.*fb_load_image(ch
0180 61 72 20 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 ar.*filename,.int.w,.int.h).{...
01a0 47 64 6b 50 69 78 62 75 66 20 2a 70 69 78 62 75 66 3b 0a 20 20 49 4d 41 47 45 20 2a 69 6d 67 3b GdkPixbuf.*pixbuf;...IMAGE.*img;
01c0 0a 0a 20 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 ....if(filename.==.NULL).....ret
01e0 75 72 6e 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 urn.NULL;....img.=.malloc(sizeof
0200 28 2a 69 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 (*img));...if(img.==.NULL).....r
0220 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 0a 20 20 70 69 78 62 75 66 20 3d 20 67 64 6b 5f 70 69 eturn.NULL;......pixbuf.=.gdk_pi
0240 78 62 75 66 5f 6e 65 77 5f 66 72 6f 6d 5f 66 69 6c 65 28 66 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 xbuf_new_from_file(filename);...
0260 69 66 28 70 69 78 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 7b 0a 20 20 20 20 66 72 65 65 28 69 6d 67 if(pixbuf.==.NULL){.....free(img
0280 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 69 6d 67 2d 3e );.....return.NULL;...}....img->
02a0 70 69 78 62 75 66 20 3d 20 70 69 78 62 75 66 3b 0a 20 20 73 65 74 5f 70 72 6d 28 69 6d 67 29 3b pixbuf.=.pixbuf;...set_prm(img);
02c0 0a 0a 20 20 66 62 5f 72 65 73 69 7a 65 5f 69 6d 61 67 65 28 69 6d 67 2c 20 77 2c 20 68 29 3b 0a ....fb_resize_image(img,.w,.h);.
02e0 0a 20 20 72 65 74 75 72 6e 20 69 6d 67 3b 0a 7d 0a 0a 69 6e 74 20 66 62 5f 64 72 61 77 5f 69 6d ...return.img;.}..int.fb_draw_im
0300 61 67 65 28 49 4d 41 47 45 20 2a 69 6d 67 2c 20 69 6e 74 20 78 2c 20 69 6e 74 20 79 2c 20 69 6e age(IMAGE.*img,.int.x,.int.y,.in
0320 74 20 73 78 2c 20 69 6e 74 20 73 79 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 69 6e 74 20 68 65 69 t.sx,.int.sy,.int.width,.int.hei
0340 67 68 74 29 0a 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 72 2c 20 67 2c 20 62 2c 20 6f 66 66 73 ght).{...int.i,.j,.r,.g,.b,.offs
0360 65 74 2c 20 62 70 70 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 et,.bpp;....if(img.==.NULL).....
0380 72 65 74 75 72 6e 20 31 3b 0a 0a 20 20 62 70 70 20 3d 20 69 6d 67 2d 3e 72 6f 77 73 74 72 69 64 return.1;....bpp.=.img->rowstrid
03a0 65 20 2f 20 69 6d 67 2d 3e 77 69 64 74 68 3b 0a 20 20 66 6f 72 28 6a 20 3d 20 73 79 3b 20 6a 20 e./.img->width;...for(j.=.sy;.j.
03c0 3c 20 73 79 20 2b 20 68 65 69 67 68 74 20 26 26 20 6a 20 3c 20 69 6d 67 2d 3e 68 65 69 67 68 74 <.sy.+.height.&&.j.<.img->height
03e0 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 6f 66 66 73 65 74 20 3d 20 6a 20 2a 20 69 6d 67 2d 3e 72 6f ;.j++){.....offset.=.j.*.img->ro
0400 77 73 74 72 69 64 65 20 2b 20 62 70 70 20 2a 20 73 78 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 wstride.+.bpp.*.sx;.....for(i.=.
0420 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
0440 69 64 74 68 3b 20 69 2b 2b 2c 20 6f 66 66 73 65 74 20 2b 3d 20 62 70 70 29 7b 0a 20 20 20 20 20 idth;.i++,.offset.+=.bpp){......
0460 20 72 20 3d 20 69 6d 67 2d 3e 70 69 78 65 6c 73 5b 6f 66 66 73 65 74 5d 3b 0a 20 20 20 20 20 20 .r.=.img->pixels[offset];.......
0480 67 20 3d 20 69 6d 67 2d 3e 70 69 78 65 6c 73 5b 6f 66 66 73 65 74 20 2b 20 31 5d 3b 0a 20 20 20 g.=.img->pixels[offset.+.1];....
04a0 20 20 20 62 20 3d 20 69 6d 67 2d 3e 70 69 78 65 6c 73 5b 6f 66 66 73 65 74 20 2b 20 32 5d 3b 0a ...b.=.img->pixels[offset.+.2];.
04c0 20 20 20 20 20 20 69 66 28 69 6d 67 2d 3e 61 6c 70 68 61 20 26 26 20 69 6d 67 2d 3e 70 69 78 65 ......if(img->alpha.&&.img->pixe
04e0 6c 73 5b 6f 66 66 73 65 74 20 2b 20 33 5d 20 3d 3d 20 30 29 0a 09 66 62 5f 70 73 65 74 28 69 20 ls[offset.+.3].==.0)..fb_pset(i.
0500 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 67 +.x.-.sx,.j.+.y.-.sy,.bg_r,.bg_g
0520 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 2b ,.bg_b);.......else..fb_pset(i.+
0540 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 20 .x.-.sx,.j.+.y.-.sy,.r,.g,.b);..
0560 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 72 ...}...}...return.0;.}..int.fb_r
0580 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 74 esize_image(IMAGE.*img,.int.widt
05a0 68 2c 20 69 6e 74 20 68 65 69 67 68 74 29 0a 7b 0a 20 20 47 64 6b 50 69 78 62 75 66 20 2a 70 69 h,.int.height).{...GdkPixbuf.*pi
05c0 78 62 75 66 3b 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 20 3c xbuf;...if(width.<.1.||.height.<
05e0 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 31 3b .1.||.img.==.NULL).....return.1;
0600 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 68 65 ....if(width.==.img->width.&&.he
0620 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 6e 20 ight.==.img->height).....return.
0640 30 3b 0a 0a 20 20 70 69 78 62 75 66 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f 73 63 61 6c 65 5f 0;....pixbuf.=.gdk_pixbuf_scale_
0660 73 69 6d 70 6c 65 28 69 6d 67 2d 3e 70 69 78 62 75 66 2c 20 77 69 64 74 68 2c 20 68 65 69 67 68 simple(img->pixbuf,.width,.heigh
0680 74 2c 20 47 44 4b 5f 49 4e 54 45 52 50 5f 48 59 50 45 52 29 3b 0a 20 20 69 66 28 70 69 78 62 75 t,.GDK_INTERP_HYPER);...if(pixbu
06a0 66 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 67 64 6b 5f 70 f.==.NULL).....return.1;...gdk_p
06c0 69 78 62 75 66 5f 66 69 6e 61 6c 69 7a 65 28 69 6d 67 2d 3e 70 69 78 62 75 66 29 3b 0a 0a 20 20 ixbuf_finalize(img->pixbuf);....
06e0 69 6d 67 2d 3e 70 69 78 62 75 66 20 3d 20 70 69 78 62 75 66 3b 0a 20 20 73 65 74 5f 70 72 6d 28 img->pixbuf.=.pixbuf;...set_prm(
0700 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 72 65 img);...return.0;.}..void.fb_fre
0720 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 20 3d e_image(IMAGE.*img).{...if(img.=
0740 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 0a 20 20 67 64 6b 5f 70 69 78 62 75 =.NULL).....return;....gdk_pixbu
0760 66 5f 66 69 6e 61 6c 69 7a 65 28 69 6d 67 2d 3e 70 69 78 62 75 66 29 3b 0a 20 20 66 72 65 65 28 f_finalize(img->pixbuf);...free(
0780 69 6d 67 29 3b 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 img);.}..IMAGE.*fb_dup_image(IMA
07a0 47 45 20 2a 69 6d 67 29 0a 7b 0a 20 20 47 64 6b 50 69 78 62 75 66 20 2a 70 69 78 62 75 66 3b 0a GE.*img).{...GdkPixbuf.*pixbuf;.
07c0 20 20 49 4d 41 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 ..IMAGE.*new_img;....if(img.==.N
07e0 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 6e 65 77 5f 69 6d 67 ULL).....return.NULL;....new_img
0800 20 3d 20 6d 61 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 .=.malloc(sizeof(*img));...if(ne
0820 77 5f 69 6d 67 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 w_img.==.NULL).....return.NULL;.
0840 0a 20 20 70 69 78 62 75 66 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f 63 6f 70 79 28 69 6d 67 2d ...pixbuf.=.gdk_pixbuf_copy(img-
0860 3e 70 69 78 62 75 66 29 3b 0a 20 20 69 66 28 70 69 78 62 75 66 20 3d 3d 20 4e 55 4c 4c 29 7b 0a >pixbuf);...if(pixbuf.==.NULL){.
0880 20 20 20 20 66 72 65 65 28 6e 65 77 5f 69 6d 67 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4e 55 ....free(new_img);.....return.NU
08a0 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 6e 65 77 5f 69 6d 67 2d 3e 70 69 78 62 75 66 20 3d 20 70 69 78 LL;...}....new_img->pixbuf.=.pix
08c0 62 75 66 3b 0a 20 20 73 65 74 5f 70 72 6d 28 6e 65 77 5f 69 6d 67 29 3b 0a 20 20 72 65 74 75 72 buf;...set_prm(new_img);...retur
08e0 6e 20 6e 65 77 5f 69 6d 67 3b 0a 7d 0a 0a 69 6e 74 20 66 62 5f 72 6f 74 61 74 65 5f 69 6d 61 67 n.new_img;.}..int.fb_rotate_imag
0900 65 28 49 4d 41 47 45 20 2a 69 6d 67 2c 20 69 6e 74 20 61 6e 67 6c 65 29 0a 7b 0a 20 20 72 65 74 e(IMAGE.*img,.int.angle).{...ret
0920 75 72 6e 20 31 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 urn.1;.}..static.void.set_prm(IM
0940 41 47 45 20 2a 69 6d 67 29 0a 7b 0a 20 20 47 64 6b 50 69 78 62 75 66 20 2a 70 69 78 62 75 66 3b AGE.*img).{...GdkPixbuf.*pixbuf;
0960 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 6e 3b 0a ....if(img.==.NULL).....return;.
0980 20 20 70 69 78 62 75 66 20 3d 20 69 6d 67 2d 3e 70 69 78 62 75 66 3b 0a 0a 20 20 69 6d 67 2d 3e ..pixbuf.=.img->pixbuf;....img->
09a0 70 69 78 65 6c 73 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f 67 65 74 5f 70 69 78 65 6c 73 28 70 pixels.=.gdk_pixbuf_get_pixels(p
09c0 69 78 62 75 66 29 3b 0a 20 20 69 6d 67 2d 3e 77 69 64 74 68 20 20 3d 20 67 64 6b 5f 70 69 78 62 ixbuf);...img->width..=.gdk_pixb
09e0 75 66 5f 67 65 74 5f 77 69 64 74 68 28 70 69 78 62 75 66 29 3b 0a 20 20 69 6d 67 2d 3e 68 65 69 uf_get_width(pixbuf);...img->hei
0a00 67 68 74 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f 67 65 74 5f 68 65 69 67 68 74 28 70 69 78 62 ght.=.gdk_pixbuf_get_height(pixb
0a20 75 66 29 3b 0a 20 20 69 6d 67 2d 3e 61 6c 70 68 61 20 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f uf);...img->alpha..=.gdk_pixbuf_
0a40 67 65 74 5f 68 61 73 5f 61 6c 70 68 61 28 70 69 78 62 75 66 29 3b 0a 20 20 69 6d 67 2d 3e 72 6f get_has_alpha(pixbuf);...img->ro
0a60 77 73 74 72 69 64 65 20 3d 20 67 64 6b 5f 70 69 78 62 75 66 5f 67 65 74 5f 72 6f 77 73 74 72 69 wstride.=.gdk_pixbuf_get_rowstri
0a80 64 65 28 70 69 78 62 75 66 29 3b 0a 7d 0a 00 0a de(pixbuf);.}...