* acinclude.m4 (AC_W3M_IMAGE): add USE_GTK2 add --with-imagelib=gtk2 * aclocal.m4 config.guess config.sub configure: regen * config.h.in: add USE_GTK2 * w3mimg/fb/fb_gdkpixbuf.c: support USE_GTK2 * w3mimg/fb/fb_img.h: add fb_image_init() * w3mimg/fb/fb_imlib2.h: fb_image_init() stub * w3mimg/fb/fb_w3mimg.c: call fb_image_init() * w3mimg/x11/x11_w3mimg.c: support USE_GTK2 From: Fumitoshi UKAI <ukai@debian.or.jp>
		
			
				
	
	
		
			133 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* $Id: fb_imlib2.c,v 1.10 2004/08/04 17:32:28 ukai Exp $ */
 | 
						|
/**************************************************************************
 | 
						|
                fb_imlib2.c 0.3 Copyright (C) 2002, hito
 | 
						|
 **************************************************************************/
 | 
						|
 | 
						|
#include <X11/Xlib.h>
 | 
						|
#include <Imlib2.h>
 | 
						|
#include "fb.h"
 | 
						|
#include "fb_img.h"
 | 
						|
 | 
						|
static void draw(FB_IMAGE * img, Imlib_Image image);
 | 
						|
static Imlib_Image resize_image(Imlib_Image image, int width, int height);
 | 
						|
 | 
						|
void
 | 
						|
fb_image_init()
 | 
						|
{
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
get_image_size(char *filename, int *w, int *h)
 | 
						|
{
 | 
						|
    Imlib_Image image;
 | 
						|
 | 
						|
    if (filename == NULL)
 | 
						|
	return 1;
 | 
						|
 | 
						|
    image = imlib_load_image(filename);
 | 
						|
    if (image == NULL)
 | 
						|
	return 1;
 | 
						|
 | 
						|
    imlib_context_set_image(image);
 | 
						|
    *w = imlib_image_get_width();
 | 
						|
    *h = imlib_image_get_height();
 | 
						|
    imlib_free_image();
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
FB_IMAGE **
 | 
						|
fb_image_load(char *filename, int w, int h, int n)
 | 
						|
{
 | 
						|
    Imlib_Image image;
 | 
						|
    FB_IMAGE **frame;
 | 
						|
 | 
						|
    if (filename == NULL)
 | 
						|
	return NULL;
 | 
						|
 | 
						|
    image = imlib_load_image(filename);
 | 
						|
    if (image == NULL)
 | 
						|
	return NULL;
 | 
						|
 | 
						|
    image = resize_image(image, w, h);
 | 
						|
    if (image == NULL)
 | 
						|
	return NULL;
 | 
						|
 | 
						|
    imlib_context_set_image(image);
 | 
						|
 | 
						|
    w = imlib_image_get_width();
 | 
						|
    h = imlib_image_get_height();
 | 
						|
 | 
						|
    frame = fb_frame_new(w, h, 1);
 | 
						|
 | 
						|
    if (frame == NULL) {
 | 
						|
	imlib_free_image();
 | 
						|
	return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    draw(frame[0], image);
 | 
						|
 | 
						|
    imlib_free_image();
 | 
						|
 | 
						|
    return frame;
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
draw(FB_IMAGE * img, Imlib_Image image)
 | 
						|
{
 | 
						|
    int i, j, r, g, b, a = 0, offset;
 | 
						|
    DATA32 *data;
 | 
						|
 | 
						|
    if (img == NULL)
 | 
						|
	return;
 | 
						|
 | 
						|
    imlib_context_set_image(image);
 | 
						|
    data = imlib_image_get_data_for_reading_only();
 | 
						|
 | 
						|
    for (j = 0; j < img->height; j++) {
 | 
						|
	offset = img->width * j;
 | 
						|
	for (i = 0; i < img->width; i++) {
 | 
						|
	    a = (data[offset + i] >> 24) & 0x000000ff;
 | 
						|
	    r = (data[offset + i] >> 16) & 0x000000ff;
 | 
						|
	    g = (data[offset + i] >> 8) & 0x000000ff;
 | 
						|
	    b = (data[offset + i]) & 0x000000ff;
 | 
						|
 | 
						|
	    if (a == 0) {
 | 
						|
		fb_image_pset(img, i, j, bg_r, bg_g, bg_b);
 | 
						|
	    }
 | 
						|
	    else {
 | 
						|
		fb_image_pset(img, i, j, r, g, b);
 | 
						|
	    }
 | 
						|
	}
 | 
						|
    }
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
static Imlib_Image
 | 
						|
resize_image(Imlib_Image image, int width, int height)
 | 
						|
{
 | 
						|
    Imlib_Image resized_image;
 | 
						|
    int w, h;
 | 
						|
 | 
						|
    if (image == NULL)
 | 
						|
	return NULL;
 | 
						|
 | 
						|
    imlib_context_set_image(image);
 | 
						|
    w = imlib_image_get_width();
 | 
						|
    h = imlib_image_get_height();
 | 
						|
 | 
						|
    if (width < 1 || height < 1)
 | 
						|
	return image;
 | 
						|
 | 
						|
    if (w == width && h == height)
 | 
						|
	return image;
 | 
						|
 | 
						|
    resized_image =
 | 
						|
	imlib_create_cropped_scaled_image(0, 0, w, h, width, height);
 | 
						|
 | 
						|
    imlib_free_image();
 | 
						|
 | 
						|
    return resized_image;
 | 
						|
}
 |