Created a new framework for consolidating all drawing tests.
This commit is contained in:
parent
4d8951bbb8
commit
6424ea00ab
|
@ -1,6 +1,7 @@
|
|||
# 22 april 2015
|
||||
|
||||
testCFILES = \
|
||||
test/drawtests.c \
|
||||
test/main.c \
|
||||
test/menus.c \
|
||||
test/page1.c \
|
||||
|
|
|
@ -0,0 +1,231 @@
|
|||
// 9 october 2015
|
||||
#include "test.h"
|
||||
|
||||
struct drawtest {
|
||||
const char *name;
|
||||
void (*draw)(uiAreaDrawParams *p);
|
||||
// TODO mouse event
|
||||
};
|
||||
|
||||
static void drawOriginal(uiAreaDrawParams *p)
|
||||
{
|
||||
uiDrawPath *path;
|
||||
uiDrawBrush brush;
|
||||
uiDrawStrokeParams sp;
|
||||
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.A = 1;
|
||||
|
||||
brush.R = 1;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, p->ClipX + 5, p->ClipY + 5);
|
||||
uiDrawPathLineTo(path, (p->ClipX + p->ClipWidth) - 5, (p->ClipY + p->ClipHeight) - 5);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0.75;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, p->ClipX, p->ClipY);
|
||||
uiDrawPathLineTo(path, p->ClipX + p->ClipWidth, p->ClipY);
|
||||
uiDrawPathLineTo(path, 50, 150);
|
||||
uiDrawPathLineTo(path, 50, 50);
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinRound;
|
||||
sp.Thickness = 5;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.75;
|
||||
brush.B = 0;
|
||||
brush.A = 0.5;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathAddRectangle(path, 120, 80, 50, 50);
|
||||
uiDrawPathEnd(path);
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
uiDrawFreePath(path);
|
||||
brush.A = 1;
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.5;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 5.5, 10.5);
|
||||
uiDrawPathLineTo(path, 5.5, 50.5);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0.5;
|
||||
brush.G = 0.75;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 400, 100);
|
||||
uiDrawPathArcTo(path,
|
||||
400, 100,
|
||||
50,
|
||||
30. * (M_PI / 180.),
|
||||
// note the end angle here
|
||||
// in GDI, the second angle to AngleArc() is relative to the start, not to 0
|
||||
330. * (M_PI / 180.));
|
||||
// TODO add a checkbox for this
|
||||
uiDrawPathLineTo(path, 400, 100);
|
||||
uiDrawPathNewFigureWithArc(path,
|
||||
510, 100,
|
||||
50,
|
||||
30. * (M_PI / 180.),
|
||||
330. * (M_PI / 180.));
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.5;
|
||||
brush.B = 0.75;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 300, 300);
|
||||
uiDrawPathBezierTo(path,
|
||||
350, 320,
|
||||
310, 390,
|
||||
435, 372);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
// based on https://msdn.microsoft.com/en-us/library/windows/desktop/dd756682%28v=vs.85%29.aspx
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
#define XO 50
|
||||
#define YO 250
|
||||
uiDrawPathNewFigure(path, 0 + XO, 0 + YO);
|
||||
uiDrawPathLineTo(path, 200 + XO, 0 + YO);
|
||||
uiDrawPathBezierTo(path,
|
||||
150 + XO, 50 + YO,
|
||||
150 + XO, 150 + YO,
|
||||
200 + XO, 200 + YO);
|
||||
uiDrawPathLineTo(path, 0 + XO, 200 + YO);
|
||||
uiDrawPathBezierTo(path,
|
||||
50 + XO, 150 + YO,
|
||||
50 + XO, 50 + YO,
|
||||
0 + XO, 0 + YO);
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
// first the stroke
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
brush.A = 1;
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
sp.Thickness = 10;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
// and now the fill
|
||||
{
|
||||
uiDrawBrushGradientStop stops[2];
|
||||
|
||||
stops[0].Pos = 0.0;
|
||||
stops[0].R = 0.0;
|
||||
stops[0].G = 1.0;
|
||||
stops[0].B = 1.0;
|
||||
stops[0].A = 0.25;
|
||||
stops[1].Pos = 1.0;
|
||||
stops[1].R = 0.0;
|
||||
stops[1].G = 0.0;
|
||||
stops[1].B = 1.0;
|
||||
stops[1].A = 1.0;
|
||||
brush.Type = uiDrawBrushTypeLinearGradient;
|
||||
brush.X0 = 100 + XO;
|
||||
brush.Y0 = 0 + YO;
|
||||
brush.X1 = 100 + XO;
|
||||
brush.Y1 = 200 + YO;
|
||||
brush.Stops = stops;
|
||||
brush.NumStops = 2;
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
}
|
||||
#undef YO
|
||||
#undef XO
|
||||
uiDrawFreePath(path);
|
||||
|
||||
// based on https://msdn.microsoft.com/en-us/library/windows/desktop/dd756679%28v=vs.85%29.aspx
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 585, 235);
|
||||
uiDrawPathArcTo(path,
|
||||
510, 235,
|
||||
75,
|
||||
0,
|
||||
// TODO why doesn't 360° work
|
||||
2 * M_PI - 0.1);
|
||||
uiDrawPathEnd(path);
|
||||
// first the stroke
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
brush.A = 1;
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
sp.Thickness = 1;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
// then the fill
|
||||
{
|
||||
uiDrawBrushGradientStop stops[2];
|
||||
|
||||
stops[0].Pos = 0.0;
|
||||
stops[0].R = 1.0;
|
||||
stops[0].G = 1.0;
|
||||
stops[0].B = 0.0;
|
||||
stops[0].A = 1.0;
|
||||
stops[1].Pos = 1.0;
|
||||
stops[1].R = ((double) 0x22) / 255.0;
|
||||
stops[1].G = ((double) 0x8B) / 255.0;
|
||||
stops[1].B = ((double) 0x22) / 255.0;
|
||||
stops[1].A = 1.0;
|
||||
brush.Type = uiDrawBrushTypeRadialGradient;
|
||||
// start point
|
||||
brush.X0 = 510;
|
||||
brush.Y0 = 235;
|
||||
// outer circle's center
|
||||
brush.X1 = 510;
|
||||
brush.Y1 = 235;
|
||||
brush.OuterRadius = 75;
|
||||
brush.Stops = stops;
|
||||
brush.NumStops = 2;
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
}
|
||||
uiDrawFreePath(path);
|
||||
}
|
||||
|
||||
static const struct drawtest tests[] = {
|
||||
{ "Original uiArea test", drawOriginal },
|
||||
};
|
||||
|
||||
void runDrawTest(intmax_t n, uiAreaDrawParams *p)
|
||||
{
|
||||
(*(tests[n].draw))(p);
|
||||
}
|
211
test/page6.c
211
test/page6.c
|
@ -14,216 +14,7 @@ static struct handler handler;
|
|||
|
||||
static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p)
|
||||
{
|
||||
uiDrawPath *path;
|
||||
uiDrawBrush brush;
|
||||
uiDrawStrokeParams sp;
|
||||
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.A = 1;
|
||||
|
||||
brush.R = 1;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, p->ClipX + 5, p->ClipY + 5);
|
||||
uiDrawPathLineTo(path, (p->ClipX + p->ClipWidth) - 5, (p->ClipY + p->ClipHeight) - 5);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0.75;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, p->ClipX, p->ClipY);
|
||||
uiDrawPathLineTo(path, p->ClipX + p->ClipWidth, p->ClipY);
|
||||
uiDrawPathLineTo(path, 50, 150);
|
||||
uiDrawPathLineTo(path, 50, 50);
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinRound;
|
||||
sp.Thickness = 5;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.75;
|
||||
brush.B = 0;
|
||||
brush.A = 0.5;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathAddRectangle(path, 120, 80, 50, 50);
|
||||
uiDrawPathEnd(path);
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
uiDrawFreePath(path);
|
||||
brush.A = 1;
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.5;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 5.5, 10.5);
|
||||
uiDrawPathLineTo(path, 5.5, 50.5);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0.5;
|
||||
brush.G = 0.75;
|
||||
brush.B = 0;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 400, 100);
|
||||
uiDrawPathArcTo(path,
|
||||
400, 100,
|
||||
50,
|
||||
30. * (M_PI / 180.),
|
||||
// note the end angle here
|
||||
// in GDI, the second angle to AngleArc() is relative to the start, not to 0
|
||||
330. * (M_PI / 180.));
|
||||
// TODO add a checkbox for this
|
||||
uiDrawPathLineTo(path, 400, 100);
|
||||
uiDrawPathNewFigureWithArc(path,
|
||||
510, 100,
|
||||
50,
|
||||
30. * (M_PI / 180.),
|
||||
330. * (M_PI / 180.));
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
brush.R = 0;
|
||||
brush.G = 0.5;
|
||||
brush.B = 0.75;
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 300, 300);
|
||||
uiDrawPathBezierTo(path,
|
||||
350, 320,
|
||||
310, 390,
|
||||
435, 372);
|
||||
uiDrawPathEnd(path);
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.Thickness = 1;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
uiDrawFreePath(path);
|
||||
|
||||
// based on https://msdn.microsoft.com/en-us/library/windows/desktop/dd756682%28v=vs.85%29.aspx
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
#define XO 50
|
||||
#define YO 250
|
||||
uiDrawPathNewFigure(path, 0 + XO, 0 + YO);
|
||||
uiDrawPathLineTo(path, 200 + XO, 0 + YO);
|
||||
uiDrawPathBezierTo(path,
|
||||
150 + XO, 50 + YO,
|
||||
150 + XO, 150 + YO,
|
||||
200 + XO, 200 + YO);
|
||||
uiDrawPathLineTo(path, 0 + XO, 200 + YO);
|
||||
uiDrawPathBezierTo(path,
|
||||
50 + XO, 150 + YO,
|
||||
50 + XO, 50 + YO,
|
||||
0 + XO, 0 + YO);
|
||||
uiDrawPathCloseFigure(path);
|
||||
uiDrawPathEnd(path);
|
||||
// first the stroke
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
brush.A = 1;
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
sp.Thickness = 10;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
// and now the fill
|
||||
{
|
||||
uiDrawBrushGradientStop stops[2];
|
||||
|
||||
stops[0].Pos = 0.0;
|
||||
stops[0].R = 0.0;
|
||||
stops[0].G = 1.0;
|
||||
stops[0].B = 1.0;
|
||||
stops[0].A = 0.25;
|
||||
stops[1].Pos = 1.0;
|
||||
stops[1].R = 0.0;
|
||||
stops[1].G = 0.0;
|
||||
stops[1].B = 1.0;
|
||||
stops[1].A = 1.0;
|
||||
brush.Type = uiDrawBrushTypeLinearGradient;
|
||||
brush.X0 = 100 + XO;
|
||||
brush.Y0 = 0 + YO;
|
||||
brush.X1 = 100 + XO;
|
||||
brush.Y1 = 200 + YO;
|
||||
brush.Stops = stops;
|
||||
brush.NumStops = 2;
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
}
|
||||
#undef YO
|
||||
#undef XO
|
||||
uiDrawFreePath(path);
|
||||
|
||||
// based on https://msdn.microsoft.com/en-us/library/windows/desktop/dd756679%28v=vs.85%29.aspx
|
||||
path = uiDrawNewPath(uiDrawFillModeWinding);
|
||||
uiDrawPathNewFigure(path, 585, 235);
|
||||
uiDrawPathArcTo(path,
|
||||
510, 235,
|
||||
75,
|
||||
0,
|
||||
// TODO why doesn't 360° work
|
||||
2 * M_PI - 0.1);
|
||||
uiDrawPathEnd(path);
|
||||
// first the stroke
|
||||
brush.Type = uiDrawBrushTypeSolid;
|
||||
brush.R = 0;
|
||||
brush.G = 0;
|
||||
brush.B = 0;
|
||||
brush.A = 1;
|
||||
sp.Cap = uiDrawLineCapFlat;
|
||||
sp.Join = uiDrawLineJoinMiter;
|
||||
sp.MiterLimit = uiDrawDefaultMiterLimit;
|
||||
sp.Thickness = 1;
|
||||
uiDrawStroke(p->Context, path, &brush, &sp);
|
||||
// then the fill
|
||||
{
|
||||
uiDrawBrushGradientStop stops[2];
|
||||
|
||||
stops[0].Pos = 0.0;
|
||||
stops[0].R = 1.0;
|
||||
stops[0].G = 1.0;
|
||||
stops[0].B = 0.0;
|
||||
stops[0].A = 1.0;
|
||||
stops[1].Pos = 1.0;
|
||||
stops[1].R = ((double) 0x22) / 255.0;
|
||||
stops[1].G = ((double) 0x8B) / 255.0;
|
||||
stops[1].B = ((double) 0x22) / 255.0;
|
||||
stops[1].A = 1.0;
|
||||
brush.Type = uiDrawBrushTypeRadialGradient;
|
||||
// start point
|
||||
brush.X0 = 510;
|
||||
brush.Y0 = 235;
|
||||
// outer circle's center
|
||||
brush.X1 = 510;
|
||||
brush.Y1 = 235;
|
||||
brush.OuterRadius = 75;
|
||||
brush.Stops = stops;
|
||||
brush.NumStops = 2;
|
||||
uiDrawFill(p->Context, path, &brush);
|
||||
}
|
||||
uiDrawFreePath(path);
|
||||
runDrawTest(0, p);
|
||||
}
|
||||
|
||||
static uintmax_t handlerHScrollMax(uiAreaHandler *a, uiArea *area)
|
||||
|
|
|
@ -49,3 +49,6 @@ extern uiBox *makePage5(void);
|
|||
|
||||
// page6.c
|
||||
extern uiBox *makePage6(void);
|
||||
|
||||
// drawtests.c
|
||||
extern void runDrawTest(intmax_t, uiAreaDrawParams *);
|
||||
|
|
Loading…
Reference in New Issue