gdiplus: C++ fixes for headers

Paul Chitescu paulc at voip.null.ro
Tue Feb 1 03:28:32 CST 2011


On Tuesday 01 February 2011 09:49:46 am Iain Arnell wrote:
> To fix inclusion of gdiplus.h under C++, this patch:
> * adds missing class declaration for GpPen
> * adds missing class declaration for CharacterRange
> * fixes PenAlignment/GpPenAlignment declaration
> * avoids redeclaration of PixelFormat
>
> Simple testcase:
>
> cat >test.cpp <<EOF
> #include <windows.h>
> #include <gdiplus.h>
> EOF
> wineg++ -c test.cpp
> ---
>  include/gdiplusenums.h   |    2 +-
>  include/gdiplusgpstubs.h |    2 ++
>  include/gdiplusimaging.h |    4 ++--
>  include/gdiplustypes.h   |   25 +++++++++++++++++++++++++
>  4 files changed, 30 insertions(+), 3 deletions(-)
>
> diff --git a/include/gdiplusenums.h b/include/gdiplusenums.h
> index 82f20eb..dc03b29 100644
> --- a/include/gdiplusenums.h
> +++ b/include/gdiplusenums.h
> @@ -734,7 +734,7 @@ typedef enum StringTrimming StringTrimming;
>  typedef enum FontStyle FontStyle;
>  typedef enum StringFormatFlags StringFormatFlags;
>  typedef enum HotkeyPrefix HotkeyPrefix;
> -typedef enum PenAlignment GpPenAlignment;
> +typedef enum PenAlignment PenAlignment;
>  typedef enum PaletteFlags PaletteFlags;
>  typedef enum ImageCodecFlags ImageCodecFlags;
>  typedef enum CombineMode CombineMode;
> diff --git a/include/gdiplusgpstubs.h b/include/gdiplusgpstubs.h
> index 3edc1f4..5a65cd8 100644
> --- a/include/gdiplusgpstubs.h
> +++ b/include/gdiplusgpstubs.h
> @@ -22,6 +22,7 @@
>  #ifdef __cplusplus
>
>  class GpGraphics {};
> +class GpPen {};
>  class GpBrush {};
>  class GpHatch : public GpBrush {};
>  class GpSolidFill : public GpBrush {};
> @@ -92,6 +93,7 @@ typedef WrapMode GpWrapMode;
>  typedef Color GpColor;
>  typedef FlushIntention GpFlushIntention;
>  typedef CoordinateSpace GpCoordinateSpace;
> +typedef PenAlignment GpPenAlignment;
>  typedef PenType GpPenType;
>
>  #endif
> diff --git a/include/gdiplusimaging.h b/include/gdiplusimaging.h
> index 42a00cb..3e9f6ee 100644
> --- a/include/gdiplusimaging.h
> +++ b/include/gdiplusimaging.h
> @@ -110,7 +110,7 @@ public:
>      UINT Width;
>      UINT Height;
>      INT Stride;
> -    PixelFormat PixelFormat;
> +    INT PixelFormat; /* MSDN: "PixelFormat PixelFormat;" */
>      VOID* Scan0;
>      UINT_PTR Reserved;
>  };
> @@ -177,7 +177,7 @@ typedef struct BitmapData
>      UINT Width;
>      UINT Height;
>      INT Stride;
> -    PixelFormat PixelFormat;
> +    INT PixelFormat; /* MSDN: "PixelFormat PixelFormat;" */
>      VOID* Scan0;
>      UINT_PTR Reserved; /* undocumented: stores the lock mode */
>  } BitmapData;
> diff --git a/include/gdiplustypes.h b/include/gdiplustypes.h
> index 4f97432..b84c74e 100644
> --- a/include/gdiplustypes.h
> +++ b/include/gdiplustypes.h
> @@ -199,6 +199,31 @@ public:
>      INT Height;
>  };
>
> +class CharacterRange
> +{
> +public:
> +    CharacterRange()
> +    {
> +        First = Length = 0;
> +    }
> +
> +    CharacterRange(IN INT first, IN INT length)
> +    {
> +        First = first;
> +        Length = length;
> +    }
> +
> +    CharacterRange& operator=(IN const CharacterRange& rhs)
> +    {
> +        First = rhs.First;
> +        Length = rhs.Length;
> +        return *this;
> +    }
> +public:
> +    INT First;
> +    INT Length;
> +};
> +
>  #else /* end of c++ typedefs */
>
>  typedef struct Point

Wouldn't be better to wrap the offending C with:

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}
#endif




More information about the wine-devel mailing list