GpStatus WINGDIPAPI GdipGetPenBrushFill (GpPen *pen, GpBrush **brush) { if (!pen) return InvalidParameter; return GdipCloneBrush (pen->brush, brush); }
GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen *pen, GpBrush **brush) { TRACE("(%p, %p)\n", pen, brush); if(!pen || !brush) return InvalidParameter; return GdipCloneBrush(pen->brush, brush); }
GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen) { GpStatus stat; TRACE("(%p, %p)\n", pen, clonepen); if(!pen || !clonepen) return InvalidParameter; *clonepen = heap_alloc_zero(sizeof(GpPen)); if(!*clonepen) return OutOfMemory; **clonepen = *pen; (*clonepen)->customstart = NULL; (*clonepen)->customend = NULL; (*clonepen)->brush = NULL; (*clonepen)->dashes = NULL; stat = GdipCloneBrush(pen->brush, &(*clonepen)->brush); if (stat == Ok && pen->customstart) stat = GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart); if (stat == Ok && pen->customend) stat = GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend); if (stat == Ok && pen->dashes) { (*clonepen)->dashes = heap_alloc_zero(pen->numdashes * sizeof(REAL)); if ((*clonepen)->dashes) memcpy((*clonepen)->dashes, pen->dashes, pen->numdashes * sizeof(REAL)); else stat = OutOfMemory; } if (stat != Ok) { GdipDeletePen(*clonepen); *clonepen = NULL; return stat; } TRACE("<-- %p\n", *clonepen); return Ok; }
// coverity[+alloc : arg-*3] GpStatus WINGDIPAPI GdipCreatePen2 (GpBrush *brush, REAL width, GpUnit unit, GpPen **pen) { GpPen *result; GpStatus status; GpBrushType type; ARGB color; if (!gdiplusInitialized) return GdiplusNotInitialized; if (!brush || !pen || unit > UnitCairoPoint || unit == UnitDisplay) return InvalidParameter; result = gdip_pen_new (); if (!result) { *pen = NULL; return OutOfMemory; } result->width = width; result->unit = unit; result->own_brush = TRUE; /* The user supplied brush can be disposed, we must clone it to ensure * it's valid when we need to set the pen. */ status = GdipCloneBrush (brush, &result->brush); if (status != Ok) { GdipDeletePen (result); *pen = NULL; return status; } GdipGetBrushType (brush, &type); if (type == BrushTypeSolidColor) { GdipGetSolidFillColor ((GpSolidFill *) brush, &color); result->color = color; } *pen = result; return Ok; }
GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, GpPen **pen) { GpPen *gp_pen; GpBrush *clone_brush; TRACE("(%p, %.2f, %d, %p)\n", brush, width, unit, pen); if(!pen || !brush) return InvalidParameter; gp_pen = heap_alloc_zero(sizeof(GpPen)); if(!gp_pen) return OutOfMemory; gp_pen->style = GP_DEFAULT_PENSTYLE; gp_pen->width = width; gp_pen->unit = unit; gp_pen->endcap = LineCapFlat; gp_pen->join = LineJoinMiter; gp_pen->miterlimit = 10.0; gp_pen->dash = DashStyleSolid; gp_pen->offset = 0.0; gp_pen->customstart = NULL; gp_pen->customend = NULL; GdipSetMatrixElements(&gp_pen->transform, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0); if(!((gp_pen->unit == UnitWorld) || (gp_pen->unit == UnitPixel))) { FIXME("UnitWorld, UnitPixel only supported units\n"); heap_free(gp_pen); return NotImplemented; } GdipCloneBrush(brush, &clone_brush); gp_pen->brush = clone_brush; *pen = gp_pen; TRACE("<-- %p\n", *pen); return Ok; }