Evan Stade : gdiplus: Updated GpBrush functions.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 3 08:04:51 CDT 2007


Module: wine
Branch: master
Commit: 7929ba8dcecae2a0faaf8b7f7e32c5a4371f5bff
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7929ba8dcecae2a0faaf8b7f7e32c5a4371f5bff

Author: Evan Stade <estade at gmail.com>
Date:   Thu Aug  2 17:52:55 2007 -0700

gdiplus: Updated GpBrush functions.

---

 dlls/gdiplus/brush.c |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/dlls/gdiplus/brush.c b/dlls/gdiplus/brush.c
index d993119..d9f06ad 100644
--- a/dlls/gdiplus/brush.c
+++ b/dlls/gdiplus/brush.c
@@ -41,6 +41,35 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone)
 
             (*clone)->gdibrush = CreateBrushIndirect(&(*clone)->lb);
             break;
+        case BrushTypePathGradient:{
+            GpPathGradient *src, *dest;
+            INT count;
+
+            *clone = GdipAlloc(sizeof(GpPathGradient));
+            if (!*clone) return OutOfMemory;
+
+            src = (GpPathGradient*) brush,
+            dest = (GpPathGradient*) *clone;
+            count = src->pathdata.Count;
+
+            memcpy(dest, src, sizeof(GpPathGradient));
+
+            dest->pathdata.Count = count;
+            dest->pathdata.Points = GdipAlloc(count * sizeof(PointF));
+            dest->pathdata.Types = GdipAlloc(count);
+
+            if(!dest->pathdata.Points || !dest->pathdata.Types){
+                GdipFree(dest->pathdata.Points);
+                GdipFree(dest->pathdata.Types);
+                GdipFree(dest);
+                return OutOfMemory;
+            }
+
+            memcpy(dest->pathdata.Points, src->pathdata.Points, count * sizeof(PointF));
+            memcpy(dest->pathdata.Types, src->pathdata.Types, count);
+
+            break;
+        }
         default:
             return NotImplemented;
     }
@@ -162,6 +191,17 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush)
 {
     if(!brush)  return InvalidParameter;
 
+    switch(brush->bt)
+    {
+        case BrushTypePathGradient:
+            GdipFree(((GpPathGradient*) brush)->pathdata.Points);
+            GdipFree(((GpPathGradient*) brush)->pathdata.Types);
+            break;
+        case BrushTypeSolidColor:
+        default:
+            break;
+    }
+
     DeleteObject(brush->gdibrush);
     GdipFree(brush);
 




More information about the wine-cvs mailing list