Author: spouliot
Date: 2007-03-22 12:03:09 -0500 (Thu, 22 Mar 2007)
New Revision: 74820
Modified:
trunk/libgdiplus/src/emfcodec.c
trunk/libgdiplus/src/emfcodec.h
trunk/libgdiplus/src/metafile.c
Log:
reworked endian fixes
Modified: trunk/libgdiplus/src/emfcodec.c
===================================================================
--- trunk/libgdiplus/src/emfcodec.c 2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/emfcodec.c 2007-03-22 17:03:09 UTC (rev 74820)
@@ -84,6 +84,14 @@
return &emf_codec;
}
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GETDW(x) (*(DWORD*)(data + (x)))
+#define GETFLOAT(x) (*(float*)(data + (x)))
+#else
+#define GETDW(x) (GUINT32_FROM_LE(*(DWORD*)(data + (x))))
+#define GETFLOAT(x) ((float)GETDW(x))
+#endif
+
static DWORD
GetColor (DWORD color)
{
Modified: trunk/libgdiplus/src/emfcodec.h
===================================================================
--- trunk/libgdiplus/src/emfcodec.h 2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/emfcodec.h 2007-03-22 17:03:09 UTC (rev 74820)
@@ -41,14 +41,6 @@
if (params < (x)) goto cleanup; \
} while (0)
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define GETDW(x) (*(DWORD*)(data + (x)))
-#define GETFLOAT(x) (*(float*)(data + (x)))
-#else
-#define GETDW(x) (GUINT32_FROM_LE(*(DWORD*)(data + (x))))
-#define GETFLOAT(x) ((float)GETDW(x))
-#endif
-
#define EMF_FUNCTION 0
#define EMF_RECORDSIZE 4
#define DWP1 8
Modified: trunk/libgdiplus/src/metafile.c
===================================================================
--- trunk/libgdiplus/src/metafile.c 2007-03-22 16:49:15 UTC (rev 74819)
+++ trunk/libgdiplus/src/metafile.c 2007-03-22 17:03:09 UTC (rev 74820)
@@ -1059,9 +1059,24 @@
return Ok;
}
+static void
+WmfPlaceableFileHeaderLE (WmfPlaceableFileHeader *wmfPlaceableFileHeader)
+{
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+ /* header->Key is already adjusted */
+ wmfPlaceableFileHeader->Hmf = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Hmf);
+ wmfPlaceableFileHeader->BoundingBox.Left = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Left);
+ wmfPlaceableFileHeader->BoundingBox.Top = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Top);
+ wmfPlaceableFileHeader->BoundingBox.Right = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Right);
+ wmfPlaceableFileHeader->BoundingBox.Bottom = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Bottom);
+ wmfPlaceableFileHeader->Inch = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Inch);
+ wmfPlaceableFileHeader->Reserved = GUINT32_FROM_LE
(wmfPlaceableFileHeader->Reserved);
+ wmfPlaceableFileHeader->Checksum = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Checksum);
+#endif
+}
-static GpStatus
-combine_headers (GDIPCONST WmfPlaceableFileHeader *wmfPlaceableFileHeader,
MetafileHeader *header)
+static void
+MetafileHeaderLE (MetafileHeader *header)
{
#if G_BYTE_ORDER != G_LITTLE_ENDIAN
header->WmfHeader.mtType = GUINT16_FROM_LE (header->WmfHeader.mtType);
@@ -1071,18 +1086,12 @@
header->WmfHeader.mtNoObjects = GUINT16_FROM_LE
(header->WmfHeader.mtNoObjects);
header->WmfHeader.mtMaxRecord = GUINT32_FROM_LE
(header->WmfHeader.mtMaxRecord);
header->WmfHeader.mtNoParameters = GUINT16_FROM_LE
(header->WmfHeader.mtNoParameters);
- if (wmfPlaceableFileHeader) {
- /* header->Key is already adjusted */
- wmfPlaceableFileHeader->Hmf = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Hmf);
- wmfPlaceableFileHeader->BoundingBox.Left = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Left);
- wmfPlaceableFileHeader->BoundingBox.Top = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Top);
- wmfPlaceableFileHeader->BoundingBox.Right = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Right);
- wmfPlaceableFileHeader->BoundingBox.Bottom = GUINT16_FROM_LE
(wmfPlaceableFileHeader->BoundingBox.Bottom);
- wmfPlaceableFileHeader->Inch = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Inch);
- wmfPlaceableFileHeader->Reserved = GUINT32_FROM_LE
(wmfPlaceableFileHeader->Reserved);
- wmfPlaceableFileHeader->Checksum = GUINT16_FROM_LE
(wmfPlaceableFileHeader->Checksum);
- }
#endif
+}
+
+static GpStatus
+combine_headers (GDIPCONST WmfPlaceableFileHeader *wmfPlaceableFileHeader,
MetafileHeader *header)
+{
if (wmfPlaceableFileHeader) {
header->Type = METAFILETYPE_WMFPLACEABLE;
header->X = wmfPlaceableFileHeader->BoundingBox.Left;
@@ -1172,6 +1181,8 @@
if (gdip_read_wmf_data (pointer, (void*)&header->WmfHeader,
size, useFile) != size)
return InvalidParameter;
+ WmfPlaceableFileHeaderLE (&aldus_header);
+ MetafileHeaderLE (header);
status = combine_headers (&aldus_header, header);
break;
case WMF_TYPE_AND_HEADERSIZE_KEY:
@@ -1181,6 +1192,7 @@
if (gdip_read_wmf_data (pointer, (void*)(&header->WmfHeader) +
sizeof (DWORD), size, useFile) != size)
return InvalidParameter;
+ MetafileHeaderLE (header);
status = combine_headers (NULL, header);
break;
case EMF_EMR_HEADER_KEY:
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches