00001 #ifndef _HAVE_MBPIXBUF_H
00002 #define _HAVE_MBPIXBUF_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "libmb/mbconfig.h"
00024
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 #include <string.h>
00028 #include <unistd.h>
00029 #include <signal.h>
00030
00031 #ifdef USE_PNG
00032 #include <png.h>
00033 #endif
00034
00035 #include <X11/Xlib.h>
00036 #include <X11/Xutil.h>
00037 #include <X11/Xatom.h>
00038
00039
00040
00041 #include <sys/ipc.h>
00042 #include <sys/shm.h>
00043 #include <sys/time.h>
00044 #include <X11/extensions/XShm.h>
00045 #include <X11/Xmd.h>
00046
00047 #ifdef USE_JPG
00048 #include "jpeglib.h"
00049 #endif
00050
00051
00052 #ifdef __cplusplus
00053 extern "C" {
00054 #endif
00055
00116 typedef enum
00117 {
00118 MBPIXBUF_TRANS_ROTATE_90,
00119 MBPIXBUF_TRANS_ROTATE_180,
00120 MBPIXBUF_TRANS_ROTATE_270,
00121 MBPIXBUF_TRANS_FLIP_VERT,
00122 MBPIXBUF_TRANS_FLIP_HORIZ
00123 } MBPixbufTransform;
00124
00125
00126 typedef struct _mb_pixbuf_col {
00127 int r, g, b;
00128 unsigned long pixel;
00129 } MBPixbufColor;
00130
00136 typedef struct MBPixbuf
00137 {
00138 Display *dpy;
00139 int scr;
00140 Visual *vis;
00141 Window root;
00142 int depth;
00143 Colormap root_cmap;
00144 int byte_order;
00145 int num_of_cols;
00146 GC gc;
00147 MBPixbufColor *palette;
00148 Bool have_shm;
00149
00150 int internal_bytespp;
00151
00152 } MBPixbuf;
00153
00160 typedef struct MBPixbufImage
00161 {
00162 int width;
00163 int height;
00164 unsigned char *rgba;
00165 int has_alpha;
00166 XImage *ximg;
00168 int internal_bytespp;
00169
00170 } MBPixbufImage;
00171
00172
00173
00179 #define mb_pixbuf_img_set_pixel(i, x, y, r, g, b) { \
00180 (i)->rgba[(((y)*(i)->width*4)+((x)*4))] = r; \
00181 (i)->rgba[(((y)*(i)->width*4)+((x)*4))+1] = g; \
00182 (i)->rgba[(((y)*(i)->width*4)+((x)*4))+2] = b; \
00183 (i)->rgba[(((y)*(i)->width*4)+((x)*4))+3] = 0; \
00184 }
00185
00191 #define mb_pixbuf_img_set_pixel_alpha(i, x, y, a) { \
00192 if ((i)->has_alpha) (i)->rgba[(((y)*(i)->width*(i->internal_bytespp+1))+((x)*(i->internal_bytespp+1)))+i->internal_bytespp] = a; \
00193 }
00194
00195
00196
00202 #define mb_pixbuf_img_get_width(image) (image)->width
00203
00209 #define mb_pixbuf_img_get_height(image) (image)->height
00210
00216 #define mb_pixbuf_get_depth(pb) (pb)->depth
00217
00223 #define mb_pixbuf_img_has_alpha(image) (image)->has_alpha
00224
00232 MBPixbuf*
00233 mb_pixbuf_new (Display *display,
00234 int screen);
00235
00236
00246 MBPixbuf *
00247 mb_pixbuf_new_extended(Display *dpy,
00248 int scr,
00249 Visual *vis,
00250 int depth);
00251
00257 void
00258 mb_pixbuf_destroy(MBPixbuf *pixbuf);
00259
00271 unsigned long
00272 mb_pixbuf_lookup_x_pixel(MBPixbuf *pixbuf, int r, int g, int b, int a);
00273
00274
00279 MBPixbufImage*
00280 mb_pixbuf_img_new (MBPixbuf *pb,
00281 int width,
00282 int height);
00283
00292 MBPixbufImage *
00293 mb_pixbuf_img_rgba_new(MBPixbuf *pixbuf,
00294 int width,
00295 int height);
00296
00305 MBPixbufImage *
00306 mb_pixbuf_img_rgb_new (MBPixbuf *pixbuf,
00307 int width,
00308 int height);
00309
00313 MBPixbufImage *
00314 mb_pixbuf_img_new_from_drawable (MBPixbuf *pixbuf,
00315 Drawable drawable,
00316 Drawable mask,
00317 int source_x,
00318 int source_y,
00319 int source_w,
00320 int source_h);
00321
00336 MBPixbufImage *
00337 mb_pixbuf_img_new_from_x_drawable (MBPixbuf *pixbuf,
00338 Drawable drawable,
00339 Drawable mask,
00340 int source_x,
00341 int source_y,
00342 int source_w,
00343 int source_h,
00344 Bool want_alpha);
00345
00346
00355 MBPixbufImage *
00356 mb_pixbuf_img_new_from_file (MBPixbuf *pixbuf,
00357 const char *filename);
00358
00369 MBPixbufImage *
00370 mb_pixbuf_img_new_from_data(MBPixbuf *pixbuf,
00371 const unsigned char *data,
00372 int width,
00373 int height,
00374 Bool has_alpha);
00375
00376
00387 MBPixbufImage *
00388 mb_pixbuf_img_new_from_int_data(MBPixbuf *pixbuf,
00389 const int *data,
00390 int width,
00391 int height);
00392
00399 void
00400 mb_pixbuf_img_free (MBPixbuf *pixbuf,
00401 MBPixbufImage *image);
00402
00412 void mb_pixbuf_img_render_to_drawable (MBPixbuf *pixbuf,
00413 MBPixbufImage *image,
00414 Drawable drw,
00415 int drw_x,
00416 int drw_y);
00417
00429 void
00430 mb_pixbuf_img_render_to_drawable_with_gc(MBPixbuf *pixbuf,
00431 MBPixbufImage *image,
00432 Drawable drw,
00433 int drw_x,
00434 int drw_y,
00435 GC gc);
00436
00437
00447 void mb_pixbuf_img_render_to_mask (MBPixbuf *pixbuf,
00448 MBPixbufImage *image,
00449 Drawable mask,
00450 int mask_x,
00451 int mask_y);
00452
00460 MBPixbufImage *mb_pixbuf_img_clone (MBPixbuf *pixbuf,
00461 MBPixbufImage *image);
00462
00473 void
00474 mb_pixbuf_img_fill(MBPixbuf *pixbuf,
00475 MBPixbufImage *image,
00476 int r,
00477 int g,
00478 int b,
00479 int a);
00480
00493 void
00494 mb_pixbuf_img_plot_pixel (MBPixbuf *pixbuf,
00495 MBPixbufImage *image,
00496 int x,
00497 int y,
00498 unsigned char r,
00499 unsigned char g,
00500 unsigned char b);
00501
00502
00515 void
00516 mb_pixbuf_img_get_pixel (MBPixbuf *pixbuf,
00517 MBPixbufImage *image,
00518 int x,
00519 int y,
00520 unsigned char *r,
00521 unsigned char *g,
00522 unsigned char *b,
00523 unsigned char *a
00524 );
00525
00533 unsigned char *
00534 mb_pixbuf_img_data (MBPixbuf *pixbuf,
00535 MBPixbufImage *image);
00536
00537
00538
00551 void
00552 mb_pixbuf_img_plot_pixel_with_alpha (MBPixbuf *pixbuf,
00553 MBPixbufImage *image,
00554 int x,
00555 int y,
00556 unsigned char r,
00557 unsigned char g,
00558 unsigned char b,
00559 unsigned char a);
00560
00575 void mb_pixbuf_img_copy (MBPixbuf *pixbuf,
00576 MBPixbufImage *dest,
00577 MBPixbufImage *src,
00578 int sx,
00579 int sy,
00580 int sw,
00581 int sh,
00582 int dx,
00583 int dy);
00584
00585
00599 void mb_pixbuf_img_copy_composite (MBPixbuf *pixbuf,
00600 MBPixbufImage *dest,
00601 MBPixbufImage *src,
00602 int sx,
00603 int sy,
00604 int sw,
00605 int sh,
00606 int dx,
00607 int dy);
00608
00623 void mb_pixbuf_img_copy_composite_with_alpha (MBPixbuf *pixbuf,
00624 MBPixbufImage *dest,
00625 MBPixbufImage *src,
00626 int sx, int sy,
00627 int sw, int sh,
00628 int dx, int dy,
00629 int overall_alpha );
00630
00635 void mb_pixbuf_img_composite (MBPixbuf *pb,
00636 MBPixbufImage *dest,
00637 MBPixbufImage *src,
00638 int dx,
00639 int dy);
00640
00650 MBPixbufImage *mb_pixbuf_img_scale (MBPixbuf *pixbuf,
00651 MBPixbufImage *image,
00652 int new_width,
00653 int new_height);
00654
00655
00656 MBPixbufImage *mb_pixbuf_img_scale_down (MBPixbuf *pixbuf,
00657 MBPixbufImage *image,
00658 int new_width,
00659 int new_height);
00660
00661
00662 MBPixbufImage *mb_pixbuf_img_scale_up (MBPixbuf *pixbuf,
00663 MBPixbufImage *image,
00664 int new_width,
00665 int new_height);
00666
00675 MBPixbufImage *
00676 mb_pixbuf_img_transform (MBPixbuf *pixbuf,
00677 MBPixbufImage *image,
00678 MBPixbufTransform transform);
00679
00680
00683 #ifdef __cplusplus
00684 }
00685 #endif
00686
00687
00688 #endif
00689
00690
00691