本文整理汇总了C++中gdiplus::GraphicsPath::Clone方法的典型用法代码示例。如果您正苦于以下问题:C++ GraphicsPath::Clone方法的具体用法?C++ GraphicsPath::Clone怎么用?C++ GraphicsPath::Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gdiplus::GraphicsPath
的用法示例。
在下文中一共展示了GraphicsPath::Clone方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawGraphicsPath
//-----------------------------------------------------------------------------
void GdiplusDrawContext::drawGraphicsPath (CGraphicsPath* _path, PathDrawMode mode, CGraphicsTransform* t)
{
GdiplusGraphicsPath* gdiPlusPath = dynamic_cast<GdiplusGraphicsPath*> (_path);
if (gdiPlusPath && pGraphics)
{
GdiplusDrawScope drawScope (pGraphics, currentState.clipRect, getCurrentTransform ());
Gdiplus::GraphicsPath* path = gdiPlusPath->getGraphicsPath ();
if (t)
{
Gdiplus::Matrix matrix;
convert (matrix, *t);
path = path->Clone ();
path->Transform (&matrix);
}
if (mode == kPathStroked)
{
pGraphics->DrawPath (getPen (), path);
}
else
{
path->SetFillMode (mode == kPathFilledEvenOdd ? Gdiplus::FillModeAlternate : Gdiplus::FillModeWinding);
pGraphics->FillPath (getBrush (), path);
}
if (path != gdiPlusPath->getGraphicsPath ())
delete path;
}
}
示例2: fillRadialGradient
//-----------------------------------------------------------------------------
void GdiplusDrawContext::fillRadialGradient (CGraphicsPath* _path, const CGradient& gradient, const CPoint& center, CCoord radius, const CPoint& originOffset, bool evenOdd, CGraphicsTransform* t)
{
#if DEBUG
DebugPrint ("WARNING: GdiplusDrawContext::fillRadialGradient is not working as expected ! FIXME\n");
#endif
GdiplusGraphicsPath* gdiPlusPath = dynamic_cast<GdiplusGraphicsPath*> (_path);
if (gdiPlusPath && pGraphics)
{
GdiplusDrawScope drawScope (pGraphics, currentState.clipRect, getCurrentTransform ());
Gdiplus::GraphicsPath* path = gdiPlusPath->getGraphicsPath ();
if (t)
{
Gdiplus::Matrix matrix;
convert (matrix, *t);
path = path->Clone ();
path->Transform (&matrix);
}
path->SetFillMode (evenOdd ? Gdiplus::FillModeAlternate : Gdiplus::FillModeWinding);
Gdiplus::PointF c1p ((Gdiplus::REAL)(center.x + originOffset.x), (Gdiplus::REAL)(center.y + originOffset.y));
CRect boundingBox = gdiPlusPath->getBoundingBox ();
Gdiplus::GraphicsPath brushPath;
brushPath.AddEllipse ((Gdiplus::REAL)boundingBox.left, (Gdiplus::REAL)boundingBox.top, (Gdiplus::REAL)boundingBox.getWidth (), (Gdiplus::REAL)boundingBox.getHeight ());
Gdiplus::Matrix graphicsMatrix;
pGraphics->GetTransform (&graphicsMatrix);
brushPath.Transform (&graphicsMatrix);
Gdiplus::PathGradientBrush brush (&brushPath);
// set center
brush.SetCenterPoint (c1p);
// set the colors
Gdiplus::Color* colors = new Gdiplus::Color [gradient.getColorStops ().size ()];
Gdiplus::REAL* positions = new Gdiplus::REAL [gradient.getColorStops ().size ()];
uint32_t index = 0;
for (CGradient::ColorStopMap::const_iterator it = gradient.getColorStops ().begin (); it != gradient.getColorStops ().end (); ++it, ++index)
{
CColor color = it->second;
color.alpha = (int8_t)((float)color.alpha * currentState.globalAlpha);
colors[index] = createGdiPlusColor (color);
positions[index] = (Gdiplus::REAL)it->first;
}
brush.SetCenterColor (colors[0]);
INT count = static_cast<INT> (gradient.getColorStops ().size ()) - 1;
brush.SetSurroundColors (colors+1, &count);
pGraphics->FillPath (&brush, path);
if (path != gdiPlusPath->getGraphicsPath ())
delete path;
delete [] colors;
delete [] positions;
}
}
示例3: fillLinearGradient
//-----------------------------------------------------------------------------
void GdiplusDrawContext::fillLinearGradient (CGraphicsPath* _path, const CGradient& gradient, const CPoint& startPoint, const CPoint& endPoint, bool evenOdd, CGraphicsTransform* t)
{
#if DEBUG
DebugPrint ("WARNING: GdiplusDrawContext::fillLinearGradient is not working as expected ! FIXME");
#endif
GdiplusGraphicsPath* gdiPlusPath = dynamic_cast<GdiplusGraphicsPath*> (_path);
if (gdiPlusPath && pGraphics)
{
GdiplusDrawScope drawScope (pGraphics, currentState.clipRect, getCurrentTransform ());
Gdiplus::GraphicsPath* path = gdiPlusPath->getGraphicsPath ();
if (t)
{
Gdiplus::Matrix matrix;
convert (matrix, *t);
path = path->Clone ();
path->Transform (&matrix);
}
Gdiplus::Color* colors = new Gdiplus::Color [gradient.getColorStops ().size ()];
Gdiplus::REAL* positions = new Gdiplus::REAL [gradient.getColorStops ().size ()];
uint32_t index = 0;
for (CGradient::ColorStopMap::const_iterator it = gradient.getColorStops ().begin (); it != gradient.getColorStops ().end (); ++it, ++index)
{
CColor color = it->second;
color.alpha = (int8_t)((float)color.alpha * currentState.globalAlpha);
colors[index] = createGdiPlusColor (color);
positions[index] = (Gdiplus::REAL)it->first;
}
Gdiplus::PointF c1p ((Gdiplus::REAL)(startPoint.x), (Gdiplus::REAL)(startPoint.y));
Gdiplus::PointF c2p ((Gdiplus::REAL)(endPoint.x), (Gdiplus::REAL)(endPoint.y));
Gdiplus::LinearGradientBrush brush (c1p, c2p, colors[0], colors[gradient.getColorStops ().size () - 1]);
brush.SetInterpolationColors (colors, positions, static_cast<INT> (gradient.getColorStops ().size ()));
path->SetFillMode (evenOdd ? Gdiplus::FillModeAlternate : Gdiplus::FillModeWinding);
pGraphics->FillPath (&brush, path);
if (path != gdiPlusPath->getGraphicsPath ())
delete path;
delete [] colors;
delete [] positions;
}
}