1 |
pacho 11/02/27 12:46:28 |
2 |
|
3 |
Added: libgdiplus-2.10.1-libpng15.patch |
4 |
Log: |
5 |
Version bump for mono-2.10, remove 9999 as we don't support neither maintain it. Fix libpng-1.5 building (bug #355113 by Lars Wendler). |
6 |
|
7 |
(Portage version: 2.1.9.41/cvs/Linux x86_64) |
8 |
|
9 |
Revision Changes Path |
10 |
1.1 dev-dotnet/libgdiplus/files/libgdiplus-2.10.1-libpng15.patch |
11 |
|
12 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-dotnet/libgdiplus/files/libgdiplus-2.10.1-libpng15.patch?rev=1.1&view=markup |
13 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-dotnet/libgdiplus/files/libgdiplus-2.10.1-libpng15.patch?rev=1.1&content-type=text/plain |
14 |
|
15 |
Index: libgdiplus-2.10.1-libpng15.patch |
16 |
=================================================================== |
17 |
$NetBSD: patch-aa,v 1.8 2011/01/21 10:21:51 wiz Exp $ |
18 |
|
19 |
Fix build with png-1.5. |
20 |
|
21 |
--- src/pngcodec.c.orig 2010-11-03 16:52:54.000000000 +0000 |
22 |
+++ src/pngcodec.c |
23 |
@@ -116,10 +116,15 @@ gdip_load_png_properties (png_structp pn |
24 |
bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr); |
25 |
bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr); |
26 |
#elif defined(PNG_pHYs_SUPPORTED) |
27 |
- if ((info_ptr->valid & PNG_INFO_pHYs) && (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)) { |
28 |
- bitmap_data->image_flags |= ImageFlagsHasRealDPI; |
29 |
- bitmap_data->dpi_horz = info_ptr->x_pixels_per_unit * 0.0254; |
30 |
- bitmap_data->dpi_vert = info_ptr->y_pixels_per_unit * 0.0254; |
31 |
+ if (png_get_valid (png_ptr, info_ptr, PNG_INFO_pHYs)) { |
32 |
+ png_uint_32 res_x, res_y; |
33 |
+ int unit_type; |
34 |
+ png_get_pHYs (png_ptr, info_ptr, &res_x, &res_y, &unit_type); |
35 |
+ if (unit_type == PNG_RESOLUTION_METER) { |
36 |
+ bitmap_data->image_flags |= ImageFlagsHasRealDPI; |
37 |
+ bitmap_data->dpi_horz = res_x * 0.0254; |
38 |
+ bitmap_data->dpi_vert = res_y * 0.0254; |
39 |
+ } |
40 |
} |
41 |
#endif |
42 |
/* default to screen resolution (if nothing was provided or available) */ |
43 |
@@ -130,7 +135,7 @@ gdip_load_png_properties (png_structp pn |
44 |
#if defined(PNG_iCCP_SUPPORTED) |
45 |
{ |
46 |
png_charp name; |
47 |
- png_charp profile; |
48 |
+ png_bytep profile; |
49 |
png_uint_32 proflen; |
50 |
int compression_type; |
51 |
|
52 |
@@ -292,6 +297,11 @@ gdip_load_png_image_from_file_or_stream |
53 |
ImageFlags colourspace_flag; |
54 |
int i; |
55 |
int j; |
56 |
+ png_colorp png_palette; |
57 |
+ int png_num_palette; |
58 |
+ png_bytep trans_alpha; |
59 |
+ int num_trans; |
60 |
+ png_color_16p trans_color; |
61 |
|
62 |
width = png_get_image_width (png_ptr, info_ptr); |
63 |
height = png_get_image_height (png_ptr, info_ptr); |
64 |
@@ -309,6 +319,8 @@ gdip_load_png_image_from_file_or_stream |
65 |
} |
66 |
|
67 |
/* Copy palette. */ |
68 |
+ png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette); |
69 |
+ |
70 |
num_colours = 1 << bit_depth; |
71 |
|
72 |
if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) { |
73 |
@@ -321,8 +333,8 @@ gdip_load_png_image_from_file_or_stream |
74 |
colourspace_flag = ImageFlagsColorSpaceRGB; |
75 |
|
76 |
palette_entries = num_colours; |
77 |
- if (palette_entries > info_ptr->num_palette) { |
78 |
- palette_entries = info_ptr->num_palette; |
79 |
+ if (palette_entries > png_num_palette) { |
80 |
+ palette_entries = png_num_palette; |
81 |
} |
82 |
|
83 |
palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB)); |
84 |
@@ -331,29 +343,30 @@ gdip_load_png_image_from_file_or_stream |
85 |
|
86 |
for (i=0; i < palette_entries; i++) { |
87 |
set_pixel_bgra (&palette->Entries[i], 0, |
88 |
- info_ptr->palette[i].blue, |
89 |
- info_ptr->palette[i].green, |
90 |
- info_ptr->palette[i].red, |
91 |
+ png_palette[i].blue, |
92 |
+ png_palette[i].green, |
93 |
+ png_palette[i].red, |
94 |
0xFF); /* alpha */ |
95 |
} |
96 |
} |
97 |
|
98 |
+ png_get_tRNS (png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color); |
99 |
/* Make sure transparency is respected. */ |
100 |
- if (info_ptr->num_trans > 0) { |
101 |
+ if (num_trans > 0) { |
102 |
palette->Flags |= PaletteFlagsHasAlpha; |
103 |
colourspace_flag |= ImageFlagsHasAlpha; |
104 |
|
105 |
- if (info_ptr->num_trans > info_ptr->num_palette) { |
106 |
- info_ptr->num_trans = info_ptr->num_palette; |
107 |
+ if (num_trans > png_num_palette) { |
108 |
+ num_trans = png_num_palette; |
109 |
} |
110 |
|
111 |
- for (i=0; i < info_ptr->num_trans; i++) { |
112 |
+ for (i=0; i < num_trans; i++) { |
113 |
set_pixel_bgra(&palette->Entries[i], 0, |
114 |
- info_ptr->palette[i].blue, |
115 |
- info_ptr->palette[i].green, |
116 |
- info_ptr->palette[i].red, |
117 |
+ png_palette[i].blue, |
118 |
+ png_palette[i].green, |
119 |
+ png_palette[i].red, |
120 |
#if PNG_LIBPNG_VER > 10399 |
121 |
- info_ptr->trans_alpha [i]); /* alpha */ |
122 |
+ trans_alpha [i]); /* alpha */ |
123 |
#else |
124 |
info_ptr->trans[i]); /* alpha */ |
125 |
#endif |
126 |
@@ -398,6 +411,8 @@ gdip_load_png_image_from_file_or_stream |
127 |
BYTE bit_depth; |
128 |
int stride; |
129 |
int interlace; |
130 |
+ png_colorp png_palette; |
131 |
+ int png_num_palette; |
132 |
png_bytep *row_pointers; |
133 |
BYTE *rawptr; |
134 |
int i, j; |
135 |
@@ -490,32 +505,33 @@ gdip_load_png_image_from_file_or_stream |
136 |
png_byte palette = 0; |
137 |
png_byte pix = *rowp++; |
138 |
|
139 |
+ png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette); |
140 |
palette = (pix >> 6) & 0x03; |
141 |
set_pixel_bgra (rawptr, 0, |
142 |
- info_ptr->palette[palette].blue, |
143 |
- info_ptr->palette[palette].green, |
144 |
- info_ptr->palette[palette].red, |
145 |
+ png_palette[palette].blue, |
146 |
+ png_palette[palette].green, |
147 |
+ png_palette[palette].red, |
148 |
0xFF); /* alpha */ |
149 |
|
150 |
palette = (pix >> 4) & 0x03; |
151 |
set_pixel_bgra (rawptr, 4, |
152 |
- info_ptr->palette[palette].blue, |
153 |
- info_ptr->palette[palette].green, |
154 |
- info_ptr->palette[palette].red, |
155 |
+ png_palette[palette].blue, |
156 |
+ png_palette[palette].green, |
157 |
+ png_palette[palette].red, |
158 |
0xFF); /* alpha */ |
159 |
|
160 |
palette = (pix >> 2) & 0x03; |
161 |
set_pixel_bgra (rawptr, 8, |
162 |
- info_ptr->palette[palette].blue, |
163 |
- info_ptr->palette[palette].green, |
164 |
- info_ptr->palette[palette].red, |
165 |
+ png_palette[palette].blue, |
166 |
+ png_palette[palette].green, |
167 |
+ png_palette[palette].red, |
168 |
0xFF); /* alpha */ |
169 |
|
170 |
palette = pix & 0x03; |
171 |
set_pixel_bgra (rawptr, 12, |
172 |
- info_ptr->palette[palette].blue, |
173 |
- info_ptr->palette[palette].green, |
174 |
- info_ptr->palette[palette].red, |
175 |
+ png_palette[palette].blue, |
176 |
+ png_palette[palette].green, |
177 |
+ png_palette[palette].red, |
178 |
0xFF); /* alpha */ |
179 |
rawptr += 16; |
180 |
} |