gdiplus: Partial implementation of GdipCreateHatchBrush.
diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index 9a513e1..59d3aa2 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -53,6 +53,14 @@
(*clone)->gdibrush = CreateBrushIndirect(&(*clone)->lb);
break;
+ case BrushTypeHatchFill:
+ *clone = GdipAlloc(sizeof(GpHatch));
+ if (!*clone) return OutOfMemory;
+
+ memcpy(*clone, brush, sizeof(GpHatch));
+
+ (*clone)->gdibrush = CreateBrushIndirect(&(*clone)->lb);
+ break;
case BrushTypePathGradient:{
GpPathGradient *src, *dest;
INT count;
@@ -124,6 +132,67 @@
return Ok;
}
+static LONG HatchStyleToHatch(HatchStyle hatchstyle)
+{
+ switch (hatchstyle)
+ {
+ case HatchStyleHorizontal: return HS_HORIZONTAL;
+ case HatchStyleVertical: return HS_VERTICAL;
+ case HatchStyleForwardDiagonal: return HS_FDIAGONAL;
+ case HatchStyleBackwardDiagonal: return HS_BDIAGONAL;
+ case HatchStyleCross: return HS_CROSS;
+ case HatchStyleDiagonalCross: return HS_DIAGCROSS;
+ default: return 0;
+ }
+}
+
+/******************************************************************************
+ * GdipCreateHatchBrush [GDIPLUS.@]
+ */
+GpStatus WINGDIAPI GdipCreateHatchBrush(HatchStyle hatchstyle, ARGB forecol, ARGB backcol, GpHatch **brush)
+{
+ COLORREF fgcol = ARGB2COLORREF(forecol);
+
+ TRACE("(%d, %d, %d, %p)\n", hatchstyle, forecol, backcol, brush);
+
+ if(!brush) return InvalidParameter;
+
+ *brush = GdipAlloc(sizeof(GpHatch));
+ if (!*brush) return OutOfMemory;
+
+ switch (hatchstyle)
+ {
+ case HatchStyleHorizontal:
+ case HatchStyleVertical:
+ case HatchStyleForwardDiagonal:
+ case HatchStyleBackwardDiagonal:
+ case HatchStyleCross:
+ case HatchStyleDiagonalCross:
+ /* Brushes that map to BS_HATCHED */
+ (*brush)->brush.lb.lbStyle = BS_HATCHED;
+ (*brush)->brush.lb.lbColor = fgcol;
+ (*brush)->brush.lb.lbHatch = HatchStyleToHatch(hatchstyle);
+ break;
+
+ default:
+ FIXME("Unimplemented hatch style %d\n", hatchstyle);
+
+ (*brush)->brush.lb.lbStyle = BS_SOLID;
+ (*brush)->brush.lb.lbColor = fgcol;
+ (*brush)->brush.lb.lbHatch = 0;
+ break;
+ }
+
+
+ (*brush)->brush.gdibrush = CreateBrushIndirect(&(*brush)->brush.lb);
+ (*brush)->brush.bt = BrushTypeHatchFill;
+ (*brush)->forecol = forecol;
+ (*brush)->backcol = backcol;
+ (*brush)->hatchstyle = hatchstyle;
+
+ return Ok;
+}
+
/******************************************************************************
* GdipCreateLineBrush [GDIPLUS.@]
*/
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 12a2316..e7ddc2a 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -96,7 +96,7 @@
@ stdcall GdipCreateHBITMAPFromBitmap(ptr ptr long)
@ stub GdipCreateHICONFromBitmap
@ stdcall GdipCreateHalftonePalette()
-@ stub GdipCreateHatchBrush
+@ stdcall GdipCreateHatchBrush(long long long ptr)
@ stdcall GdipCreateImageAttributes(ptr)
@ stdcall GdipCreateLineBrush(ptr ptr long long long ptr)
@ stdcall GdipCreateLineBrushFromRect(ptr long long long long ptr)
diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 714739c..dbeebe3 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -111,6 +111,13 @@
LOGBRUSH lb;
};
+struct GpHatch{
+ GpBrush brush;
+ HatchStyle hatchstyle;
+ ARGB forecol;
+ ARGB backcol;
+};
+
struct GpSolidFill{
GpBrush brush;
ARGB color;
diff --git a/include/gdiplusenums.h b/include/gdiplusenums.h
index 8f7470d..c989000 100644
--- a/include/gdiplusenums.h
+++ b/include/gdiplusenums.h
@@ -357,6 +357,67 @@
MetafileFrameUnitGdi
};
+enum HatchStyle
+{
+ HatchStyleHorizontal = 0,
+ HatchStyleVertical = 1,
+ HatchStyleForwardDiagonal = 2,
+ HatchStyleBackwardDiagonal = 3,
+ HatchStyleCross = 4,
+ HatchStyleDiagonalCross = 5,
+ HatchStyle05Percent = 6,
+ HatchStyle10Percent = 7,
+ HatchStyle20Percent = 8,
+ HatchStyle25Percent = 9,
+ HatchStyle30Percent = 10,
+ HatchStyle40Percent = 11,
+ HatchStyle50Percent = 12,
+ HatchStyle60Percent = 13,
+ HatchStyle70Percent = 14,
+ HatchStyle75Percent = 15,
+ HatchStyle80Percent = 16,
+ HatchStyle90Percent = 17,
+ HatchStyleLightDownwardDiagonal = 18,
+ HatchStyleLightUpwardDiagonal = 19,
+ HatchStyleDarkDownwardDiagonal = 20,
+ HatchStyleDarkUpwardDiagonal = 21,
+ HatchStyleWideDownwardDiagonal = 22,
+ HatchStyleWideUpwardDiagonal = 23,
+ HatchStyleLightVertical = 24,
+ HatchStyleLightHorizontal = 25,
+ HatchStyleNarrowVertical = 26,
+ HatchStyleNarrowHorizontal = 27,
+ HatchStyleDarkVertical = 28,
+ HatchStyleDarkHorizontal = 29,
+ HatchStyleDashedDownwardDiagonal = 30,
+ HatchStyleDashedUpwardDiagonal = 31,
+ HatchStyleDashedHorizontal = 32,
+ HatchStyleDashedVertical = 33,
+ HatchStyleSmallConfetti = 34,
+ HatchStyleLargeConfetti = 35,
+ HatchStyleZigZag = 36,
+ HatchStyleWave = 37,
+ HatchStyleDiagonalBrick = 38,
+ HatchStyleHorizontalBrick = 39,
+ HatchStyleWeave = 40,
+ HatchStylePlaid = 41,
+ HatchStyleDivot = 42,
+ HatchStyleDottedGrid = 43,
+ HatchStyleDottedDiamond = 44,
+ HatchStyleShingle = 45,
+ HatchStyleTrellis = 46,
+ HatchStyleSphere = 47,
+ HatchStyleSmallGrid = 48,
+ HatchStyleSmallCheckerBoard = 49,
+ HatchStyleLargeCheckerBoard = 50,
+ HatchStyleOutlinedDiamond = 51,
+ HatchStyleSolidDiamond = 52,
+ HatchStyleTotal = 53,
+ HatchStyleLargeGrid = HatchStyleCross,
+ HatchStyleMin = HatchStyleHorizontal,
+ HatchStyleMax = HatchStyleTotal - 1
+};
+
#ifndef __cplusplus
typedef enum Unit Unit;
@@ -395,6 +456,7 @@
typedef enum GpTestControlEnum GpTestControlEnum;
typedef enum MetafileFrameUnit MetafileFrameUnit;
typedef enum PenType PenType;
+typedef enum HatchStyle HatchStyle;
#endif /* end of c typedefs */
diff --git a/include/gdiplusgpstubs.h b/include/gdiplusgpstubs.h
index a768638..3edc1f4 100644
--- a/include/gdiplusgpstubs.h
+++ b/include/gdiplusgpstubs.h
@@ -23,6 +23,7 @@
class GpGraphics {};
class GpBrush {};
+class GpHatch : public GpBrush {};
class GpSolidFill : public GpBrush {};
class GpPath {};
class GpMatrix {};
@@ -49,6 +50,7 @@
typedef struct GpGraphics GpGraphics;
typedef struct GpPen GpPen;
typedef struct GpBrush GpBrush;
+typedef struct GpHatch GpHatch;
typedef struct GpSolidFill GpSolidFill;
typedef struct GpPath GpPath;
typedef struct GpMatrix GpMatrix;