… | |
… | |
27 | #define DO_TIMING_TEST 0 |
27 | #define DO_TIMING_TEST 0 |
28 | |
28 | |
29 | #if DO_TIMING_TEST |
29 | #if DO_TIMING_TEST |
30 | # include <sys/time.h> |
30 | # include <sys/time.h> |
31 | #define TIMING_TEST_START(id) \ |
31 | #define TIMING_TEST_START(id) \ |
32 | struct timeval timing_test_##id##_stv;\ |
32 | struct timeval timing_test_##id##_stv; \ |
33 | gettimeofday (&timing_test_##id##_stv, NULL); |
33 | gettimeofday (&timing_test_##id##_stv, NULL); |
34 | |
34 | |
35 | #define TIMING_TEST_PRINT_RESULT(id) \ |
35 | #define TIMING_TEST_PRINT_RESULT(id) \ |
36 | do{ struct timeval tv;gettimeofday (&tv, NULL); tv.tv_sec -= (timing_test_##id##_stv).tv_sec;\ |
36 | do { \ |
|
|
37 | struct timeval tv; \ |
|
|
38 | gettimeofday (&tv, NULL); \ |
|
|
39 | tv.tv_sec -= (timing_test_##id##_stv).tv_sec; \ |
37 | fprintf (stderr, "%s: %s: %d: elapsed %ld usec\n", #id, __FILE__, __LINE__,\ |
40 | fprintf (stderr, "%s: %s: %d: elapsed %ld usec\n", #id, __FILE__, __LINE__, \ |
38 | tv.tv_sec * 1000000 + tv.tv_usec - (timing_test_##id##_stv).tv_usec);}while (0) |
41 | tv.tv_sec * 1000000 + tv.tv_usec - (timing_test_##id##_stv).tv_usec); \ |
|
|
42 | } while (0) |
39 | |
43 | |
40 | #else |
44 | #else |
41 | #define TIMING_TEST_START(id) do{}while (0) |
45 | #define TIMING_TEST_START(id) do {} while (0) |
42 | #define TIMING_TEST_PRINT_RESULT(id) do{}while (0) |
46 | #define TIMING_TEST_PRINT_RESULT(id) do {} while (0) |
43 | #endif |
47 | #endif |
44 | |
48 | |
45 | /* |
49 | /* |
46 | * Pixmap geometry string interpretation : |
50 | * Pixmap geometry string interpretation : |
47 | * Each geometry string contains zero or one scale/position |
51 | * Each geometry string contains zero or one scale/position |
48 | * adjustment and may optionally be followed by a colon and one or more |
52 | * adjustment and may optionally be followed by a colon and one or more |
49 | * colon-delimited pixmap operations. |
53 | * colon-delimited pixmap operations. |
50 | * The following table shows the valid geometry strings and their |
54 | * The following table shows the valid geometry strings and their |
51 | * affects on the background image : |
55 | * effects on the background image : |
52 | * |
56 | * |
53 | * WxH+X+Y Set scaling to W% by H%, and position to X% by Y%. |
57 | * WxH+X+Y Set scaling to W% by H%, and position to X% by Y%. |
54 | * W and H are percentages of the terminal window size. |
58 | * W and H are percentages of the terminal window size. |
55 | * X and Y are also percentages; e.g., +50+50 centers |
59 | * X and Y are also percentages; e.g., +50+50 centers |
56 | * the image in the window. |
60 | * the image in the window. |
… | |
… | |
550 | } |
554 | } |
551 | else |
555 | else |
552 | { |
556 | { |
553 | /* if blending background and image - pixmap has to be sized same as target window */ |
557 | /* if blending background and image - pixmap has to be sized same as target window */ |
554 | ASImageLayer *layers = create_image_layers (2); |
558 | ASImageLayer *layers = create_image_layers (2); |
555 | ASImage *merged_im = NULL; |
|
|
556 | |
559 | |
557 | layers[0].im = background; |
560 | layers[0].im = background; |
558 | layers[0].clip_width = target_width; |
561 | layers[0].clip_width = target_width; |
559 | layers[0].clip_height = target_height; |
562 | layers[0].clip_height = target_height; |
560 | layers[0].tint = background_tint; |
563 | layers[0].tint = background_tint; |
… | |
… | |
671 | { |
674 | { |
672 | assert (file); |
675 | assert (file); |
673 | |
676 | |
674 | if (*file) |
677 | if (*file) |
675 | { |
678 | { |
|
|
679 | if (const char *p = strchr (file, ';')) |
|
|
680 | { |
|
|
681 | size_t len = p - file; |
|
|
682 | char *f = rxvt_temp_buf<char> (len + 1); |
|
|
683 | memcpy (f, file, len); |
|
|
684 | f[len] = '\0'; |
|
|
685 | file = f; |
|
|
686 | } |
|
|
687 | |
676 | # ifdef HAVE_AFTERIMAGE |
688 | # ifdef HAVE_AFTERIMAGE |
677 | if (!target->asimman) |
689 | if (!target->asimman) |
678 | target->asimman = create_generic_imageman (target->rs[Rs_path]); |
690 | target->asimman = create_generic_imageman (target->rs[Rs_path]); |
679 | |
|
|
680 | if (const char *p = strchr (file, ';')) |
|
|
681 | { |
|
|
682 | size_t len = p - file; |
|
|
683 | char *f = (char *)malloc (len + 1); |
|
|
684 | memcpy (f, file, len); |
|
|
685 | f[len] = '\0'; |
|
|
686 | original_asim = get_asimage (target->asimman, f, 0xFFFFFFFF, 100); |
|
|
687 | free (f); |
|
|
688 | } |
|
|
689 | else |
|
|
690 | original_asim = get_asimage (target->asimman, file, 0xFFFFFFFF, 100); |
691 | original_asim = get_asimage (target->asimman, file, 0xFFFFFFFF, 100); |
691 | |
|
|
692 | return original_asim; |
692 | return original_asim; |
693 | # endif |
693 | # endif |
694 | } |
694 | } |
695 | |
695 | |
696 | return false; |
696 | return false; |