OLD | NEW |
| (Empty) |
1 | |
2 extern "C" { | |
3 #include <stdio.h> | |
4 #include <stdlib.h> | |
5 #include <config.h> | |
6 #include "pixman-private.h" | |
7 #include "utils.h" | |
8 #include "gtk-utils.h" | |
9 | |
10 } | |
11 | |
12 #include "SkBitmap.h" | |
13 #include "SkCanvas.h" | |
14 #include "SkGraphics.h" | |
15 #include "SkPaint.h" | |
16 #import "SkWindow.h" | |
17 | |
18 bool DrawPixman(SkCanvas* canvas, int step, bool useOld); | |
19 SkCanvas* canvas; | |
20 | |
21 extern "C" { | |
22 | |
23 void* | |
24 pixbuf_from_argb32 (uint32_t *bits, | |
25 int width, | |
26 int height, | |
27 int stride) | |
28 { | |
29 SkBitmap* bitmap = new SkBitmap; | |
30 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | |
31 bitmap->allocPixels(); | |
32 | |
33 int p_stride = bitmap->rowBytes(); | |
34 uint32_t *p_bits = bitmap->getAddr32(0, 0); | |
35 int i; | |
36 | |
37 for (i = 0; i < height; ++i) | |
38 { | |
39 uint32_t *src_row = &bits[i * (stride / 4)]; | |
40 uint32_t *dst_row = p_bits + i * (p_stride / 4); | |
41 | |
42 a8r8g8b8_to_rgba_np (dst_row, src_row, width); | |
43 } | |
44 return (void*) bitmap; | |
45 } | |
46 | |
47 | |
48 void show_image (pixman_image_t *image) { | |
49 int width, height; | |
50 pixman_format_code_t format; | |
51 pixman_image_t *copy; | |
52 | |
53 width = pixman_image_get_width (image); | |
54 height = pixman_image_get_height (image); | |
55 | |
56 | |
57 format = pixman_image_get_format (image); | |
58 | |
59 /* Three cases: | |
60 * | |
61 * - image is a8r8g8b8_sRGB: we will display without modification | |
62 * under the assumption that the monitor is sRGB | |
63 * | |
64 * - image is a8r8g8b8: we will display without modification | |
65 * under the assumption that whoever created the image | |
66 * probably did it wrong by using sRGB inputs | |
67 * | |
68 * - other: we will convert to a8r8g8b8 under the assumption that | |
69 * whoever created the image probably did it wrong. | |
70 */ | |
71 switch (format) | |
72 { | |
73 case PIXMAN_a8r8g8b8_sRGB: | |
74 case PIXMAN_a8r8g8b8: | |
75 copy = pixman_image_ref (image); | |
76 break; | |
77 | |
78 default: | |
79 copy = pixman_image_create_bits (PIXMAN_a8r8g8b8, | |
80 width, height, NULL, -1); | |
81 pixman_image_composite32 (PIXMAN_OP_SRC, | |
82 image, NULL, copy, | |
83 0, 0, 0, 0, 0, 0, | |
84 width, height); | |
85 break; | |
86 } | |
87 | |
88 SkBitmap* bitmap = (SkBitmap*) pixbuf_from_argb32 (pixman_image_get_data (co
py), | |
89 width, height, | |
90 pixman_image_get_stride (copy)); | |
91 canvas->drawBitmap(*bitmap, 0, 0); | |
92 delete bitmap; | |
93 } | |
94 | |
95 } | |
96 | |
97 bool DrawPixman(SkCanvas* c, int step, bool usePixman) { | |
98 canvas = c; | |
99 switch(step) { | |
100 case 0: | |
101 checkerboard_main(0, NULL); | |
102 break; | |
103 default: | |
104 alpha_main(0, NULL); | |
105 break; | |
106 } | |
107 return true; | |
108 } | |
OLD | NEW |