1317 lines
38 KiB
C
1317 lines
38 KiB
C
#include <X11/Xlib.h>
|
|
#include <X11/extensions/XShm.h>
|
|
#include <X11/Xutil.h>
|
|
#include <X11/extensions/shape.h>
|
|
#include <X11/Xatom.h>
|
|
#include <X11/Xos.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <math.h>
|
|
#include <locale.h>
|
|
|
|
/*
|
|
#include <sys/time.h>
|
|
#include "common.h"
|
|
#include "image.h"
|
|
#include "rend.h"
|
|
#include "rgba.h"
|
|
#include "ximage.h"
|
|
#include "color.h"
|
|
*/
|
|
#include "Imlib2.h"
|
|
|
|
Display *disp;
|
|
Window win;
|
|
Visual *vis;
|
|
Colormap cm;
|
|
int depth;
|
|
|
|
void progress(Imlib_Image *im, char percent, int update_x, int update_y,
|
|
int update_w, int update_h);
|
|
|
|
void
|
|
progress(Imlib_Image *im, char percent,
|
|
int update_x, int update_y,
|
|
int update_w, int update_h)
|
|
{
|
|
imlib_context_set_display(disp);
|
|
imlib_context_set_visual(vis);
|
|
imlib_context_set_colormap(cm);
|
|
imlib_context_set_drawable(win);
|
|
imlib_context_set_dither(0);
|
|
imlib_context_set_blend(0);
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
imlib_context_set_image(im);
|
|
imlib_render_image_part_on_drawable_at_size(update_x, update_y,
|
|
update_w, update_h,
|
|
update_x, update_y,
|
|
update_w, update_h);
|
|
}
|
|
|
|
int main (int argc, char **argv)
|
|
{
|
|
int i, j;
|
|
Imlib_Image *im = NULL;
|
|
int sec1, usec1, sec2, usec2;
|
|
int pixels = 0;
|
|
struct timeval timev;
|
|
double sec;
|
|
char *file = NULL;
|
|
char *fon = NULL, *str = NULL;
|
|
|
|
int root = 0;
|
|
int scale = 0;
|
|
int w = 20;
|
|
int h = 20;
|
|
int aa = 0;
|
|
int dith = 0;
|
|
int loop = 0;
|
|
int blend = 1;
|
|
int interactive = 1;
|
|
int blendtest = 0;
|
|
int filter = 0;
|
|
int pol = 0;
|
|
int rotate = 0;
|
|
int rottest = 0;
|
|
int scaleup = 0;
|
|
int scaleboth = 0;
|
|
int origone = 0;
|
|
int bump_map_to_point = 0;
|
|
Imlib_Color_Modifier colormod = 0;
|
|
ImlibPolygon poly, poly2, poly3;
|
|
int textdir = IMLIB_TEXT_TO_RIGHT;
|
|
int xfdtest = 0;
|
|
int xfdcachetest = 0;
|
|
char *xfdfname = NULL;
|
|
int xfdloop = 1;
|
|
|
|
/* now we'll set the locale */
|
|
setlocale(LC_ALL, "");
|
|
if (!XSupportsLocale())
|
|
setlocale(LC_ALL, "C");
|
|
XSetLocaleModifiers("");
|
|
setlocale(LC_ALL, NULL);
|
|
|
|
/**
|
|
* Parse all the command line arguments
|
|
*/
|
|
if ((argc > 1) && (!strcmp(argv[1], "-help")))
|
|
{
|
|
printf ("Imlib2 program test. (Imlib v2.0.0.4)\n");
|
|
printf ("usage: imlib2 [options] [file]\n");
|
|
printf ("options are:\n");
|
|
printf ("-help\t\tDisplays this help.\n");
|
|
printf ("-root\t\tDraw in the root window.\n");
|
|
printf ("-smooth\t\tWhen scaling images scale with anti-aliasing.\n");
|
|
printf ("-up\t\tWhen doing scal test scale up, not down.\n");
|
|
printf ("-both\t\tScale horizontally AND vertically in scale test.\n");
|
|
printf ("-orig\t\tKeep original width and height in each pass of scale test.\n");
|
|
printf ("-blend\t\tBlending test.\n");
|
|
printf ("-dither\t\tTurn dithering on for depths < 24bpp\n");
|
|
printf ("-colormod <r> <g> <b> <a>\t\tSet up color mod tables\n");
|
|
printf ("-scale\t\tScale test.\n");
|
|
printf ("-noloop\t\tDont loop - timing test.\n");
|
|
printf ("-rotate\t\tAlso rotate background image with mouse in interative test.\n");
|
|
printf ("-size <w> <h>\t\tScale from w x h down in scaling test.\n"); // require parameters w / h
|
|
printf ("-maxcolors <n>\t\tLimit color allocation count to n colors.\n"); // require parameter nb colors
|
|
printf ("-text\t\tDisplays the text following this option. Need a loaded font.\n");
|
|
printf ("-font\t\tLoads a font. The parameter must follow the police_name/size format. Example: loading the grunge font at size 18 is : grunge/18.\n\t\tThe XFD font also can be specified. Ex. 'notepad/32,-*--24-*'.\n");
|
|
printf ("-poly\t\tPerforms a poly test\n");
|
|
printf ("The following options requires a file to work properly.\n");
|
|
printf ("-textdir\t\tText Direction. 0: L to R, 1: R to L\n");
|
|
printf (" 2: U to D, 3: D to U, 4: angle\n");
|
|
printf ("-xfdtest\t\tXFD Font queue test.\n");
|
|
printf ("-xfdcachetest <f> [<l>]\t\tXFD tFont cache test.\n\t\tThe file f is drawn l times\n");
|
|
printf ("-blast\t\tDisplays the file.\n");
|
|
printf ("-loop\t\tScales down the image.\n");
|
|
printf ("-blendtest\tPerforms a blending test on the file.\n");
|
|
printf ("-rotatetest\tPerforms a rotate test on the file.\n");
|
|
printf ("-filter\t\tPerforms filtering. Possible filters are,\n\t\t\t1:Blur filter, 2:Sharpen filter, 3:Color blur filter, \n\t\t\t4:Emboss filter, 5:Grayscale filter, 6:Saturation filter,\n\t\t\t7:Edge detection filter.\n");
|
|
printf ("-bmp2pt\t\tPerformas Bump Mapping to a point\n");
|
|
return 0;
|
|
}
|
|
|
|
for (i = 1; i < argc; i++)
|
|
{
|
|
if (!strcmp(argv[i], "-root"))
|
|
root = 1;
|
|
else if (!strcmp(argv[i], "-smooth"))
|
|
aa = 1;
|
|
else if (!strcmp(argv[i], "-blast"))
|
|
interactive = 0;
|
|
else if (!strcmp(argv[i], "-loop"))
|
|
{
|
|
interactive = 0;
|
|
loop = 1;
|
|
}
|
|
else if (!strcmp(argv[i], "-up"))
|
|
scaleup = 1;
|
|
else if (!strcmp(argv[i], "-both"))
|
|
scaleboth = 1;
|
|
else if (!strcmp(argv[i], "-bmp2pt"))
|
|
bump_map_to_point = 1;
|
|
else if (!strcmp(argv[i], "-orig"))
|
|
origone = 1;
|
|
else if (!strcmp(argv[i], "-blend"))
|
|
blend = 1;
|
|
else if (!strcmp(argv[i], "-poly"))
|
|
pol = 1;
|
|
else if (!strcmp(argv[i], "-blendtest"))
|
|
{
|
|
blendtest = 1;
|
|
interactive = 0;
|
|
}
|
|
else if (!strcmp(argv[i], "-colormod"))
|
|
{
|
|
DATA8 rt[256], gt[256], bt[256], at[256];
|
|
double rm, gm, bm, am;
|
|
int j;
|
|
/*\ Setup color mod tables \*/
|
|
if (!colormod) colormod = imlib_create_color_modifier();
|
|
imlib_context_set_color_modifier(colormod);
|
|
rm = strtod(argv[++i], 0);
|
|
gm = strtod(argv[++i], 0);
|
|
bm = strtod(argv[++i], 0);
|
|
am = strtod(argv[++i], 0);
|
|
imlib_get_color_modifier_tables(rt, gt, bt, at);
|
|
for (j = 0x100; --j >= 0; ) {
|
|
rt[j] = ((double)rt[j]) * rm;
|
|
gt[j] = ((double)gt[j]) * gm;
|
|
bt[j] = ((double)bt[j]) * bm;
|
|
at[j] = ((double)at[j]) * am;
|
|
}
|
|
imlib_set_color_modifier_tables(rt, gt, bt, at);
|
|
}
|
|
else if (!strcmp(argv[i], "-dither"))
|
|
dith = 1;
|
|
else if (!strcmp(argv[i], "-scale"))
|
|
scale = 1;
|
|
else if (!strcmp(argv[i], "-noloop"))
|
|
loop = 0;
|
|
else if (!strcmp(argv[i], "-size"))
|
|
{
|
|
i++;
|
|
w = atoi(argv[i++]);
|
|
h = atoi(argv[i]);
|
|
}
|
|
else if (!strcmp(argv[i], "-maxcolors"))
|
|
{
|
|
i++;
|
|
imlib_set_color_usage(atoi(argv[i]));
|
|
}
|
|
else if (!strcmp(argv[i], "-font"))
|
|
{
|
|
i++;
|
|
fon = argv[i];
|
|
}
|
|
else if (!strcmp(argv[i], "-text"))
|
|
{
|
|
i++;
|
|
str = argv[i];
|
|
}
|
|
else if (!strcmp(argv[i], "-xfdtest"))
|
|
xfdtest = 1;
|
|
else if (!strcmp(argv[i], "-xfdcachetest"))
|
|
{
|
|
xfdcachetest = 1;
|
|
i++;
|
|
xfdfname = argv[i];
|
|
i++;
|
|
if (i < argc)
|
|
xfdloop = atoi(argv[i]);
|
|
}
|
|
else if (!strcmp(argv[i], "-textdir"))
|
|
{
|
|
i++;
|
|
textdir = atoi(argv[i]);
|
|
}
|
|
else if (!strcmp(argv[i], "-rotate"))
|
|
rotate = 1;
|
|
else if (!strcmp(argv[i], "-filter"))
|
|
{
|
|
filter = atoi(argv[++i]);
|
|
interactive = 0;
|
|
}
|
|
else if (!strcmp(argv[i], "-rotatetest"))
|
|
{
|
|
rottest = 1;
|
|
interactive = 0;
|
|
}
|
|
else
|
|
file = argv[i];
|
|
}
|
|
|
|
/**
|
|
* Initialization according to options
|
|
*/
|
|
printf("init\n");
|
|
|
|
/**
|
|
* First tests to determine which rendering task to perform
|
|
*/
|
|
if (!blendtest)
|
|
{
|
|
disp = XOpenDisplay(NULL);
|
|
vis = DefaultVisual(disp, DefaultScreen(disp));
|
|
depth = DefaultDepth(disp, DefaultScreen(disp));
|
|
cm = DefaultColormap(disp, DefaultScreen(disp));
|
|
/* nasty - using imlib internal function.. but it makes benchmarks fair */
|
|
if (!interactive)
|
|
__imlib_SetMaxXImageCount(disp, 3);
|
|
if (root)
|
|
win = DefaultRootWindow(disp);
|
|
else
|
|
{
|
|
win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 10, 10, 0, 0, 0);
|
|
XSelectInput(disp, win, ButtonPressMask | ButtonReleaseMask |
|
|
ButtonMotionMask | PointerMotionMask | ExposureMask);
|
|
}
|
|
}
|
|
|
|
if (!interactive)
|
|
{
|
|
printf("load %s\n", file);
|
|
im = imlib_load_image_immediately(file);
|
|
if (!im)
|
|
{
|
|
printf("load failed\n");
|
|
exit(0);
|
|
}
|
|
imlib_context_set_image(im);
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
printf("image %i x %i\n", w, h);
|
|
}
|
|
|
|
if (!blendtest)
|
|
{
|
|
if (!root)
|
|
{
|
|
if (scaleup)
|
|
XResizeWindow(disp, win, w * 4, h * 4);
|
|
else if (scaleboth)
|
|
XResizeWindow(disp, win, w * 2, h * 2);
|
|
else
|
|
XResizeWindow(disp, win, w, h);
|
|
XMapWindow(disp, win);
|
|
}
|
|
if (scale)
|
|
{
|
|
Window d;
|
|
int dd;
|
|
|
|
XGetGeometry(disp, win, &d, &dd, &dd, &dd, &dd, &dd, &dd);
|
|
}
|
|
XSync(disp, False);
|
|
}
|
|
|
|
|
|
/**
|
|
* Start rendering
|
|
*/
|
|
printf("rend\n");
|
|
|
|
if (!blendtest)
|
|
{
|
|
imlib_context_set_display(disp);
|
|
imlib_context_set_visual(vis);
|
|
imlib_context_set_colormap(cm);
|
|
imlib_context_set_drawable(win);
|
|
}
|
|
imlib_context_set_anti_alias(aa);
|
|
imlib_context_set_dither(dith);
|
|
imlib_context_set_blend(blend);
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
imlib_context_set_image(im);
|
|
|
|
gettimeofday(&timev,NULL);
|
|
sec1=(int)timev.tv_sec; /* and stores it so we can time outselves */
|
|
usec1=(int)timev.tv_usec; /* we will use this to vary speed of rot */
|
|
|
|
poly = imlib_polygon_new();
|
|
imlib_polygon_add_point(poly, 400,50);
|
|
imlib_polygon_add_point(poly, 450,100);
|
|
imlib_polygon_add_point(poly, 350,100);
|
|
|
|
poly2 = imlib_polygon_new();
|
|
imlib_polygon_add_point(poly2, 400,150);
|
|
imlib_polygon_add_point(poly2, 450,200);
|
|
imlib_polygon_add_point(poly2, 350,200);
|
|
|
|
poly3 = imlib_polygon_new();
|
|
imlib_polygon_add_point(poly3, 400,250);
|
|
imlib_polygon_add_point(poly3, 450,300);
|
|
imlib_polygon_add_point(poly3, 350,300);
|
|
|
|
|
|
#define A90 (3.141592654 / 2)
|
|
if (pol)
|
|
{
|
|
Imlib_Image im_bg, im;
|
|
int w, h;
|
|
int i;
|
|
double a, points[8][2];
|
|
|
|
if (file)
|
|
im_bg = imlib_load_image(file);
|
|
else
|
|
im_bg = imlib_load_image("test_images/bg.png");
|
|
imlib_context_set_image(im_bg);
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
XResizeWindow(disp, win, w, h);
|
|
XSync(disp, False);
|
|
im = imlib_create_image(w, h);
|
|
srand(time(NULL));
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
points[i][0] = (rand()%w) - (w / 2);
|
|
points[i][1] = (rand()%h) - (h / 2);
|
|
}
|
|
a = 0.0;
|
|
for (;;)
|
|
{
|
|
imlib_context_set_image(im);
|
|
imlib_blend_image_onto_image(im_bg, 0, 0, 0, w, h, 0, 0, w, h);
|
|
|
|
poly = imlib_polygon_new();
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
double xx, yy;
|
|
xx = (w / 2) +
|
|
(cos(a) * points[i][0]) +
|
|
(cos(a + A90) * points[i][1]);
|
|
yy = (h / 2) +
|
|
(sin(a) * points[i][0]) +
|
|
(sin(a + A90) * points[i][1]);
|
|
imlib_polygon_add_point(poly, xx, yy);
|
|
}
|
|
printf("draw angle %3.3f\n", a);
|
|
imlib_context_set_color(255, 255, 255, 100);
|
|
imlib_image_fill_polygon(poly);
|
|
imlib_context_set_color(0, 0, 0, 20);
|
|
imlib_image_draw_polygon(poly, 1);
|
|
imlib_polygon_free(poly);
|
|
|
|
|
|
imlib_render_image_on_drawable(0, 0);
|
|
a += 0.05;
|
|
}
|
|
}
|
|
|
|
if (loop)
|
|
{
|
|
printf("loop\n");
|
|
|
|
// first test
|
|
if (scaleup)
|
|
{
|
|
printf("scale up\n");
|
|
for (i = 0; i < w * 3; i+= 8)
|
|
{
|
|
if (!blendtest)
|
|
{
|
|
Imlib_Image im_tmp;
|
|
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
w + i, (((w + i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
w + i, (((w + i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
pixels += (w + i) * (((w + i) * h) / w);
|
|
}
|
|
}
|
|
|
|
// else if // second
|
|
else if (scaleboth)
|
|
{
|
|
if (origone)
|
|
{
|
|
for (i = 0; i < w * 2; i+= 4)
|
|
{
|
|
if (!blendtest)
|
|
{
|
|
Imlib_Image im_tmp;
|
|
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
w, (((i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
w, (((i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
XSync(disp, False);
|
|
pixels += (2 * w - i) * (((i) * h) / w);
|
|
}
|
|
for (i = 0; i < w * 2; i+= 4)
|
|
{
|
|
if (!blendtest)
|
|
imlib_render_image_on_drawable_at_size(0, 0,
|
|
2 * w - i, h);
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
2 * w - i, h);
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
pixels += (2 * w - i) * h;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < w * 2; i+= 4)
|
|
{
|
|
if (!blendtest)
|
|
imlib_render_image_on_drawable_at_size(0, 0,
|
|
2 * w - i, (((i) * h) / w));
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
2 * w - i, (((i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
pixels += w * (((i) * h) / w);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("scale down 0 -> %i incriment by 1\n", w);
|
|
for (i = 0; i < w; i++)
|
|
{
|
|
if (!blendtest)
|
|
imlib_render_image_on_drawable_at_size(0, 0,
|
|
w - i, (((w - i) * h) / w));
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
w - i, (((w - i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
pixels += (w + i) * (((w + i) * h) / w);
|
|
}
|
|
}
|
|
}
|
|
|
|
// last test
|
|
/* else if (scaleboth)
|
|
{
|
|
for (i = 0; i < w * 2; i+= 1)
|
|
{
|
|
if (!blendtest)
|
|
imlib_render_image_on_drawable_at_size(0, 0,
|
|
2 * w - i, (((i) * h) / w));
|
|
else
|
|
{
|
|
Imlib_Image im_tmp;
|
|
im_tmp = imlib_create_cropped_scaled_image(0, 0, w, h,
|
|
2 * w - i, (((i) * h) / w));
|
|
if (im_tmp)
|
|
{
|
|
imlib_context_set_image(im_tmp);
|
|
imlib_free_image();
|
|
}
|
|
imlib_context_set_image(im);
|
|
}
|
|
pixels += (2 * w - i) * (((i) * h) / w);
|
|
}
|
|
}
|
|
} */// end if loop
|
|
else if (blendtest)
|
|
{
|
|
Imlib_Image im2;
|
|
|
|
im2 = imlib_create_image(w, h);
|
|
imlib_context_set_image(im2);
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
imlib_context_set_image(im2);
|
|
imlib_context_set_color_modifier(colormod);
|
|
for (i = 0; i < 256; i++)
|
|
{
|
|
imlib_blend_image_onto_image(im, 0, 0, 0, w, h, 0, 0, w, h);
|
|
pixels += (w * h);
|
|
}
|
|
}
|
|
else if (rottest)
|
|
{
|
|
int w, h;
|
|
double i;
|
|
|
|
imlib_context_set_image(im);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
printf("rotating inside %dx%d frame\n", w, h);
|
|
|
|
imlib_context_set_blend(1);
|
|
imlib_context_set_image(imlib_create_image(w, h));
|
|
for (i = 0; i < 1; i += 0.01) {
|
|
imlib_blend_image_onto_image(im, 0, 0, 0, w, h, 0, 0, w, h);
|
|
imlib_context_set_color_modifier(colormod);
|
|
imlib_blend_image_onto_image_at_angle(im, 0, 0, 0, w, h,
|
|
0, h * i,
|
|
w * (1 - i), -(h * i));
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
pixels += w * h;
|
|
}
|
|
for (i = 0; i < 1; i += 0.01) {
|
|
imlib_blend_image_onto_image(im, 0, 0, 0, w, h, 0, 0, w, h);
|
|
imlib_context_set_color_modifier(colormod);
|
|
imlib_context_set_operation(IMLIB_OP_ADD);
|
|
imlib_blend_image_onto_image_at_angle(im, 0, 0, 0, w, h,
|
|
w * i, h,
|
|
-(w * i), h * (i - 1));
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
pixels += w * h;
|
|
}
|
|
for (i = 0; i < 1; i += 0.01) {
|
|
imlib_blend_image_onto_image(im, 0, 0, 0, w, h, 0, 0, w, h);
|
|
imlib_context_set_color_modifier(colormod);
|
|
imlib_context_set_operation(IMLIB_OP_SUBTRACT);
|
|
imlib_blend_image_onto_image_at_angle(im, 0, 0, 0, w, h,
|
|
w, h * (1 - i),
|
|
w * (i - 1), h * i);
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
pixels += w * h;
|
|
}
|
|
for (i = 0; i < 1; i += 0.01) {
|
|
imlib_blend_image_onto_image(im, 0, 0, 0, w, h, 0, 0, w, h);
|
|
imlib_context_set_color_modifier(colormod);
|
|
imlib_context_set_operation(IMLIB_OP_RESHADE);
|
|
imlib_blend_image_onto_image_at_angle(im, 0, 0, 0, w, h,
|
|
w * (1 - i), 0,
|
|
w * i, h * (1 - i));
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
imlib_context_set_color_modifier(NULL);
|
|
imlib_render_image_on_drawable(0, 0);
|
|
pixels += w * h;
|
|
}
|
|
imlib_free_image();
|
|
}
|
|
else if (filter)
|
|
{
|
|
imlib_context_set_filter(imlib_create_filter(0));
|
|
switch (filter) {
|
|
default:
|
|
case 1:
|
|
/*\ Blur filter \*/
|
|
imlib_filter_set( 0, 0, 0, 8, 8, 8);
|
|
imlib_filter_set(-1, 0, 0, 4, 4, 4);
|
|
imlib_filter_set( 0, -1, 0, 4, 4, 4);
|
|
imlib_filter_set( 1, 0, 0, 4, 4, 4);
|
|
imlib_filter_set( 0, 1, 0, 4, 4, 4);
|
|
imlib_filter_set(-2, 0, 0, 1, 1, 1);
|
|
imlib_filter_set( 0, -2, 0, 1, 1, 1);
|
|
imlib_filter_set( 2, 0, 0, 1, 1, 1);
|
|
imlib_filter_set( 0, 2, 0, 1, 1, 1);
|
|
imlib_filter_set(-1, -1, 0, 1, 1, 1);
|
|
imlib_filter_set(-1, 1, 0, 1, 1, 1);
|
|
imlib_filter_set( 1, -1, 0, 1, 1, 1);
|
|
imlib_filter_set( 1, 1, 0, 1, 1, 1);
|
|
break;
|
|
case 2:
|
|
/*\ Sharpen filter \*/
|
|
imlib_filter_set( 0, 0, 0, 5, 5, 5);
|
|
imlib_filter_set(-1, 0, 0, -1, -1, -1);
|
|
imlib_filter_set( 0, -1, 0, -1, -1, -1);
|
|
imlib_filter_set( 1, 0, 0, -1, -1, -1);
|
|
imlib_filter_set( 0, 1, 0, -1, -1, -1);
|
|
break;
|
|
case 3:
|
|
/*\ Color blur filter \*/
|
|
imlib_filter_set( 0, 0, 0, 3, 3, 3);
|
|
imlib_filter_set(-1, -1, 0, 1, 0, 0);
|
|
imlib_filter_set( 1, -1, 0, 0, 1, 0);
|
|
imlib_filter_set( 0, 1, 0, 0, 0, 1);
|
|
break;
|
|
case 4:
|
|
/*\ Emboss filter \*/
|
|
imlib_filter_set_red (-1, -1, 0, -1, -1, -1);
|
|
imlib_filter_set_red ( 0, 0, 0, 1, 1, 1);
|
|
imlib_filter_set_green(-1, -1, 0, -1, -1, -1);
|
|
imlib_filter_set_green( 0, 0, 0, 1, 1, 1);
|
|
imlib_filter_set_blue (-1, -1, 0, -1, -1, -1);
|
|
imlib_filter_set_blue ( 0, 0, 0, 1, 1, 1);
|
|
|
|
imlib_filter_constants(0, 768, 768, 768);
|
|
imlib_filter_divisors (0, 6, 6, 6);
|
|
break;
|
|
case 5:
|
|
/*\ Grayscale filter \*/
|
|
imlib_filter_set_red (0, 0, 0, 80, 1, 1);
|
|
imlib_filter_set_green(0, 0, 0, 1, 80, 1);
|
|
imlib_filter_set_blue (0, 0, 0, 1, 1, 80);
|
|
break;
|
|
case 6:
|
|
/*\ Saturation filter \*/
|
|
imlib_filter_set_red (0, 0, 0, 80, -1, -1);
|
|
imlib_filter_set_green(0, 0, 0, -1, 80, -1);
|
|
imlib_filter_set_blue (0, 0, 0, -1, -1, 80);
|
|
break;
|
|
case 7:
|
|
/*\ Edge detection filter \*/
|
|
imlib_filter_set(-1, -1, 0, -1, -1, -1);
|
|
imlib_filter_set(-1, 0, 0, -3, -3, -3);
|
|
imlib_filter_set(-1, 1, 0, -1, -1, -1);
|
|
imlib_filter_set( 0, -1, 0, -3, -3, -3);
|
|
imlib_filter_set( 0, 0, 0, 16, 16, 16);
|
|
imlib_filter_set( 0, 1, 0, -3, -3, -3);
|
|
imlib_filter_set( 1, -1, 0, -1, -1, -1);
|
|
imlib_filter_set( 1, 0, 0, -3, -3, -3);
|
|
imlib_filter_set( 1, 1, 0, -1, -1, -1);
|
|
imlib_filter_divisors (0, 3, 3, 3);
|
|
}
|
|
pixels = 0;
|
|
imlib_render_image_on_drawable_at_size(0, 0, w, h);
|
|
for (i = 0; i < w; i++)
|
|
{
|
|
imlib_image_filter();
|
|
imlib_render_image_on_drawable_at_size(0, 0, w, h);
|
|
pixels += w * h;
|
|
}
|
|
imlib_free_filter();
|
|
}
|
|
else if (interactive)
|
|
{
|
|
int wo, ho, px, py, first = 1;
|
|
Imlib_Image im_bg, im_sh1, im_sh2, im_sh3, im_ic[13], im_tmp;
|
|
/* Imlib_Border border; */
|
|
Imlib_Updates up = NULL;
|
|
int x, y, i, j;
|
|
XEvent ev;
|
|
Imlib_Font fn=NULL;
|
|
struct font_hdr
|
|
{
|
|
int type;
|
|
struct font_hdr *next;
|
|
char *name;
|
|
int ref;
|
|
XFontSet xfontset;
|
|
int font_count;
|
|
XFontStruct **font_struct;
|
|
char **font_name;
|
|
int ascent;
|
|
int descent;
|
|
int max_ascent;
|
|
int max_descent;
|
|
int max_width;
|
|
struct font_hdr *ttf;
|
|
} *f, *f1, *f2, *f3, *f4;
|
|
|
|
/* "ARIAL/30" "COMIC/30" "IMPACT/30" "Prole/30" "Proteron/30" */
|
|
/* "TIMES/30" "badacid/30" "bajoran/30" "bigfish/30" */
|
|
imlib_add_path_to_font_path("./ttfonts");
|
|
|
|
if (xfdtest)
|
|
{
|
|
printf( "Font Cache test start\n" );
|
|
|
|
f = imlib_load_font( "notepad/10" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
imlib_context_set_font((Imlib_Font)f);
|
|
printf( "\t\t ascent=%d, descent=%d, max_ascent=%d, max_descent=%d\n",
|
|
imlib_get_font_ascent(),imlib_get_font_descent(),
|
|
imlib_get_maximum_font_ascent(), imlib_get_maximum_font_descent() );
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
printf("\n");
|
|
|
|
f = imlib_load_font( "-*-fixed-*--14-*" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
imlib_context_set_font((Imlib_Font)f);
|
|
printf( "\t\t ascent=%d, descent=%d, max_ascent=%d, max_descent=%d\n",
|
|
imlib_get_font_ascent(),imlib_get_font_descent(),
|
|
imlib_get_maximum_font_ascent(), imlib_get_maximum_font_descent() );
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
printf("\n");
|
|
|
|
f1 = imlib_load_font( "notepad/10" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f1, f1->next, f1->type, f1->ref, f1->name);
|
|
f2 = imlib_load_font( "-*-fixed-*--14-*" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f2, f2->next, f2->type, f2->ref, f2->name);
|
|
f3 = imlib_load_font( "notepad/10,-*-fixed-*--14-*" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f3, f3->next, f3->type, f3->ref, f3->name);
|
|
f = f3->ttf;
|
|
printf(" f->ttf: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
f4 = imlib_load_font( "notepad/10,-*-fixed-*--14-*" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f4, f4->next, f4->type, f4->ref, f4->name);
|
|
f = f4->ttf;
|
|
printf(" f->ttf: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
printf("\n");
|
|
|
|
imlib_context_set_font((Imlib_Font)f4);
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f4, f4->next, f4->type, f4->ref, f4->name);
|
|
f = f4->ttf;
|
|
printf(" f->ttf: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
imlib_context_set_font((Imlib_Font)f1);
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f1, f1->next, f1->type, f1->ref, f1->name);
|
|
imlib_context_set_font((Imlib_Font)f2);
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f2, f2->next, f2->type, f2->ref, f2->name);
|
|
imlib_context_set_font((Imlib_Font)f3);
|
|
imlib_free_font();
|
|
printf("imlib_free_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f3, f3->next, f3->type, f3->ref, f3->name);
|
|
f = f3->ttf;
|
|
printf(" f->ttf: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
printf("\n");
|
|
imlib_flush_font_cache();
|
|
printf("imlib_flush_font_cache: \n");
|
|
printf("\n");
|
|
f1 = imlib_load_font( "notepad/10,-*-fixed-*--14-*" );
|
|
printf("imlib_load_font: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f1, f1->next, f1->type, f1->ref, f1->name);
|
|
f = f1->ttf;
|
|
printf(" f->ttf: f=%x, next=%8x, type=%d, ref=%d, '%s'\n",
|
|
f, f->next, f->type, f->ref, f->name);
|
|
imlib_context_set_font((Imlib_Font)f1);
|
|
printf( "\t\t ascent=%d, descent=%d, max_ascent=%d, max_descent=%d\n",
|
|
imlib_get_font_ascent(),imlib_get_font_descent(),
|
|
imlib_get_maximum_font_ascent(), imlib_get_maximum_font_descent() );
|
|
|
|
printf( "Font Cache test end\n" );
|
|
}
|
|
|
|
if (fon)
|
|
{
|
|
fn = imlib_load_font(fon);
|
|
|
|
if (xfdtest)
|
|
{
|
|
int i;
|
|
|
|
f = fn;
|
|
if (fn != NULL && f->type & 2)
|
|
for (i=0; i<f->font_count; i++)
|
|
printf("xfont%d: %s\n", i, f->font_name[i]);
|
|
}
|
|
|
|
imlib_context_set_font(fn);
|
|
if (!fn)
|
|
fon = NULL;
|
|
}
|
|
|
|
imlib_context_set_progress_function(NULL);
|
|
imlib_context_set_progress_granularity(0);
|
|
if (file)
|
|
im_bg = imlib_load_image(file);
|
|
else
|
|
im_bg = imlib_load_image("test_images/bg.png");
|
|
imlib_context_set_image(im_bg);
|
|
im_tmp = imlib_clone_image();
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
wo = w;
|
|
ho = h;
|
|
w *= 1;
|
|
h *= 1;
|
|
XResizeWindow(disp, win, w, h);
|
|
XSync(disp, False);
|
|
im = imlib_create_image(w, h);
|
|
imlib_set_cache_size(4 * 1024 * 1024);
|
|
i = 0;
|
|
up = imlib_update_append_rect(up, 0, 0, w, h);
|
|
x = -9999;
|
|
y = -9999;
|
|
while (1)
|
|
{
|
|
px = x;
|
|
py = y;
|
|
do
|
|
{
|
|
XNextEvent(disp, &ev);
|
|
switch (ev.type)
|
|
{
|
|
case Expose:
|
|
up = imlib_update_append_rect(up,
|
|
ev.xexpose.x, ev.xexpose.y,
|
|
ev.xexpose.width, ev.xexpose.height);
|
|
break;
|
|
case ButtonRelease:
|
|
if (fon)
|
|
{
|
|
imlib_context_set_font(fn);
|
|
imlib_free_font();
|
|
}
|
|
exit(0);
|
|
break;
|
|
case MotionNotify:
|
|
x = ev.xmotion.x;
|
|
y = ev.xmotion.y;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
}
|
|
while (XPending(disp));
|
|
|
|
im_sh1 = imlib_load_image("test_images/sh1.png");
|
|
im_sh2 = imlib_load_image("test_images/sh2.png");
|
|
im_sh3 = imlib_load_image("test_images/sh3.png");
|
|
im_ic[0] = imlib_load_image("test_images/audio.png");
|
|
im_ic[1] = imlib_load_image("test_images/folder.png");
|
|
im_ic[2] = imlib_load_image("test_images/mush.png");
|
|
im_ic[3] = imlib_load_image("test_images/paper.png");
|
|
im_ic[4] = imlib_load_image("test_images/mail.png");
|
|
im_ic[5] = imlib_load_image("test_images/calc.png");
|
|
im_ic[6] = imlib_load_image("test_images/cal.png");
|
|
im_ic[7] = imlib_load_image("test_images/stop.png");
|
|
im_ic[8] = imlib_load_image("test_images/globe.png");
|
|
im_ic[9] = imlib_load_image("test_images/menu.png");
|
|
im_ic[10] = imlib_load_image("test_images/tnt.png");
|
|
im_ic[11] = imlib_load_image("test_images/bulb.png");
|
|
im_ic[12] = imlib_load_image("test_images/lock.png");
|
|
|
|
imlib_context_set_image(im);
|
|
if (first)
|
|
{
|
|
imlib_blend_image_onto_image(im_bg, 0,
|
|
0, 0, w, h,
|
|
0, 0, w, h);
|
|
first = 0;
|
|
}
|
|
else if (rotate)
|
|
{
|
|
Imlib_Image rotim;
|
|
double s, c;
|
|
int x1, y1, x2, y2, w, h;
|
|
|
|
w = imlib_image_get_width();
|
|
h = imlib_image_get_height();
|
|
s = sin(6.2831853 * (double)y / (double)h);
|
|
c = cos(6.2831853 * (double)y / (double)h);
|
|
|
|
x1 = (w - w * c + h * s) / 2;
|
|
y1 = (h - h * c - w * s) / 2;
|
|
x2 = (w + w * c - h * s) / 2;
|
|
y2 = (h + h * c + w * s) / 2;
|
|
|
|
imlib_context_set_blend(1);
|
|
imlib_blend_image_onto_image_at_angle(im_bg, 0,
|
|
0, 0,
|
|
imlib_image_get_width(),
|
|
imlib_image_get_height(),
|
|
x1, y1, x2, y2);
|
|
up = imlib_update_append_rect(up, 0, 0,
|
|
imlib_image_get_width(),
|
|
imlib_image_get_height());
|
|
|
|
}
|
|
/*
|
|
if( bump_map_to_point )
|
|
imlib_apply_filter("bump_map_point(x=[],y=[],map=test_images/bulb.png);", &x, &y );
|
|
else
|
|
imlib_apply_filter("bump_map(x=[],y=[],map=test_images/bulb.png);", &x, &y );
|
|
*/
|
|
up = imlib_update_append_rect(up, 0, 0,
|
|
imlib_image_get_width(),
|
|
imlib_image_get_height());
|
|
{
|
|
Imlib_Updates uu;
|
|
|
|
imlib_context_set_cliprect(0,0,0,0);
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
uu = imlib_image_draw_line(200, 200, x, y, 1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
/* test ellipses */
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
imlib_image_draw_ellipse(50,250,30,40);
|
|
imlib_image_fill_ellipse(50,300,30,40);
|
|
|
|
imlib_image_draw_rectangle(120,245,70,70);
|
|
up = imlib_update_append_rect(up, 120,245,70,70);
|
|
imlib_image_draw_ellipse(160,280,50,20);
|
|
|
|
imlib_context_set_cliprect(120,245,70,70);
|
|
imlib_context_set_color(255, 55, 55, 255);
|
|
imlib_image_draw_ellipse(160,280,50,20);
|
|
|
|
/* test line clipping */
|
|
imlib_context_set_cliprect(0,0,0,0);
|
|
imlib_image_draw_rectangle(50,50,100,100);
|
|
up = imlib_update_append_rect(up, 50,50,100,100);
|
|
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
|
|
uu = imlib_image_draw_line(0, 0, 200, 200, 1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(305, 25, 20, 200, 1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(100, 5, 100, 205, 1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(275, 5, 20, 100, 1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
|
|
imlib_context_set_color(255, 55, 55, 255);
|
|
imlib_context_set_cliprect(50,50,100,100);
|
|
|
|
uu = imlib_image_draw_line(0, 0, 200, 200,1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(305, 25, 20, 200,1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(100, 5, 100, 205,1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
uu = imlib_image_draw_line(275, 5, 20, 100,1);
|
|
up = imlib_updates_append_updates(up, uu);
|
|
|
|
|
|
/* test rectangle clipping */
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
imlib_context_set_cliprect(0,0,0,0);
|
|
|
|
imlib_image_draw_rectangle(70,90,20,20);
|
|
imlib_image_draw_rectangle(115,70,60,30);
|
|
imlib_image_draw_rectangle(30,120,50,50);
|
|
|
|
imlib_context_set_color(255, 55, 55, 255);
|
|
imlib_context_set_cliprect(50,50,100,100);
|
|
|
|
imlib_image_draw_rectangle(70,90,20,20);
|
|
up = imlib_update_append_rect(up, 70,90,20,20);
|
|
imlib_image_draw_rectangle(115,70,60,30);
|
|
up = imlib_update_append_rect(up, 115,70,60,30);
|
|
imlib_image_draw_rectangle(30,120,50,50);
|
|
up = imlib_update_append_rect(up, 30,120,50,50);
|
|
|
|
imlib_context_set_cliprect(0,0,0,0);
|
|
|
|
/* test polygons */
|
|
imlib_context_set_color(255, 0, 0, 128);
|
|
imlib_image_fill_polygon(poly);
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
imlib_image_draw_polygon(poly2,0);
|
|
imlib_image_draw_polygon(poly3,1);
|
|
imlib_image_draw_rectangle(380,260,50,50);
|
|
|
|
imlib_context_set_color(255, 55, 55, 255);
|
|
imlib_context_set_cliprect(380,260,50,50);
|
|
imlib_image_fill_polygon(poly3);
|
|
imlib_context_set_cliprect(0,0,0,0);
|
|
|
|
}
|
|
{
|
|
static Imlib_Color_Range rg = NULL;
|
|
|
|
if (!rg)
|
|
{
|
|
rg = imlib_create_color_range();
|
|
imlib_context_set_color_range(rg);
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
imlib_add_color_to_color_range(0);
|
|
imlib_context_set_color(255, 255,160, 255);
|
|
imlib_add_color_to_color_range(1);
|
|
imlib_context_set_color(255, 160, 120, 255);
|
|
imlib_add_color_to_color_range(1);
|
|
imlib_context_set_color(255, 80, 100, 128);
|
|
imlib_add_color_to_color_range(1);
|
|
imlib_context_set_color(32, 48, 80, 0);
|
|
imlib_add_color_to_color_range(1);
|
|
}
|
|
imlib_context_set_operation(IMLIB_OP_RESHADE);
|
|
imlib_image_fill_color_range_rectangle(60, 60, 256, 256, (double)x);
|
|
up = imlib_update_append_rect(up, 60, 60, 256, 256);
|
|
imlib_context_set_operation(IMLIB_OP_COPY);
|
|
}
|
|
|
|
if (xfdcachetest)
|
|
{
|
|
int l;
|
|
int retw, reth, tx, ty, nx, ny;
|
|
int secs, usecs, sece, usece;
|
|
FILE *f;
|
|
char buf[129];
|
|
|
|
f = fopen(xfdfname, "r");
|
|
if (!f)
|
|
{
|
|
printf("file %s can not be opened!\n", file);
|
|
exit(-1);
|
|
}
|
|
|
|
tx = ty = 0;
|
|
imlib_context_set_color(255, 255, 255, 255);
|
|
|
|
gettimeofday(&timev,NULL);
|
|
secs=(int)timev.tv_sec;
|
|
usecs=(int)timev.tv_usec;
|
|
|
|
l = xfdloop;
|
|
while(l)
|
|
{
|
|
fseek(f, 0, SEEK_SET);
|
|
while (fgets(buf, 128, f))
|
|
{
|
|
if ( buf[strlen(buf)-1] == '\n' )
|
|
buf[strlen(buf)-1] = '\0';
|
|
imlib_text_draw_with_return_metrics(tx, ty, buf,
|
|
&retw, &reth,
|
|
&nx, &ny);
|
|
up = imlib_update_append_rect(up, tx, ty, retw, reth);
|
|
ty += ny;
|
|
if (ty > h)
|
|
ty = 0;
|
|
}
|
|
l--;
|
|
}
|
|
|
|
gettimeofday(&timev,NULL);
|
|
sece=(int)timev.tv_sec;
|
|
usece=(int)timev.tv_usec;
|
|
{
|
|
double t1, t2;
|
|
|
|
t1 = (double)secs + ((double)usecs / 1000000);
|
|
t2 = (double)sece + ((double)usece / 1000000);
|
|
sec = t2 - t1;
|
|
}
|
|
printf("%3.3f sec\n", sec);
|
|
|
|
}
|
|
else if (fon)
|
|
{
|
|
int retw, reth, tx, ty, nx, ny, cx, cy, cw, ch, cp;
|
|
int cx2, cy2, cw2, ch2;
|
|
|
|
if (!str)
|
|
str = "This is a test string";
|
|
tx = ty = 50;
|
|
for (i = 0; i < 16; i++)
|
|
{
|
|
int al;
|
|
|
|
imlib_context_set_direction(textdir);
|
|
if (textdir == IMLIB_TEXT_TO_ANGLE)
|
|
{
|
|
double an = (double)i / 10.0;
|
|
imlib_context_set_angle(an);
|
|
}
|
|
|
|
al = (15 - i) * 16;
|
|
if (al > 255)
|
|
al = 255;
|
|
imlib_context_set_color(255, 255, 255, al);
|
|
imlib_text_draw_with_return_metrics(tx, ty, str,
|
|
&retw, &reth,
|
|
&nx, &ny);
|
|
up = imlib_update_append_rect(up, tx, ty, retw, reth);
|
|
switch(textdir)
|
|
{
|
|
case IMLIB_TEXT_TO_RIGHT:
|
|
case IMLIB_TEXT_TO_LEFT:
|
|
case IMLIB_TEXT_TO_ANGLE:
|
|
ty += ny;
|
|
break;
|
|
case IMLIB_TEXT_TO_DOWN:
|
|
case IMLIB_TEXT_TO_UP:
|
|
tx += nx;
|
|
break;
|
|
}
|
|
}
|
|
cp = imlib_text_get_index_and_location(str, x - 50, y - 50,
|
|
&cx, &cy, &cw, &ch);
|
|
if (cp >= 0)
|
|
{
|
|
char tmp[16];
|
|
int len;
|
|
|
|
len = mblen(str+cp, MB_CUR_MAX);
|
|
if (len < 0)
|
|
len = 1;
|
|
strncpy(tmp, str+cp, len);
|
|
tmp[len] = '\0';
|
|
printf("over char %s : cp=%d cx=%d cy=%d cw=%d ch=%d : ",
|
|
tmp, cp, cx, cy, cw, ch);
|
|
imlib_text_get_location_at_index(str, cp, &cx2, &cy2,
|
|
&cw2, &ch2);
|
|
printf("cx2=%d cy2=%d cw2=%d ch2=%d \n",
|
|
cx2, cy2, cw2, ch2);
|
|
}
|
|
}
|
|
imlib_context_set_blend(1);
|
|
if ((px != x) || (py != y))
|
|
{
|
|
for (j = 0; j < 32; j++)
|
|
{
|
|
for (i = 0; i < 32; i++)
|
|
{
|
|
int ic, iw, ih, ww, hh;
|
|
|
|
ic = ((j * 32) + i) % 13;
|
|
imlib_context_set_image(im_ic[ic]);
|
|
iw = imlib_image_get_width();
|
|
ih = imlib_image_get_height();
|
|
ww = iw;
|
|
hh = ih;
|
|
up = imlib_update_append_rect(up, x + (i * iw * 2),
|
|
y + (j * ih * 2), ww, hh);
|
|
up = imlib_update_append_rect(up, px + (i * iw * 2),
|
|
py + (j * ih * 2), ww, hh);
|
|
imlib_context_set_image(im);
|
|
imlib_blend_image_onto_image(im_ic[ic], 0,
|
|
0, 0, iw, ih,
|
|
x + (i * iw * 2),
|
|
y + (j * ih * 2),
|
|
ww, hh);
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
imlib_apply_filter( "tint(x=200,y=200,w=300,h=100,alpha=100,red=155,green=25,blue=25);"\
|
|
"tint(green=20,red=20,blue=20,alpha=200,x=30,y=30);" \
|
|
"tint(green=40,red=40,blue=240,alpha=60,x=50,y=150,h=200);" );
|
|
*/
|
|
imlib_blend_image_onto_image(im_sh1, 0, 0, 0, 50, 50, 0, 0, 50, 50);
|
|
up = imlib_update_append_rect(up, 0, 0, 50, 50);
|
|
imlib_blend_image_onto_image(im_sh2, 0, 0, 0, 50, 50, 50, 0, w - 50, 50);
|
|
up = imlib_update_append_rect(up, 50, 0, w - 50, 50);
|
|
imlib_blend_image_onto_image(im_sh3, 0, 0, 0, 50, 50, 0, 50, 50, h - 50);
|
|
up = imlib_update_append_rect(up, 0, 50, 50, h - 50);
|
|
up = imlib_updates_merge_for_rendering(up, w, h);
|
|
imlib_context_set_blend(0);
|
|
imlib_render_image_updates_on_drawable(up, 0, 0);
|
|
if ((px != x) || (py != y))
|
|
{
|
|
Imlib_Updates u;
|
|
|
|
u = up;
|
|
while (u)
|
|
{
|
|
int ux, uy, uw, uh;
|
|
|
|
imlib_updates_get_coordinates(u, &ux, &uy, &uw, &uh);
|
|
imlib_blend_image_onto_image(im_bg, 0,
|
|
ux, uy, uw, uh,
|
|
ux, uy, uw, uh);
|
|
u = imlib_updates_get_next(u);
|
|
}
|
|
}
|
|
imlib_updates_free(up);
|
|
up = NULL;
|
|
imlib_context_set_image(im_sh1);imlib_free_image();
|
|
imlib_context_set_image(im_sh1);imlib_free_image();
|
|
imlib_context_set_image(im_sh1);imlib_free_image();
|
|
imlib_context_set_image(im_ic[0]);imlib_free_image();
|
|
imlib_context_set_image(im_ic[1]);imlib_free_image();
|
|
imlib_context_set_image(im_ic[2]);imlib_free_image();
|
|
imlib_context_set_image(im_ic[3]);imlib_free_image();
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("blast test\n");
|
|
pixels = 0;
|
|
imlib_context_set_color_modifier(colormod);
|
|
for (i = 0; i < w; i++)
|
|
{
|
|
imlib_render_image_on_drawable_at_size(0, 0, w, h);
|
|
pixels += w * h;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determine horse power of your video card driver
|
|
*/
|
|
gettimeofday(&timev,NULL);
|
|
sec2=(int)timev.tv_sec; /* and stores it so we can time outselves */
|
|
usec2=(int)timev.tv_usec; /* we will use this to vary speed of rot */
|
|
printf("done\n");
|
|
{
|
|
double t1, t2;
|
|
|
|
t1 = (double)sec1 + ((double)usec1 / 1000000);
|
|
t2 = (double)sec2 + ((double)usec2 / 1000000);
|
|
sec = t2 - t1;
|
|
}
|
|
printf("%3.3f sec, %3.3f M pixels (%i)\n", sec, (double)pixels / 1000000, pixels);
|
|
printf("%3.3f Mpixels / sec\n", (double)(pixels) / (sec * 1000000));
|
|
return 0;
|
|
}
|