GpStatus WINGDIPAPI GdipDeletePen(GpPen *pen) { TRACE("(%p)\n", pen); if(!pen) return InvalidParameter; GdipDeleteBrush(pen->brush); GdipDeleteCustomLineCap(pen->customstart); GdipDeleteCustomLineCap(pen->customend); heap_free(pen->dashes); heap_free(pen); return Ok; }
static void test_scale(void) { GpCustomLineCap *custom; GpPath *path; REAL scale; GpStatus stat; stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat); stat = GdipCreateCustomLineCap(NULL, path, LineCapFlat, 0.0, &custom); expect(Ok, stat); /* NULL args */ stat = GdipGetCustomLineCapWidthScale(NULL, NULL); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapWidthScale(NULL, &scale); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapWidthScale(custom, NULL); expect(InvalidParameter, stat); /* valid args */ scale = (REAL)0xdeadbeef; stat = GdipGetCustomLineCapWidthScale(custom, &scale); expect(Ok, stat); expectf(1.0, scale); GdipDeleteCustomLineCap(custom); GdipDeletePath(path); }
static void test_inset(void) { GpCustomLineCap *custom; GpPath *path; REAL inset; GpStatus stat; stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat); stat = GdipCreateCustomLineCap(NULL, path, LineCapFlat, 0.0, &custom); expect(Ok, stat); /* NULL args */ stat = GdipGetCustomLineCapBaseInset(NULL, NULL); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapBaseInset(NULL, &inset); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapBaseInset(custom, NULL); expect(InvalidParameter, stat); /* valid args */ inset = (REAL)0xdeadbeef; stat = GdipGetCustomLineCapBaseInset(custom, &inset); expect(Ok, stat); expectf(0.0, inset); GdipDeleteCustomLineCap(custom); GdipDeletePath(path); }
/* FIXME: startcap, dashcap not used. */ GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen *pen, GpLineCap start, GpLineCap end, GpDashCap dash) { TRACE("%p, %d, %d, %d)\n", pen, start, end, dash); if(!pen) return InvalidParameter; GdipDeleteCustomLineCap(pen->customend); GdipDeleteCustomLineCap(pen->customstart); pen->customend = NULL; pen->customstart = NULL; pen->startcap = start; pen->endcap = end; pen->dashcap = dash; return Ok; }
GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen *pen, GpLineCap cap) { TRACE("(%p, %d)\n", pen, cap); if(!pen) return InvalidParameter; GdipDeleteCustomLineCap(pen->customstart); pen->customstart = NULL; pen->startcap = cap; return Ok; }
static void test_constructor_destructor(void) { GpCustomLineCap *custom; GpPath *path, *path2; GpStatus stat; stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat); stat = GdipCreatePath(FillModeAlternate, &path2); expect(Ok, stat); stat = GdipAddPathRectangle(path2, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat); /* NULL args */ stat = GdipCreateCustomLineCap(NULL, NULL, LineCapFlat, 0.0, NULL); expect(InvalidParameter, stat); stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 0.0, NULL); expect(InvalidParameter, stat); stat = GdipCreateCustomLineCap(NULL, path, LineCapFlat, 0.0, NULL); expect(InvalidParameter, stat); stat = GdipCreateCustomLineCap(NULL, NULL, LineCapFlat, 0.0, &custom); expect(InvalidParameter, stat); stat = GdipDeleteCustomLineCap(NULL); expect(InvalidParameter, stat); /* valid args */ stat = GdipCreateCustomLineCap(NULL, path2, LineCapFlat, 0.0, &custom); expect(Ok, stat); stat = GdipDeleteCustomLineCap(custom); expect(Ok, stat); /* it's strange but native returns NotImplemented on stroke == NULL */ stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 10.0, &custom); todo_wine expect(NotImplemented, stat); GdipDeletePath(path2); GdipDeletePath(path); }
GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen *pen, GpLineCap cap) { TRACE("(%p, %d)\n", pen, cap); if(!pen) return InvalidParameter; /* The old custom cap gets deleted even if the new style is LineCapCustom. */ GdipDeleteCustomLineCap(pen->customend); pen->customend = NULL; pen->endcap = cap; return Ok; }
GpStatus WINGDIPAPI GdipSetPenStartCap (GpPen *pen, GpLineCap startCap) { if (!pen) return InvalidParameter; GdipDeleteCustomLineCap (pen->custom_start_cap); pen->custom_start_cap = NULL; pen->line_cap = startCap; pen->changed = TRUE; return Ok; }
static void test_linejoin(void) { GpCustomLineCap *custom; GpPath *path; GpLineJoin join; GpStatus stat; stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat); stat = GdipCreateCustomLineCap(NULL, path, LineCapFlat, 0.0, &custom); expect(Ok, stat); /* NULL args */ stat = GdipGetCustomLineCapStrokeJoin(NULL, NULL); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapStrokeJoin(custom, NULL); expect(InvalidParameter, stat); stat = GdipGetCustomLineCapStrokeJoin(NULL, &join); expect(InvalidParameter, stat); stat = GdipSetCustomLineCapStrokeJoin(NULL, LineJoinBevel); expect(InvalidParameter, stat); /* LineJoinMiter is default */ stat = GdipGetCustomLineCapStrokeJoin(custom, &join); expect(Ok, stat); expect(LineJoinMiter, join); /* set/get */ stat = GdipSetCustomLineCapStrokeJoin(custom, LineJoinBevel); expect(Ok, stat); stat = GdipGetCustomLineCapStrokeJoin(custom, &join); expect(Ok, stat); expect(LineJoinBevel, join); stat = GdipSetCustomLineCapStrokeJoin(custom, LineJoinRound); expect(Ok, stat); stat = GdipGetCustomLineCapStrokeJoin(custom, &join); expect(Ok, stat); expect(LineJoinRound, join); stat = GdipSetCustomLineCapStrokeJoin(custom, LineJoinMiterClipped); expect(Ok, stat); stat = GdipGetCustomLineCapStrokeJoin(custom, &join); expect(Ok, stat); expect(LineJoinMiterClipped, join); GdipDeleteCustomLineCap(custom); GdipDeletePath(path); }
GpStatus WINGDIPAPI GdipDeletePen (GpPen *pen) { if (!pen) return InvalidParameter; if (pen->dash_count != 0 && pen->own_dash_array) { GdipFree (pen->dash_array); pen->dash_count = 0; pen->dash_array = NULL; } if (pen->own_brush && pen->brush) { GdipDeleteBrush (pen->brush); pen->brush = NULL; } if (pen->compound_count != 0) { GdipFree (pen->compound_array); pen->compound_array = NULL; pen->compound_count = 0; } if (pen->custom_start_cap != NULL) { GdipDeleteCustomLineCap (pen->custom_start_cap); pen->custom_start_cap = NULL; } if (pen->custom_end_cap != NULL) { GdipDeleteCustomLineCap (pen->custom_end_cap); pen->custom_end_cap = NULL; } GdipFree (pen); return Ok; }
GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap* customCap) { GpCustomLineCap * cap; GpStatus ret; TRACE("(%p, %p)\n", pen, customCap); /* native crashes on pen == NULL, customCap != NULL */ if(!customCap) return InvalidParameter; if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){ GdipDeleteCustomLineCap(pen->customstart); pen->startcap = LineCapCustom; pen->customstart = cap; } return ret; }
/* MonoTODO - ignored (always same as start cap) */ GpStatus WINGDIPAPI GdipSetPenEndCap (GpPen *pen, GpLineCap endCap) { if (!pen) return InvalidParameter; /* * This is currently ignored, as Cairo does not support * having a different start and end Cap */ GdipDeleteCustomLineCap (pen->custom_end_cap); pen->custom_end_cap = NULL; pen->end_cap = endCap; pen->changed = TRUE; return Ok; }