// TODO this should be altered not to restore all state on exit so default text attributes can be checked static void drawGuides(uiDrawContext *c, uiDrawTextFontMetrics *m) { uiDrawPath *p; uiDrawBrush b; uiDrawStrokeParams sp; memset(&b, 0, sizeof (uiDrawBrush)); b.Type = uiDrawBrushTypeSolid; memset(&sp, 0, sizeof (uiDrawStrokeParams)); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.MiterLimit = uiDrawDefaultMiterLimit; sp.Thickness = 2; uiDrawSave(c); p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathNewFigure(p, 8, 10); uiDrawPathLineTo(p, 8, 10 + m->Ascent); uiDrawPathEnd(p); b.R = 0.94; b.G = 0.5; b.B = 0.5; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathNewFigure(p, 8, 10 + m->Ascent); uiDrawPathLineTo(p, 8, 10 + m->Ascent + m->Descent); uiDrawPathEnd(p); b.R = 0.12; b.G = 0.56; b.B = 1.0; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathAddRectangle(p, 0, 0, 10, 10); uiDrawPathEnd(p); uiDrawClip(c, p); b.R = 0.85; b.G = 0.65; b.B = 0.13; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); uiDrawRestore(c); }
// based on the cairo arc sample static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p) { double xc = 128.0; double yc = 128.0; double radius = 100.0; uiDrawBrush source; uiDrawStrokeParams sp; uiDrawPath *path; char *startText; char *sweepText; double factor; source.Type = uiDrawBrushTypeSolid; source.R = 0; source.G = 0; source.B = 0; source.A = 1; sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.MiterLimit = uiDrawDefaultMiterLimit; sp.Dashes = NULL; sp.NumDashes = 0; sp.DashPhase = 0; startText = uiEntryText(startAngle); sweepText = uiEntryText(sweep); factor = M_PI / 180; if (uiCheckboxChecked(radians)) factor = 1; sp.Thickness = 10.0; path = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathNewFigure(path, xc, yc); uiDrawPathArcTo(path, xc, yc, radius, atof(startText) * factor, atof(sweepText) * factor, uiCheckboxChecked(negative)); uiDrawPathEnd(path); uiDrawStroke(p->Context, path, &source, &sp); uiDrawFreePath(path); uiFreeText(startText); uiFreeText(sweepText); }
static void drawGuides(uiDrawContext *c, uiDrawTextFontMetrics *m) { uiDrawPath *p; uiDrawBrush b; uiDrawStrokeParams sp; double leading; double y; leading = 0; if (uiCheckboxChecked(addLeading)) leading = m->Leading; memset(&b, 0, sizeof (uiDrawBrush)); b.Type = uiDrawBrushTypeSolid; memset(&sp, 0, sizeof (uiDrawStrokeParams)); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.MiterLimit = uiDrawDefaultMiterLimit; sp.Thickness = 2; uiDrawSave(c); p = uiDrawNewPath(uiDrawFillModeWinding); y = 10; uiDrawPathNewFigure(p, 8, y); y += m->Ascent; uiDrawPathLineTo(p, 8, y); uiDrawPathEnd(p); b.R = 0.94; b.G = 0.5; b.B = 0.5; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathNewFigure(p, 8, y); y += m->Descent; uiDrawPathLineTo(p, 8, y); uiDrawPathEnd(p); b.R = 0.12; b.G = 0.56; b.B = 1.0; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); // and again for the second line p = uiDrawNewPath(uiDrawFillModeWinding); y += leading; uiDrawPathNewFigure(p, 8, y); y += m->Ascent; uiDrawPathLineTo(p, 8, y); uiDrawPathEnd(p); b.R = 0.94; b.G = 0.5; b.B = 0.5; b.A = 0.75; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathNewFigure(p, 8, y); y += m->Descent; uiDrawPathLineTo(p, 8, y); uiDrawPathEnd(p); b.R = 0.12; b.G = 0.56; b.B = 1.0; b.A = 0.75; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); // and a box to text layout top-left corners p = uiDrawNewPath(uiDrawFillModeWinding); uiDrawPathAddRectangle(p, 0, 0, 10, 10); uiDrawPathEnd(p); uiDrawClip(c, p); b.R = 0.85; b.G = 0.65; b.B = 0.13; b.A = 1.0; uiDrawStroke(c, p, &b, &sp); uiDrawFreePath(p); uiDrawRestore(c); }
static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p) { uiDrawStrokeParams sp; uiDrawBeginPathRGB(p->Context, 0xFF, 0x00, 0x00); uiDrawMoveTo(p->Context, p->ClipX + 5, p->ClipY + 5); uiDrawLineTo(p->Context, (p->ClipX + p->ClipWidth) - 5, (p->ClipY + p->ClipHeight) - 5); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.Thickness = 1; sp.MiterLimit = uiDrawDefaultMiterLimit; uiDrawStroke(p->Context, &sp); uiDrawBeginPathRGB(p->Context, 0x00, 0x00, 0xC0); uiDrawMoveTo(p->Context, p->ClipX, p->ClipY); uiDrawLineTo(p->Context, p->ClipX + p->ClipWidth, p->ClipY); uiDrawLineTo(p->Context, 50, 150); uiDrawLineTo(p->Context, 50, 50); uiDrawCloseFigure(p->Context); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinRound; sp.Thickness = 5; uiDrawStroke(p->Context, &sp); uiDrawBeginPathRGBA(p->Context, 0x00, 0xC0, 0x00, 0x80); uiDrawRectangle(p->Context, 120, 80, 50, 50); uiDrawFill(p->Context, uiDrawFillModeWinding); uiDrawBeginPathRGB(p->Context, 0x00, 0x80, 0x00); uiDrawMoveTo(p->Context, 5, 10); uiDrawLineTo(p->Context, 5, 50); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.Thickness = 1; sp.MiterLimit = uiDrawDefaultMiterLimit; uiDrawStroke(p->Context, &sp); uiDrawBeginPathRGB(p->Context, 0x80, 0xC0, 0x00); uiDrawMoveTo(p->Context, 400, 100); uiDrawArcTo(p->Context, 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.), 1); // TODO add a checkbox for this uiDrawLineTo(p->Context, 400, 100); uiDrawArcTo(p->Context, 510, 100, 50, 30. * (M_PI / 180.), 330. * (M_PI / 180.), 0); uiDrawCloseFigure(p->Context); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.Thickness = 1; sp.MiterLimit = uiDrawDefaultMiterLimit; uiDrawStroke(p->Context, &sp); uiDrawBeginPathRGB(p->Context, 0x00, 0x80, 0xC0); uiDrawMoveTo(p->Context, 300, 300); uiDrawBezierTo(p->Context, 350, 320, 310, 390, 435, 372); sp.Cap = uiDrawLineCapFlat; sp.Join = uiDrawLineJoinMiter; sp.Thickness = 1; sp.MiterLimit = uiDrawDefaultMiterLimit; uiDrawStroke(p->Context, &sp); }