aboutsummaryrefslogtreecommitdiff
path: root/src/libui_sdl/libui/test/drawtests.c
diff options
context:
space:
mode:
authorRSDuck <RSDuck@users.noreply.github.com>2020-05-12 16:07:28 +0200
committerRSDuck <rsduck@users.noreply.github.com>2020-06-16 12:06:42 +0200
commite7d076403df7afd6dc8304196211b49e3ed7f464 (patch)
tree1d5ff1e743839f271de77f8bd312c985033c6a89 /src/libui_sdl/libui/test/drawtests.c
parent4cff4b52286a7d1a7e40817d52a5d271a937ddc2 (diff)
parentc17f7b100e36edb1c728dbf21c77f9484d1820c6 (diff)
Merge branch 'generic_jit' of https://github.com/Arisotura/melonDS into generic_jit
Diffstat (limited to 'src/libui_sdl/libui/test/drawtests.c')
-rw-r--r--src/libui_sdl/libui/test/drawtests.c1978
1 files changed, 0 insertions, 1978 deletions
diff --git a/src/libui_sdl/libui/test/drawtests.c b/src/libui_sdl/libui/test/drawtests.c
deleted file mode 100644
index b6de753..0000000
--- a/src/libui_sdl/libui/test/drawtests.c
+++ /dev/null
@@ -1,1978 +0,0 @@
-// 9 october 2015
-#include "test.h"
-
-// TODO
-// - test multiple clips
-// - test saving and restoring clips
-
-struct drawtest {
- const char *name;
- void (*draw)(uiAreaDrawParams *p);
- // TODO mouse event
-};
-
-static void drawOriginal(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush brush;
- uiDrawStrokeParams sp;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- 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. * (uiPi / 180.),
- 300. * (uiPi / 180.),
- 0);
- // the sweep test below doubles as a clockwise test so a checkbox isn't needed anymore
- uiDrawPathLineTo(path, 400, 100);
- uiDrawPathNewFigureWithArc(path,
- 510, 100,
- 50,
- 30. * (uiPi / 180.),
- 300. * (uiPi / 180.),
- 0);
- uiDrawPathCloseFigure(path);
- // and now with 330 to make sure sweeps work properly
- uiDrawPathNewFigure(path, 400, 210);
- uiDrawPathArcTo(path,
- 400, 210,
- 50,
- 30. * (uiPi / 180.),
- 330. * (uiPi / 180.),
- 0);
- uiDrawPathLineTo(path, 400, 210);
- uiDrawPathNewFigureWithArc(path,
- 510, 210,
- 50,
- 30. * (uiPi / 180.),
- 330. * (uiPi / 180.),
- 0);
- 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);
-}
-
-static void drawArcs(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- int start = 20;
- int step = 20;
- int rad = 25;
- int x, y;
- double angle;
- double add;
- int i;
- uiDrawBrush brush;
- uiDrawStrokeParams sp;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- add = (2.0 * uiPi) / 12;
-
- x = start + rad;
- y = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigureWithArc(path,
- x, y,
- rad,
- 0, angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- y += 2 * rad + step;
- x = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigure(path, x, y);
- uiDrawPathArcTo(path,
- x, y,
- rad,
- 0, angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- y += 2 * rad + step;
- x = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigureWithArc(path,
- x, y,
- rad,
- (uiPi / 4), angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- y += 2 * rad + step;
- x = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigure(path, x, y);
- uiDrawPathArcTo(path,
- x, y,
- rad,
- (uiPi / 4), angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- y += 2 * rad + step;
- x = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigureWithArc(path,
- x, y,
- rad,
- uiPi + (uiPi / 5), angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- y += 2 * rad + step;
- x = start + rad;
- angle = 0;
- for (i = 0; i < 13; i++) {
- uiDrawPathNewFigure(path, x, y);
- uiDrawPathArcTo(path,
- x, y,
- rad,
- uiPi + (uiPi / 5), angle,
- 0);
- angle += add;
- x += 2 * rad + step;
- }
-
- uiDrawPathEnd(path);
-
- brush.Type = uiDrawBrushTypeSolid;
- brush.R = 0;
- brush.G = 0;
- brush.B = 0;
- brush.A = 1;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.Thickness = 1;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- uiDrawStroke(p->Context, path, &brush, &sp);
-
- uiDrawFreePath(path);
-}
-
-// Direct2D Documentation Code
-
-static void d2dColorToRGB(uint32_t color, double *r, double *g, double *b)
-{
- uint8_t rr, gg, bb;
-
- rr = (color & 0xFF0000) >> 16;
- gg = (color & 0x00FF00) >> 8;
- bb = color & 0x0000FF;
- *r = ((double) rr) / 255.0;
- *g = ((double) gg) / 255.0;
- *b = ((double) bb) / 255.0;
-}
-#define d2dBlack 0x000000
-#define d2dLightSlateGray 0x778899
-#define d2dCornflowerBlue 0x6495ED
-#define d2dWhite 0xFFFFFF
-#define d2dYellowGreen 0x9ACD32
-#define d2dYellow 0xFFFF00
-#define d2dForestGreen 0x228B22
-#define d2dOliveDrab 0x6B8E23
-#define d2dLightSkyBlue 0x87CEFA
-
-static void d2dSolidBrush(uiDrawBrush *brush, uint32_t color, double alpha)
-{
- brush->Type = uiDrawBrushTypeSolid;
- d2dColorToRGB(color, &(brush->R), &(brush->G), &(brush->B));
- brush->A = alpha;
-}
-
-static void d2dClear(uiAreaDrawParams *p, uint32_t color, double alpha)
-{
- uiDrawPath *path;
- uiDrawBrush brush;
-
- d2dSolidBrush(&brush, color, alpha);
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 0, 0, p->AreaWidth, p->AreaHeight);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &brush);
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/hh780340%28v=vs.85%29.aspx
-// also at https://msdn.microsoft.com/en-us/library/windows/desktop/dd535473%28v=vs.85%29.aspx
-static void drawD2DW8QS(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush brush;
-
- d2dSolidBrush(&brush, d2dBlack, 1.0);
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path,
- 100,
- 100,
- (p->AreaWidth - 100) - 100,
- (p->AreaHeight - 100) - 100);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &brush);
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd370994%28v=vs.85%29.aspx
-static void drawD2DSimpleApp(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush lightSlateGray;
- uiDrawBrush cornflowerBlue;
- uiDrawStrokeParams sp;
- int x, y;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- d2dSolidBrush(&lightSlateGray, d2dLightSlateGray, 1.0);
- d2dSolidBrush(&cornflowerBlue, d2dCornflowerBlue, 1.0);
-
- d2dClear(p, d2dWhite, 1.0);
-
- sp.Thickness = 0.5;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
-
- for (x = 0; x < p->AreaWidth; x += 10) {
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, x, 0);
- uiDrawPathLineTo(path, x, p->AreaHeight);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &lightSlateGray, &sp);
- uiDrawFreePath(path);
- }
-
- for (y = 0; y < p->AreaHeight; y += 10) {
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 0, y);
- uiDrawPathLineTo(path, p->AreaWidth, y);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &lightSlateGray, &sp);
- uiDrawFreePath(path);
- }
-
- double left, top, right, bottom;
-
- left = p->AreaWidth / 2.0 - 50.0;
- right = p->AreaWidth / 2.0 + 50.0;
- top = p->AreaHeight / 2.0 - 50.0;
- bottom = p->AreaHeight / 2.0 + 50.0;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, left, top, right - left, bottom - top);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &lightSlateGray);
- uiDrawFreePath(path);
-
- left = p->AreaWidth / 2.0 - 100.0;
- right = p->AreaWidth / 2.0 + 100.0;
- top = p->AreaHeight / 2.0 - 100.0;
- bottom = p->AreaHeight / 2.0 + 100.0;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, left, top, right - left, bottom - top);
- uiDrawPathEnd(path);
- sp.Thickness = 1.0;
- uiDrawStroke(p->Context, path, &cornflowerBlue, &sp);
- uiDrawFreePath(path);
-}
-
-// TODO? https://msdn.microsoft.com/en-us/library/windows/desktop/dd372260(v=vs.85).aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756654%28v=vs.85%29.aspx
-
-// TODO? all subsections too? https://msdn.microsoft.com/en-us/library/windows/desktop/hh973240%28v=vs.85%29.aspx
-
-// TODO differing examples of? https://msdn.microsoft.com/en-us/library/windows/desktop/dd756651%28v=vs.85%29.aspx
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756680%28v=vs.85%29.aspx
-static void drawD2DSolidBrush(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush black;
- uiDrawBrush yellowGreen;
- uiDrawStrokeParams sp;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- d2dSolidBrush(&black, d2dBlack, 1.0);
- d2dSolidBrush(&yellowGreen, d2dYellowGreen, 1.0);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- // the example doesn't define a rectangle
- // 150x150 seems to be right given the other examples though
- uiDrawPathAddRectangle(path, 25, 25, 150, 150);
- uiDrawPathEnd(path);
-
- uiDrawFill(p->Context, path, &yellowGreen);
- sp.Thickness = 1.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- uiDrawStroke(p->Context, path, &black, &sp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756678%28v=vs.85%29.aspx
-static void drawD2DLinearBrush(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush black;
- uiDrawBrush gradient;
- uiDrawBrushGradientStop stops[2];
- uiDrawStrokeParams sp;
-
- uiDrawMatrix m;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- // leave some room
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 25, 25);
- uiDrawTransform(p->Context, &m);
-
- gradient.Type = uiDrawBrushTypeLinearGradient;
- gradient.X0 = 0;
- gradient.Y0 = 0;
- gradient.X1 = 150;
- gradient.Y1 = 150;
- stops[0].Pos = 0.0;
- d2dColorToRGB(d2dYellow, &(stops[0].R), &(stops[0].G), &(stops[0].B));
- stops[0].A = 1.0;
- stops[1].Pos = 1.0;
- d2dColorToRGB(d2dForestGreen, &(stops[1].R), &(stops[1].G), &(stops[1].B));
- stops[1].A = 1.0;
- gradient.Stops = stops;
- gradient.NumStops = 2;
-
- d2dSolidBrush(&black, d2dBlack, 1.0);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 0, 0, 150, 150);
- uiDrawPathEnd(path);
-
- uiDrawFill(p->Context, path, &gradient);
- sp.Thickness = 1.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- uiDrawStroke(p->Context, path, &black, &sp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756679%28v=vs.85%29.aspx
-// TODO expand this to change the origin point with a mouse click (not in the original but useful to have)
-static void drawD2DRadialBrush(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush black;
- uiDrawBrush gradient;
- uiDrawBrushGradientStop stops[2];
- uiDrawStrokeParams sp;
-
- uiDrawMatrix m;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- // leave some room
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 25, 25);
- uiDrawTransform(p->Context, &m);
-
- gradient.Type = uiDrawBrushTypeRadialGradient;
- gradient.X0 = 75;
- gradient.Y0 = 75;
- gradient.X1 = 75;
- gradient.Y1 = 75;
- gradient.OuterRadius = 75;
- stops[0].Pos = 0.0;
- d2dColorToRGB(d2dYellow, &(stops[0].R), &(stops[0].G), &(stops[0].B));
- stops[0].A = 1.0;
- stops[1].Pos = 1.0;
- d2dColorToRGB(d2dForestGreen, &(stops[1].R), &(stops[1].G), &(stops[1].B));
- stops[1].A = 1.0;
- gradient.Stops = stops;
- gradient.NumStops = 2;
-
- d2dSolidBrush(&black, d2dBlack, 1.0);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 150, 75);
- uiDrawPathArcTo(path,
- 75, 75,
- 75,
- 0,
- 2 * uiPi,
- 0);
- uiDrawPathEnd(path);
-
- uiDrawFill(p->Context, path, &gradient);
- sp.Thickness = 1.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- uiDrawStroke(p->Context, path, &black, &sp);
-
- uiDrawFreePath(path);
-}
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756677%28v=vs.85%29.aspx
-
-// TODO? other pages have some of these https://msdn.microsoft.com/en-us/library/windows/desktop/dd756653%28v=vs.85%29.aspx
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/ee264309%28v=vs.85%29.aspx
-static void drawD2DPathGeometries(uiAreaDrawParams *p)
-{
- uiDrawPath *leftMountain;
- uiDrawPath *rightMountain;
- uiDrawPath *sun;
- uiDrawPath *sunRays;
- uiDrawPath *river;
- uiDrawBrush radial;
- uiDrawBrush scene;
- uiDrawStrokeParams sp;
- uiDrawBrushGradientStop stops[2];
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- // TODO this is definitely wrong but the example doesn't have the right brush in it
- radial.Type = uiDrawBrushTypeRadialGradient;
- radial.X0 = 75;
- radial.Y0 = 75;
- radial.X1 = 75;
- radial.Y1 = 75;
- radial.OuterRadius = 75;
- stops[0].Pos = 0.0;
- d2dColorToRGB(d2dYellow, &(stops[0].R), &(stops[0].G), &(stops[0].B));
- stops[0].A = 1.0;
- stops[1].Pos = 1.0;
- d2dColorToRGB(d2dForestGreen, &(stops[1].R), &(stops[1].G), &(stops[1].B));
- stops[1].A = 1.0;
- radial.Stops = stops;
- radial.NumStops = 2;
-
- leftMountain = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(leftMountain, 346, 255);
- uiDrawPathLineTo(leftMountain, 267, 177);
- uiDrawPathLineTo(leftMountain, 236, 192);
- uiDrawPathLineTo(leftMountain, 212, 160);
- uiDrawPathLineTo(leftMountain, 156, 255);
- uiDrawPathLineTo(leftMountain, 346, 255);
- uiDrawPathCloseFigure(leftMountain);
- uiDrawPathEnd(leftMountain);
-
- rightMountain = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(rightMountain, 575, 263);
- uiDrawPathLineTo(rightMountain, 481, 146);
- uiDrawPathLineTo(rightMountain, 449, 181);
- uiDrawPathLineTo(rightMountain, 433, 159);
- uiDrawPathLineTo(rightMountain, 401, 214);
- uiDrawPathLineTo(rightMountain, 381, 199);
- uiDrawPathLineTo(rightMountain, 323, 263);
- uiDrawPathLineTo(rightMountain, 575, 263);
- uiDrawPathCloseFigure(rightMountain);
- uiDrawPathEnd(rightMountain);
-
- sun = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(sun,
- (440.0 - 270.0) / 2 + 270.0, 255,
- 85,
- uiPi, uiPi,
- 0);
- uiDrawPathCloseFigure(sun);
- uiDrawPathEnd(sun);
-
- // the original examples had these as hollow figures
- // we don't support them, so we'll have to stroke it separately
- sunRays = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(sunRays, 299, 182);
- uiDrawPathBezierTo(sunRays,
- 299, 182,
- 294, 176,
- 285, 178);
- uiDrawPathBezierTo(sunRays,
- 276, 179,
- 272, 173,
- 272, 173);
- uiDrawPathNewFigure(sunRays, 354, 156);
- uiDrawPathBezierTo(sunRays,
- 354, 156,
- 358, 149,
- 354, 142);
- uiDrawPathBezierTo(sunRays,
- 349, 134,
- 354, 127,
- 354, 127);
- uiDrawPathNewFigure(sunRays, 322, 164);
- uiDrawPathBezierTo(sunRays,
- 322, 164,
- 322, 156,
- 314, 152);
- uiDrawPathBezierTo(sunRays,
- 306, 149,
- 305, 141,
- 305, 141);
- uiDrawPathNewFigure(sunRays, 385, 164);
- uiDrawPathBezierTo(sunRays,
- 385, 164,
- 392, 161,
- 394, 152);
- uiDrawPathBezierTo(sunRays,
- 395, 144,
- 402, 141,
- 402, 142);
- uiDrawPathNewFigure(sunRays, 408, 182);
- uiDrawPathBezierTo(sunRays,
- 408, 182,
- 416, 184,
- 422, 178);
- uiDrawPathBezierTo(sunRays,
- 428, 171,
- 435, 173,
- 435, 173);
- uiDrawPathEnd(sunRays);
-
- river = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(river, 183, 392);
- uiDrawPathBezierTo(river,
- 238, 284,
- 472, 345,
- 356, 303);
- uiDrawPathBezierTo(river,
- 237, 261,
- 333, 256,
- 333, 256);
- uiDrawPathBezierTo(river,
- 335, 257,
- 241, 261,
- 411, 306);
- uiDrawPathBezierTo(river,
- 574, 350,
- 288, 324,
- 296, 392);
- uiDrawPathEnd(river);
-
- d2dClear(p, d2dWhite, 1.0);
-
- // TODO draw the grid
-
- uiDrawFill(p->Context, sun, &radial);
-
- d2dSolidBrush(&scene, d2dBlack, 1.0);
- sp.Thickness = 1.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- uiDrawStroke(p->Context, sun, &scene, &sp);
- uiDrawStroke(p->Context, sunRays, &scene, &sp);
-
- d2dSolidBrush(&scene, d2dOliveDrab, 1.0);
- uiDrawFill(p->Context, leftMountain, &scene);
-
- d2dSolidBrush(&scene, d2dBlack, 1.0);
- uiDrawStroke(p->Context, leftMountain, &scene, &sp);
-
- d2dSolidBrush(&scene, d2dLightSkyBlue, 1.0);
- uiDrawFill(p->Context, river, &scene);
-
- d2dSolidBrush(&scene, d2dBlack, 1.0);
- uiDrawStroke(p->Context, river, &scene, &sp);
-
- d2dSolidBrush(&scene, d2dYellowGreen, 1.0);
- uiDrawFill(p->Context, rightMountain, &scene);
-
- d2dSolidBrush(&scene, d2dBlack, 1.0);
- uiDrawStroke(p->Context, rightMountain, &scene, &sp);
-
- uiDrawFreePath(leftMountain);
- uiDrawFreePath(rightMountain);
- uiDrawFreePath(sun);
- uiDrawFreePath(sunRays);
- uiDrawFreePath(river);
-}
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756690%28v=vs.85%29.aspx
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756681%28v=vs.85%29.aspx
-static void drawD2DGeometryGroup(uiAreaDrawParams *p)
-{
- uiDrawPath *alternate;
- uiDrawPath *winding;
- uiDrawBrush fill;
- uiDrawBrush stroke;
- uiDrawStrokeParams sp;
- uiDrawMatrix m;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- alternate = uiDrawNewPath(uiDrawFillModeAlternate);
- uiDrawPathNewFigureWithArc(alternate,
- 105, 105,
- 25,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(alternate,
- 105, 105,
- 50,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(alternate,
- 105, 105,
- 75,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(alternate,
- 105, 105,
- 100,
- 0, 2 * uiPi,
- 0);
- uiDrawPathEnd(alternate);
-
- winding = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(winding,
- 105, 105,
- 25,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(winding,
- 105, 105,
- 50,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(winding,
- 105, 105,
- 75,
- 0, 2 * uiPi,
- 0);
- uiDrawPathNewFigureWithArc(winding,
- 105, 105,
- 100,
- 0, 2 * uiPi,
- 0);
- uiDrawPathEnd(winding);
-
- d2dClear(p, d2dWhite, 1.0);
-
- // TODO grid
-
- // TODO the example doesn't provide these
- d2dSolidBrush(&fill, d2dForestGreen, 1.0);
- d2dSolidBrush(&stroke, d2dCornflowerBlue, 1.0);
-
- sp.Thickness = 1.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
-
- uiDrawFill(p->Context, alternate, &fill);
- uiDrawStroke(p->Context, alternate, &stroke, &sp);
- // TODO text
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 300, 0);
- uiDrawTransform(p->Context, &m);
- uiDrawFill(p->Context, winding, &fill);
- uiDrawStroke(p->Context, winding, &stroke, &sp);
-// // TODO text
-
- uiDrawFreePath(winding);
- uiDrawFreePath(alternate);
-}
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756676%28v=vs.85%29.aspx
-
-// TODO? https://msdn.microsoft.com/en-us/library/windows/desktop/dd370971%28v=vs.85%29.aspx
-
-// TODO are there even examples here? https://msdn.microsoft.com/en-us/library/windows/desktop/dd370966%28v=vs.85%29.aspx
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756687%28v=vs.85%29.aspx
-static void drawD2DRotate(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush original;
- uiDrawBrush fill;
- uiDrawBrush transform;
- uiDrawStrokeParams originalsp;
- uiDrawStrokeParams transformsp;
- uiDrawMatrix m;
-
- originalsp.Dashes = NULL;
- originalsp.NumDashes = 0;
- originalsp.DashPhase = 0;
- transformsp.Dashes = NULL;
- transformsp.NumDashes = 0;
- transformsp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 438.0, 301.5, 498.0 - 438.0, 361.5 - 301.5);
- uiDrawPathEnd(path);
-
- // TODO the example doesn't specify what these should be
- d2dSolidBrush(&original, d2dBlack, 1.0);
- d2dSolidBrush(&fill, d2dWhite, 0.5);
- d2dSolidBrush(&transform, d2dForestGreen, 1.0);
- // TODO this needs to be dashed
- originalsp.Thickness = 1.0;
- originalsp.Cap = uiDrawLineCapFlat;
- originalsp.Join = uiDrawLineJoinMiter;
- originalsp.MiterLimit = uiDrawDefaultMiterLimit;
- transformsp.Thickness = 1.0;
- transformsp.Cap = uiDrawLineCapFlat;
- transformsp.Join = uiDrawLineJoinMiter;
- transformsp.MiterLimit = uiDrawDefaultMiterLimit;
-
- // save for when we do the translated one
- uiDrawSave(p->Context);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixRotate(&m,
- 468.0, 331.5,
- 45.0 * (uiPi / 180));
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawRestore(p->Context);
-
- // translate to test the corner axis
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, -200, -200);
- uiDrawTransform(p->Context, &m);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixRotate(&m,
- 438.0, 301.5,
- 45.0 * (uiPi / 180));
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756688%28v=vs.85%29.aspx
-static void drawD2DScale(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush original;
- uiDrawBrush fill;
- uiDrawBrush transform;
- uiDrawStrokeParams originalsp;
- uiDrawStrokeParams transformsp;
- uiDrawMatrix m;
-
- originalsp.Dashes = NULL;
- originalsp.NumDashes = 0;
- originalsp.DashPhase = 0;
- transformsp.Dashes = NULL;
- transformsp.NumDashes = 0;
- transformsp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 438.0, 80.5, 498.0 - 438.0, 140.5 - 80.5);
- uiDrawPathEnd(path);
-
- // TODO the example doesn't specify what these should be
- d2dSolidBrush(&original, d2dBlack, 1.0);
- d2dSolidBrush(&fill, d2dWhite, 0.5);
- d2dSolidBrush(&transform, d2dForestGreen, 1.0);
- // TODO this needs to be dashed
- originalsp.Thickness = 1.0;
- originalsp.Cap = uiDrawLineCapFlat;
- originalsp.Join = uiDrawLineJoinMiter;
- originalsp.MiterLimit = uiDrawDefaultMiterLimit;
- transformsp.Thickness = 1.0;
- transformsp.Cap = uiDrawLineCapFlat;
- transformsp.Join = uiDrawLineJoinMiter;
- transformsp.MiterLimit = uiDrawDefaultMiterLimit;
-
- // save for when we do the translated one
- uiDrawSave(p->Context);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixScale(&m,
- 438.0, 80.5,
- 1.3, 1.3);
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawRestore(p->Context);
-
- // for testing purposes, show what happens if we scale about (0, 0)
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, -300, 50);
- uiDrawTransform(p->Context, &m);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixScale(&m,
- 0, 0,
- 1.3, 1.3);
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756689%28v=vs.85%29.aspx
-// TODO counterclockwise?!
-void drawD2DSkew(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush original;
- uiDrawBrush fill;
- uiDrawBrush transform;
- uiDrawStrokeParams originalsp;
- uiDrawStrokeParams transformsp;
- uiDrawMatrix m;
-
- originalsp.Dashes = NULL;
- originalsp.NumDashes = 0;
- originalsp.DashPhase = 0;
- transformsp.Dashes = NULL;
- transformsp.NumDashes = 0;
- transformsp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 126.0, 301.5, 186.0 - 126.0, 361.5 - 301.5);
- uiDrawPathEnd(path);
-
- // TODO the example doesn't specify what these should be
- d2dSolidBrush(&original, d2dBlack, 1.0);
- d2dSolidBrush(&fill, d2dWhite, 0.5);
- d2dSolidBrush(&transform, d2dForestGreen, 1.0);
- // TODO this needs to be dashed
- originalsp.Thickness = 1.0;
- originalsp.Cap = uiDrawLineCapFlat;
- originalsp.Join = uiDrawLineJoinMiter;
- originalsp.MiterLimit = uiDrawDefaultMiterLimit;
- transformsp.Thickness = 1.0;
- transformsp.Cap = uiDrawLineCapFlat;
- transformsp.Join = uiDrawLineJoinMiter;
- transformsp.MiterLimit = uiDrawDefaultMiterLimit;
-
- // save for when we do the translated one
- uiDrawSave(p->Context);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixSkew(&m,
- 126.0, 301.5,
- 45.0 * (uiPi / 180), 0);
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawRestore(p->Context);
-
- // for testing purposes, show what happens if we skew about (0, 0)
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 0, -200);
- uiDrawTransform(p->Context, &m);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixSkew(&m,
- 0, 0,
- 45.0 * (uiPi / 180), 0);
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756691%28v=vs.85%29.aspx
-static void drawD2DTranslate(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush original;
- uiDrawBrush fill;
- uiDrawBrush transform;
- uiDrawStrokeParams originalsp;
- uiDrawStrokeParams transformsp;
- uiDrawMatrix m;
-
- originalsp.Dashes = NULL;
- originalsp.NumDashes = 0;
- originalsp.DashPhase = 0;
- transformsp.Dashes = NULL;
- transformsp.NumDashes = 0;
- transformsp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 126.0, 80.5, 186.0 - 126.0, 140.5 - 80.5);
- uiDrawPathEnd(path);
-
- // TODO the example doesn't specify what these should be
- d2dSolidBrush(&original, d2dBlack, 1.0);
- d2dSolidBrush(&fill, d2dWhite, 0.5);
- d2dSolidBrush(&transform, d2dForestGreen, 1.0);
- // TODO this needs to be dashed
- originalsp.Thickness = 1.0;
- originalsp.Cap = uiDrawLineCapFlat;
- originalsp.Join = uiDrawLineJoinMiter;
- originalsp.MiterLimit = uiDrawDefaultMiterLimit;
- transformsp.Thickness = 1.0;
- transformsp.Cap = uiDrawLineCapFlat;
- transformsp.Join = uiDrawLineJoinMiter;
- transformsp.MiterLimit = uiDrawDefaultMiterLimit;
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 20, 10);
- uiDrawTransform(p->Context, &m);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawFreePath(path);
-}
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756672%28v=vs.85%29.aspx
-// TODO the points seem off
-static void drawD2DMultiTransforms(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush original;
- uiDrawBrush fill;
- uiDrawBrush transform;
- uiDrawStrokeParams originalsp;
- uiDrawStrokeParams transformsp;
- uiDrawMatrix mtranslate;
- uiDrawMatrix mrotate;
-
- originalsp.Dashes = NULL;
- originalsp.NumDashes = 0;
- originalsp.DashPhase = 0;
- transformsp.Dashes = NULL;
- transformsp.NumDashes = 0;
- transformsp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 300.0, 40.0, 360.0 - 300.0, 100.0 - 40.0);
- uiDrawPathEnd(path);
-
- // TODO the example doesn't specify what these should be
- d2dSolidBrush(&original, d2dBlack, 1.0);
- d2dSolidBrush(&fill, d2dWhite, 0.5);
- d2dSolidBrush(&transform, d2dForestGreen, 1.0);
- // TODO this needs to be dashed
- originalsp.Thickness = 1.0;
- originalsp.Cap = uiDrawLineCapFlat;
- originalsp.Join = uiDrawLineJoinMiter;
- originalsp.MiterLimit = uiDrawDefaultMiterLimit;
- transformsp.Thickness = 1.0;
- transformsp.Cap = uiDrawLineCapFlat;
- transformsp.Join = uiDrawLineJoinMiter;
- transformsp.MiterLimit = uiDrawDefaultMiterLimit;
-
- uiDrawMatrixSetIdentity(&mtranslate);
- uiDrawMatrixTranslate(&mtranslate, 20.0, 10.0);
- uiDrawMatrixSetIdentity(&mrotate);
- uiDrawMatrixRotate(&mrotate,
- 330.0, 70.0,
- 45.0 * (uiPi / 180));
-
- // save for when we do the opposite one
- uiDrawSave(p->Context);
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawTransform(p->Context, &mrotate);
- uiDrawTransform(p->Context, &mtranslate);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawRestore(p->Context);
- uiDrawFreePath(path);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 40.0, 40.0, 100.0 - 40.0, 100.0 - 40.0);
- uiDrawPathEnd(path);
-
- uiDrawMatrixSetIdentity(&mtranslate);
- uiDrawMatrixTranslate(&mtranslate, 20.0, 10.0);
- uiDrawMatrixSetIdentity(&mrotate);
- uiDrawMatrixRotate(&mrotate,
- 70.0, 70.0,
- 45.0 * (uiPi / 180));
-
- uiDrawStroke(p->Context, path, &original, &originalsp);
-
- uiDrawTransform(p->Context, &mtranslate);
- uiDrawTransform(p->Context, &mrotate);
-
- uiDrawFill(p->Context, path, &fill);
- uiDrawStroke(p->Context, path, &transform, &transformsp);
-
- uiDrawFreePath(path);
-}
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756673%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756684%28v=vs.85%29.aspx
-
-// TODO dashing https://msdn.microsoft.com/en-us/library/windows/desktop/dd756683%28v=vs.85%29.aspx
-
-// from https://msdn.microsoft.com/en-us/library/windows/desktop/dd756682%28v=vs.85%29.aspx
-static void drawD2DComplexShape(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush black;
- uiDrawBrush gradient;
- uiDrawBrushGradientStop stops[2];
- uiDrawStrokeParams sp;
- uiDrawMatrix m;
-
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 0, 0);
- uiDrawPathLineTo(path, 200, 0);
- uiDrawPathBezierTo(path,
- 150, 50,
- 150, 150,
- 200, 200);
- uiDrawPathLineTo(path, 0, 200);
- uiDrawPathBezierTo(path,
- 50, 150,
- 50, 50,
- 0, 0);
- uiDrawPathCloseFigure(path);
- uiDrawPathEnd(path);
-
- d2dSolidBrush(&black, d2dBlack, 1.0);
-
- 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;
- gradient.Type = uiDrawBrushTypeLinearGradient;
- gradient.X0 = 100;
- gradient.Y0 = 0;
- gradient.X1 = 100;
- gradient.Y1 = 200;
- gradient.Stops = stops;
- gradient.NumStops = 2;
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 20, 20);
- uiDrawTransform(p->Context, &m);
-
- sp.Thickness = 10.0;
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
-
- uiDrawStroke(p->Context, path, &black, &sp);
- uiDrawFill(p->Context, path, &gradient);
-
- uiDrawFreePath(path);
-}
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756692%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756686%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756685%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/dd756674%28v=vs.85%29.aspx
-
-// TODO? https://msdn.microsoft.com/en-us/library/windows/desktop/ee329947%28v=vs.85%29.aspx
-
-// TODO https://msdn.microsoft.com/en-us/library/windows/desktop/ff485857%28v=vs.85%29.aspx
-
-// TODO? https://msdn.microsoft.com/en-us/library/windows/desktop/dd756755%28v=vs.85%29.aspx
-
-// TODO go through the API reference and spot examples that aren't listed
-
-// TODO all of these https://msdn.microsoft.com/en-us/library/windows/desktop/dd368187%28v=vs.85%29.aspx
-
-// cairo Samples Page (http://cairographics.org/samples/)
-
-static void crsourcergba(uiDrawBrush *brush, double r, double g, double b, double a)
-{
- brush->Type = uiDrawBrushTypeSolid;
- brush->R = r;
- brush->G = g;
- brush->B = b;
- brush->A = a;
-}
-
-// arc
-static void drawCSArc(uiAreaDrawParams *p)
-{
- double xc = 128.0;
- double yc = 128.0;
- double radius = 100.0;
- double angle1 = 45.0 * (uiPi / 180.0);
- double angle2 = 180.0 * (uiPi / 180.0);
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- sp.Thickness = 10.0;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle1,
- angle2 - angle1,
- 0);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- crsourcergba(&source, 1, 0.2, 0.2, 0.6);
- sp.Thickness = 6.0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- 10.0,
- 0, 2 * uiPi,
- 0);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &source);
- uiDrawFreePath(path);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle1, 0,
- 0);
- uiDrawPathLineTo(path, xc, yc);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle2, 0,
- 0);
- uiDrawPathLineTo(path, xc, yc);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// arc negative
-static void drawCSArcNegative(uiAreaDrawParams *p)
-{
- double xc = 128.0;
- double yc = 128.0;
- double radius = 100.0;
- double angle1 = 45.0 * (uiPi / 180.0);
- double angle2 = 180.0 * (uiPi / 180.0);
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- sp.Thickness = 10.0;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle1,
- angle2 - angle1,
- 1);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- crsourcergba(&source, 1, 0.2, 0.2, 0.6);
- sp.Thickness = 6.0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- 10.0,
- 0, 2 * uiPi,
- 0);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &source);
- uiDrawFreePath(path);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle1, 0,
- 0);
- uiDrawPathLineTo(path, xc, yc);
- uiDrawPathNewFigureWithArc(path,
- xc, yc,
- radius,
- angle2, 0,
- 0);
- uiDrawPathLineTo(path, xc, yc);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// 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;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- uiDrawPathNewFigureWithArc(path,
- 128.0, 128.0,
- 76.8,
- 0, 2 * uiPi,
- 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
-
-// curve rectangle
-static void drawCSCurveRectangle(uiAreaDrawParams *p)
-{
- double x0 = 25.6, /* parameters like cairo_rectangle */
- y0 = 25.6,
- rect_width = 204.8,
- rect_height = 204.8,
- radius = 102.4; /* and an approximate curvature radius */
-
- double x1,y1;
-
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- x1=x0+rect_width;
- y1=y0+rect_height;
- if (!rect_width || !rect_height)
- return;
- if (rect_width/2 < radius) {
- if (rect_height/2<radius) {
- uiDrawPathNewFigure(path, x0, (y0 + y1)/2);
- uiDrawPathBezierTo(path, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
- uiDrawPathBezierTo(path, x1, y0, x1, y0, x1, (y0 + y1)/2);
- uiDrawPathBezierTo(path, x1, y1, x1, y1, (x1 + x0)/2, y1);
- uiDrawPathBezierTo(path, x0, y1, x0, y1, x0, (y0 + y1)/2);
- } else {
- uiDrawPathNewFigure(path, x0, y0 + radius);
- uiDrawPathBezierTo(path, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
- uiDrawPathBezierTo(path, x1, y0, x1, y0, x1, y0 + radius);
- uiDrawPathLineTo(path, x1 , y1 - radius);
- uiDrawPathBezierTo(path, x1, y1, x1, y1, (x1 + x0)/2, y1);
- uiDrawPathBezierTo(path, x0, y1, x0, y1, x0, y1- radius);
- }
- } else {
- if (rect_height / 2 < radius) {
- uiDrawPathNewFigure(path, x0, (y0 + y1)/2);
- uiDrawPathBezierTo(path, x0 , y0, x0 , y0, x0 + radius, y0);
- uiDrawPathLineTo(path, x1 - radius, y0);
- uiDrawPathBezierTo(path, x1, y0, x1, y0, x1, (y0 + y1)/2);
- uiDrawPathBezierTo(path, x1, y1, x1, y1, x1 - radius, y1);
- uiDrawPathLineTo(path, x0 + radius, y1);
- uiDrawPathBezierTo(path, x0, y1, x0, y1, x0, (y0 + y1)/2);
- } else {
- uiDrawPathNewFigure(path, x0, y0 + radius);
- uiDrawPathBezierTo(path, x0 , y0, x0 , y0, x0 + radius, y0);
- uiDrawPathLineTo(path, x1 - radius, y0);
- uiDrawPathBezierTo(path, x1, y0, x1, y0, x1, y0 + radius);
- uiDrawPathLineTo(path, x1 , y1 - radius);
- uiDrawPathBezierTo(path, x1, y1, x1, y1, x1 - radius, y1);
- uiDrawPathLineTo(path, x0 + radius, y1);
- uiDrawPathBezierTo(path, x0, y1, x0, y1, x0, y1- radius);
- }
- }
- uiDrawPathCloseFigure(path);
- uiDrawPathEnd(path);
-
- crsourcergba(&source, 0.5, 0.5, 1, 1.0);
- uiDrawFill(p->Context, path, &source);
- crsourcergba(&source, 0.5, 0, 0, 0.5);
- sp.Thickness = 10.0;
- uiDrawStroke(p->Context, path, &source, &sp);
-
- uiDrawFreePath(path);
-}
-
-// curve to
-static void drawCSCurveTo(uiAreaDrawParams *p)
-{
- double x=25.6, y=128.0;
- double x1=102.4, y1=230.4,
- x2=153.6, y2=25.6,
- x3=230.4, y3=128.0;
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- uiDrawPathNewFigure(path, x, y);
- uiDrawPathBezierTo(path, x1, y1, x2, y2, x3, y3);
- uiDrawPathEnd(path);
- sp.Thickness = 10.0;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- crsourcergba(&source, 1, 0.2, 0.2, 0.6);
- sp.Thickness = 6.0;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, x, y);
- uiDrawPathLineTo(path, x1, y1);
- uiDrawPathNewFigure(path, x2, y2);
- uiDrawPathLineTo(path, x3, y3);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// dash
-static void drawCSDash(uiAreaDrawParams *p)
-{
- double dashes[] = {
- 50.0, /* ink */
- 10.0, /* skip */
- 10.0, /* ink */
- 10.0 /* skip*/
- };
- int ndash = sizeof (dashes)/sizeof(dashes[0]);
- double offset = -50.0;
-
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = dashes;
- sp.NumDashes = ndash;
- sp.DashPhase = offset;
- sp.Thickness = 10.0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 128.0, 25.6);
- uiDrawPathLineTo(path, 230.4, 230.4);
- uiDrawPathLineTo(path, 230.4 -102.4, 230.4 + 0.0);
- uiDrawPathBezierTo(path,
- 51.2, 230.4,
- 51.2, 128.0,
- 128.0, 128.0);
- uiDrawPathEnd(path);
-
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// fill and stroke2
-static void drawCSFillAndStroke2(uiAreaDrawParams *p)
-{
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- uiDrawPathNewFigure(path, 128.0, 25.6);
- uiDrawPathLineTo(path, 230.4, 230.4);
- uiDrawPathLineTo(path, 230.4 - 102.4, 230.4 + 0.0);
- uiDrawPathBezierTo(path, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
- uiDrawPathCloseFigure(path);
-
- uiDrawPathNewFigure(path, 64.0, 25.6);
- uiDrawPathLineTo(path, 64.0 + 51.2, 25.6 + 51.2);
- uiDrawPathLineTo(path, 64.0 + 51.2 -51.2, 25.6 + 51.2 + 51.2);
- uiDrawPathLineTo(path, 64.0 + 51.2 -51.2 -51.2, 25.6 + 51.2 + 51.2 -51.2);
- uiDrawPathCloseFigure(path);
-
- uiDrawPathEnd(path);
-
- sp.Thickness = 10.0;
- crsourcergba(&source, 0, 0, 1, 1);
- uiDrawFill(p->Context, path, &source);
- crsourcergba(&source, 0, 0, 0, 1);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// fill style
-static void drawCSFillStyle(uiAreaDrawParams *p)
-{
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
- uiDrawMatrix m;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- sp.Thickness = 6;
-
- path = uiDrawNewPath(uiDrawFillModeAlternate);
- uiDrawPathAddRectangle(path, 12, 12, 232, 70);
- uiDrawPathNewFigureWithArc(path,
- 64, 64,
- 40,
- 0, 2*uiPi,
- 0);
- uiDrawPathNewFigureWithArc(path,
- 192, 64,
- 40,
- 0, -2*uiPi,
- 1);
- uiDrawPathEnd(path);
-
- crsourcergba(&source, 0, 0.7, 0, 1);
- uiDrawFill(p->Context, path, &source);
- crsourcergba(&source, 0, 0, 0, 1);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- uiDrawMatrixSetIdentity(&m);
- uiDrawMatrixTranslate(&m, 0, 128);
- uiDrawTransform(p->Context, &m);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathAddRectangle(path, 12, 12, 232, 70);
- uiDrawPathNewFigureWithArc(path,
- 64, 64,
- 40,
- 0, 2*uiPi,
- 0);
- uiDrawPathNewFigureWithArc(path,
- 192, 64,
- 40,
- 0, -2*uiPi,
- 1);
- uiDrawPathEnd(path);
-
- crsourcergba(&source, 0, 0, 0.9, 1);
- uiDrawFill(p->Context, path, &source);
- crsourcergba(&source, 0, 0, 0, 1);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// TOOD gradient (radial gradient with two circles)
-
-// TODO image
-
-// TODO imagepattern
-
-// multi segment caps
-static void drawCSMultiCaps(uiAreaDrawParams *p)
-{
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- uiDrawPathNewFigure(path, 50.0, 75.0);
- uiDrawPathLineTo(path, 200.0, 75.0);
-
- uiDrawPathNewFigure(path, 50.0, 125.0);
- uiDrawPathLineTo(path, 200.0, 125.0);
-
- uiDrawPathNewFigure(path, 50.0, 175.0);
- uiDrawPathLineTo(path, 200.0, 175.0);
- uiDrawPathEnd(path);
-
- sp.Thickness = 30.0;
- sp.Cap = uiDrawLineCapRound;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// rounded rectangle
-static void drawCSRoundRect(uiAreaDrawParams *p)
-{
- double x = 25.6, /* parameters like cairo_rectangle */
- y = 25.6,
- width = 204.8,
- height = 204.8,
- aspect = 1.0, /* aspect ratio */
- corner_radius = height / 10.0; /* and corner curvature radius */
-
- double radius = corner_radius / aspect;
- double degrees = uiPi / 180.0;
-
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
-
- // top right corner
- uiDrawPathNewFigureWithArc(path,
- x + width - radius, y + radius,
- radius,
- -90 * degrees, uiPi / 2,
- 0);
- // bottom right corner
- uiDrawPathArcTo(path,
- x + width - radius, y + height - radius,
- radius,
- 0 * degrees, uiPi / 2,
- 0);
- // bottom left corner
- uiDrawPathArcTo(path,
- x + radius, y + height - radius,
- radius,
- 90 * degrees, uiPi / 2,
- 0);
- // top left corner
- uiDrawPathArcTo(path,
- x + radius, y + radius,
- radius,
- 180 * degrees, uiPi / 2,
- 0);
- uiDrawPathCloseFigure(path);
- uiDrawPathEnd(path);
-
- crsourcergba(&source, 0.5, 0.5, 1, 1);
- uiDrawFill(p->Context, path, &source);
- crsourcergba(&source, 0.5, 0, 0, 0.5);
- sp.Thickness = 10.0;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// set line cap
-static void drawCSSetLineCap(uiAreaDrawParams *p)
-{
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- sp.Thickness = 30.0;
-
- sp.Cap = uiDrawLineCapFlat;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 64.0, 50.0);
- uiDrawPathLineTo(path, 64.0, 200.0);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- sp.Cap = uiDrawLineCapRound;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 128.0, 50.0);
- uiDrawPathLineTo(path, 128.0, 200.0);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- sp.Cap = uiDrawLineCapSquare;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 192.0, 50.0);
- uiDrawPathLineTo(path, 192.0, 200.0);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- // draw helping lines
- // keep the square cap to match the reference picture on the cairo website
- crsourcergba(&source, 1, 0.2, 0.2, 1);
- sp.Thickness = 2.56;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 64.0, 50.0);
- uiDrawPathLineTo(path, 64.0, 200.0);
- uiDrawPathNewFigure(path, 128.0, 50.0);
- uiDrawPathLineTo(path, 128.0, 200.0);
- uiDrawPathNewFigure(path, 192.0, 50.0);
- uiDrawPathLineTo(path, 192.0, 200.0);
- uiDrawPathEnd(path);
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// set line join
-static void drawCSSetLineJoin(uiAreaDrawParams *p)
-{
- uiDrawBrush source;
- uiDrawStrokeParams sp;
- uiDrawPath *path;
-
- crsourcergba(&source, 0, 0, 0, 1);
- sp.Cap = uiDrawLineCapFlat;
- sp.Join = uiDrawLineJoinMiter;
- sp.MiterLimit = uiDrawDefaultMiterLimit;
- sp.Dashes = NULL;
- sp.NumDashes = 0;
- sp.DashPhase = 0;
-
- sp.Thickness = 40.96;
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 76.8, 84.48);
- uiDrawPathLineTo(path, 76.8 + 51.2, 84.48 -51.2);
- uiDrawPathLineTo(path, 76.8 + 51.2 + 51.2, 84.48 - 51.2 + 51.2);
- uiDrawPathEnd(path);
- sp.Join = uiDrawLineJoinMiter;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 76.8, 161.28);
- uiDrawPathLineTo(path, 76.8 + 51.2, 161.28 -51.2);
- uiDrawPathLineTo(path, 76.8 + 51.2 + 51.2, 161.28 - 51.2 + 51.2);
- uiDrawPathEnd(path);
- sp.Join = uiDrawLineJoinBevel;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-
- path = uiDrawNewPath(uiDrawFillModeWinding);
- uiDrawPathNewFigure(path, 76.8, 238.08);
- uiDrawPathLineTo(path, 76.8 + 51.2, 238.08 -51.2);
- uiDrawPathLineTo(path, 76.8 + 51.2 + 51.2, 238.08 - 51.2 + 51.2);
- uiDrawPathEnd(path);
- sp.Join = uiDrawLineJoinRound;
- uiDrawStroke(p->Context, path, &source, &sp);
- uiDrawFreePath(path);
-}
-
-// TODO text
-
-// TODO text align center
-
-// TODO text extents
-
-// Quartz 2D Programming Guide
-
-static void cgaddrect(uiDrawPath *path, uiAreaDrawParams *p, double x, double y, double width, double height)
-{
- uiDrawPathAddRectangle(path,
- x, p->AreaHeight - y - height,
- width, height);
-}
-
-// Graphics Contexts > Creating a Window Graphics Context in Mac OS X
-static void drawQ2DCreateWindowGC(uiAreaDrawParams *p)
-{
- uiDrawPath *path;
- uiDrawBrush brush;
-
- crsourcergba(&brush, 1, 0, 0, 1);
- path = uiDrawNewPath(uiDrawFillModeWinding);
- cgaddrect(path, p, 0, 0, 200, 100);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &brush);
- uiDrawFreePath(path);
-
- crsourcergba(&brush, 0, 0, 1, .5);
- path = uiDrawNewPath(uiDrawFillModeWinding);
- cgaddrect(path, p, 0, 0, 100, 200);
- uiDrawPathEnd(path);
- uiDrawFill(p->Context, path, &brush);
- uiDrawFreePath(path);
-}
-
-// TODO Patterns page?
-
-// TODO Shadows page?
-
-// TODO Gradients page (includes some circle-circle radial gradients)
-
-// TODO Transparency Layers page?
-
-// TODO Core Graphics Layer Drawing page?
-
-// Cocoa Drawing Guide
-
-// TODO Advanced Drawing Techniques page?
-
-// TODO Text page, if any?
-
-static const struct drawtest tests[] = {
- { "Original uiArea test", drawOriginal },
- { "Arc test", drawArcs },
- { "Direct2D: Direct2D Quickstart for Windows 8", drawD2DW8QS },
- { "Direct2D: Creating a Simple Direct2D Application", drawD2DSimpleApp },
- { "Direct2D: How to Create a Solid Color Brush", drawD2DSolidBrush },
- { "Direct2D: How to Create a Linear Gradient Brush", drawD2DLinearBrush },
- { "Direct2D: How to Create a Radial Gradient Brush", drawD2DRadialBrush },
- { "Direct2D: Path Geometries Overview", drawD2DPathGeometries },
- { "Direct2D: How to Create Geometry Groups", drawD2DGeometryGroup },
- { "Direct2D: How to Rotate an Object", drawD2DRotate },
- { "Direct2D: How to Scale an Object", drawD2DScale },
- { "Direct2D: How to Skew an Object", drawD2DSkew },
- { "Direct2D: How to Translate an Object", drawD2DTranslate },
- { "Direct2D: How to Apply Multiple Transforms to an Object", drawD2DMultiTransforms },
- { "Direct2D: How to Draw and Fill a Complex Shape", drawD2DComplexShape },
- { "cairo samples: arc", drawCSArc },
- { "cairo samples: arc negative", drawCSArcNegative },
- { "cairo samples: clip", drawCSClip },
- { "cairo samples: curve rectangle", drawCSCurveRectangle },
- { "cairo samples: curve to", drawCSCurveTo },
- { "cairo samples: dash", drawCSDash },
- { "cairo samples: fill and stroke2", drawCSFillAndStroke2 },
- { "cairo samples: fill style", drawCSFillStyle },
- { "cairo samples: multi segment caps", drawCSMultiCaps },
- { "cairo samples: rounded rectangle", drawCSRoundRect },
- { "cairo samples: set line cap", drawCSSetLineCap },
- { "cairo samples: set line join", drawCSSetLineJoin },
- { "Quartz 2D PG: Creating a Window Graphics Context in Mac OS X", drawQ2DCreateWindowGC },
- { NULL, NULL },
-};
-
-void runDrawTest(int n, uiAreaDrawParams *p)
-{
- (*(tests[n].draw))(p);
-}
-
-void populateComboboxWithTests(uiCombobox *c)
-{
- size_t i;
-
- for (i = 0; tests[i].name != NULL; i++)
- uiComboboxAppend(c, tests[i].name);
-}