static void test_closefigure(void) { int nSize, nSizeWitness; HDC hdc = GetDC(0); BeginPath(hdc); MoveToEx(hdc, 95, 95, NULL); LineTo(hdc, 95, 0); LineTo(hdc, 0, 95); CloseFigure(hdc); EndPath(hdc); nSize = GetPath(hdc, NULL, NULL, 0); AbortPath(hdc); BeginPath(hdc); MoveToEx(hdc, 95, 95, NULL); LineTo(hdc, 95, 0); LineTo(hdc, 0, 95); EndPath(hdc); nSizeWitness = GetPath(hdc, NULL, NULL, 0); /* This test shows CloseFigure does not have to add a point at the end of the path */ ok(nSize == nSizeWitness, "Wrong number of points, no point should be added by CloseFigure\n"); ReleaseDC(0, hdc); }
PHP_METHOD(WinGdiPath, abort) { wingdi_devicecontext_object *dc_obj; wingdi_path_object *path_obj; WINGDI_ERROR_HANDLING(); if (zend_parse_parameters_none() == FAILURE) return; WINGDI_RESTORE_ERRORS(); path_obj = zend_object_store_get_object(getThis() TSRMLS_CC); dc_obj = zend_object_store_get_object(path_obj->device_context TSRMLS_CC); RETURN_BOOL(AbortPath(dc_obj->hdc)); }
GlyphPath* GlyphPathCache::Create(HDC hDC, const FontWrapper* f, WCHAR c) { CStringW key = CStringW((LPCWSTR)*f) + c; GlyphPath* path = NULL; if(m_key2obj.Lookup(key, path)) { return path; } BeginPath(hDC); TextOutW(hDC, 0, 0, &c, 1); CloseFigure(hDC); if(!EndPath(hDC)) { AbortPath(hDC); ASSERT(0); return NULL; } path = DNew GlyphPath(); int count = GetPath(hDC, NULL, NULL, 0); if(count > 0) { path->points.SetCount(count); path->types.SetCount(count); if(count != GetPath(hDC, path->points.GetData(), path->types.GetData(), count)) { ASSERT(0); delete path; return NULL; } } Add(key, path); return path; }
static void test_widenpath(void) { HDC hdc = GetDC(0); HPEN greenPen, narrowPen; POINT pnt[6]; INT nSize, ret; /* Create a pen to be used in WidenPath */ greenPen = CreatePen(PS_SOLID, 10, RGB(0,0,0)); SelectObject(hdc, greenPen); /* Prepare a path */ pnt[0].x = 100; pnt[0].y = 0; pnt[1].x = 200; pnt[1].y = 0; pnt[2].x = 300; pnt[2].y = 100; pnt[3].x = 300; pnt[3].y = 200; pnt[4].x = 200; pnt[4].y = 300; pnt[5].x = 100; pnt[5].y = 300; /* Set a polyline path */ BeginPath(hdc); Polyline(hdc, pnt, 6); EndPath(hdc); /* Widen the polyline path */ ok(WidenPath(hdc), "WidenPath fails while widening a poyline path.\n"); /* Test if WidenPath seems to have done his job */ nSize = GetPath(hdc, NULL, NULL, 0); ok(nSize != -1, "GetPath fails after calling WidenPath.\n"); ok(nSize > 6, "Path number of points is too low. Should be more than 6 but is %d\n", nSize); AbortPath(hdc); /* Test WidenPath with an open path (last error only set on Win2k and later) */ SetLastError(0xdeadbeef); BeginPath(hdc); ret = WidenPath(hdc); ok(ret == FALSE && (GetLastError() == ERROR_CAN_NOT_COMPLETE || GetLastError() == 0xdeadbeef), "WidenPath fails while widening an open path. Return value is %d, should be %d. Error is %u\n", ret, FALSE, GetLastError()); AbortPath(hdc); /* Test when the pen width is equal to 1. The path should change too */ narrowPen = CreatePen(PS_SOLID, 1, RGB(0,0,0)); SelectObject(hdc, narrowPen); BeginPath(hdc); Polyline(hdc, pnt, 6); EndPath(hdc); ret = WidenPath(hdc); nSize = GetPath(hdc, NULL, NULL, 0); ok(nSize > 6, "WidenPath should compute a widdened path with a 1px wide pen. Path length is %d, should be more than 6\n", nSize); ReleaseDC(0, hdc); return; }