Added uiDrawClip() and implemented it on GTK+.
This commit is contained in:
parent
2fd6ba8081
commit
cc827919b8
|
@ -1299,7 +1299,46 @@ static void drawCSArcNegative(uiAreaDrawParams *p)
|
||||||
uiDrawFreePath(path);
|
uiDrawFreePath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO clip
|
// clip
|
||||||
|
static void drawCSClip(uiAreaDrawParams *p)
|
||||||
|
{
|
||||||
|
uiDrawBrush source;
|
||||||
|
uiDrawStrokeParams sp;
|
||||||
|
uiDrawPath *path;
|
||||||
|
|
||||||
|
crsourcergba(&source, 0, 0, 0, 1);
|
||||||
|
sp.Cap = uiDrawLineCapFlat;
|
||||||
|
sp.Join = uiDrawLineJoinMiter;
|
||||||
|
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||||
|
|
||||||
|
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||||
|
|
||||||
|
uiDrawPathNewFigureWithArc(path,
|
||||||
|
128.0, 128.0,
|
||||||
|
76.8,
|
||||||
|
0, 2 * M_PI,
|
||||||
|
0);
|
||||||
|
uiDrawPathEnd(path);
|
||||||
|
uiDrawClip(p->Context, path);
|
||||||
|
uiDrawFreePath(path);
|
||||||
|
|
||||||
|
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||||
|
uiDrawPathAddRectangle(path, 0, 0, 256, 256);
|
||||||
|
uiDrawPathEnd(path);
|
||||||
|
uiDrawFill(p->Context, path, &source);
|
||||||
|
uiDrawFreePath(path);
|
||||||
|
|
||||||
|
crsourcergba(&source, 0, 1, 0, 1);
|
||||||
|
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||||
|
uiDrawPathNewFigure(path, 0, 0);
|
||||||
|
uiDrawPathLineTo(path, 256, 256);
|
||||||
|
uiDrawPathNewFigure(path, 256, 0);
|
||||||
|
uiDrawPathLineTo(path, 0, 256);
|
||||||
|
uiDrawPathEnd(path);
|
||||||
|
sp.Thickness = 10.0;
|
||||||
|
uiDrawStroke(p->Context, path, &source, &sp);
|
||||||
|
uiDrawFreePath(path);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO clip image
|
// TODO clip image
|
||||||
|
|
||||||
|
@ -1772,6 +1811,7 @@ static const struct drawtest tests[] = {
|
||||||
{ "Direct2D: How to Draw and Fill a Complex Shape", drawD2DComplexShape },
|
{ "Direct2D: How to Draw and Fill a Complex Shape", drawD2DComplexShape },
|
||||||
{ "cairo samples: arc", drawCSArc },
|
{ "cairo samples: arc", drawCSArc },
|
||||||
{ "cairo samples: arc negative", drawCSArcNegative },
|
{ "cairo samples: arc negative", drawCSArcNegative },
|
||||||
|
{ "cairo samples: clip", drawCSClip },
|
||||||
{ "cairo samples: curve rectangle", drawCSCurveRectangle },
|
{ "cairo samples: curve rectangle", drawCSCurveRectangle },
|
||||||
{ "cairo samples: curve to", drawCSCurveTo },
|
{ "cairo samples: curve to", drawCSCurveTo },
|
||||||
{ "cairo samples: fill and stroke2", drawCSFillAndStroke2 },
|
{ "cairo samples: fill and stroke2", drawCSFillAndStroke2 },
|
||||||
|
|
3
ui.h
3
ui.h
|
@ -425,7 +425,8 @@ _UI_EXTERN void uiDrawMatrixTransformSize(uiDrawMatrix *m, double *x, double *y)
|
||||||
|
|
||||||
_UI_EXTERN void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m);
|
_UI_EXTERN void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m);
|
||||||
|
|
||||||
// TODO put uiDrawClip here
|
// TODO add a uiDrawPathStrokeToFill() or something like that
|
||||||
|
_UI_EXTERN void uiDrawClip(uiDrawContext *c, uiDrawPath *path);
|
||||||
|
|
||||||
_UI_EXTERN void uiDrawSave(uiDrawContext *c);
|
_UI_EXTERN void uiDrawSave(uiDrawContext *c);
|
||||||
_UI_EXTERN void uiDrawRestore(uiDrawContext *c);
|
_UI_EXTERN void uiDrawRestore(uiDrawContext *c);
|
||||||
|
|
14
unix/draw.c
14
unix/draw.c
|
@ -422,6 +422,20 @@ void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
|
||||||
cairo_transform(c->cr, &cm);
|
cairo_transform(c->cr, &cm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uiDrawClip(uiDrawContext *c, uiDrawPath *path)
|
||||||
|
{
|
||||||
|
runPath(path, c->cr);
|
||||||
|
switch (path->fillMode) {
|
||||||
|
case uiDrawFillModeWinding:
|
||||||
|
cairo_set_fill_rule(c->cr, CAIRO_FILL_RULE_WINDING);
|
||||||
|
break;
|
||||||
|
case uiDrawFillModeAlternate:
|
||||||
|
cairo_set_fill_rule(c->cr, CAIRO_FILL_RULE_EVEN_ODD);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cairo_clip(c->cr);
|
||||||
|
}
|
||||||
|
|
||||||
void uiDrawSave(uiDrawContext *c)
|
void uiDrawSave(uiDrawContext *c)
|
||||||
{
|
{
|
||||||
cairo_save(c->cr);
|
cairo_save(c->cr);
|
||||||
|
|
Loading…
Reference in New Issue