diff --git a/src/scale.c b/src/scale.c index fa65e26..b5b7918 100644 --- a/src/scale.c +++ b/src/scale.c @@ -16,6 +16,9 @@ #undef DO_MMX_ASM #endif +/* use old scaling.. new scalign has segv bugs... :( */ +#define OLD_SCALE_DOWN 1 + DATA32 ** __imlib_CalcYPoints(DATA32 *src, int sw, int sh, int dh, int b1, int b2) { diff --git a/test/main.c b/test/main.c index 178012e..30085d2 100644 --- a/test/main.c +++ b/test/main.c @@ -74,6 +74,8 @@ int main (int argc, char **argv) int rotate = 0; int rottest = 0; int scaleup = 0; + int scaleboth = 0; + int origone = 0; for (i = 1; i < argc; i++) { @@ -90,6 +92,10 @@ int main (int argc, char **argv) } else if (!strcmp(argv[i], "-up")) scaleup = 1; + else if (!strcmp(argv[i], "-both")) + scaleboth = 1; + else if (!strcmp(argv[i], "-orig")) + origone = 1; else if (!strcmp(argv[i], "-blend")) blend = 1; else if (!strcmp(argv[i], "-blendtest")) @@ -178,6 +184,8 @@ int main (int argc, char **argv) { 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); @@ -220,8 +228,19 @@ int main (int argc, char **argv) for (i = 0; i < w * 3; i+= 8) { if (!blendtest) - imlib_render_image_on_drawable_at_size(0, 0, - w + i, (((w + i) * h) / w)); + { + 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; @@ -234,7 +253,85 @@ int main (int argc, char **argv) } imlib_context_set_image(im); } - pixels += (w - i) * (((w - i) * h) / w); + pixels += (w + i) * (((w + i) * h) / w); + } + } + 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