本文整理汇总了C#中Xwt.Drawing.Context.NewPath方法的典型用法代码示例。如果您正苦于以下问题:C# Context.NewPath方法的具体用法?C# Context.NewPath怎么用?C# Context.NewPath使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Xwt.Drawing.Context
的用法示例。
在下文中一共展示了Context.NewPath方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DrawRoundRectangle
public static void DrawRoundRectangle (Context cr, double x, double y, double r, double w, double h)
{
const double ARC_TO_BEZIER = 0.55228475;
double radius_x = r;
double radius_y = r / 4;
if (radius_x > w - radius_x)
radius_x = w / 2;
if (radius_y > h - radius_y)
radius_y = h / 2;
double c1 = ARC_TO_BEZIER * radius_x;
double c2 = ARC_TO_BEZIER * radius_y;
cr.NewPath ();
cr.MoveTo (x + radius_x, y);
cr.RelLineTo (w - 2 * radius_x, 0.0);
cr.RelCurveTo (c1, 0.0, radius_x, c2, radius_x, radius_y);
cr.RelLineTo (0, h - 2 * radius_y);
cr.RelCurveTo (0.0, c2, c1 - radius_x, radius_y, -radius_x, radius_y);
cr.RelLineTo (-w + 2 * radius_x, 0);
cr.RelCurveTo (-c1, 0, -radius_x, -c2, -radius_x, -radius_y);
cr.RelLineTo (0, -h + 2 * radius_y);
cr.RelCurveTo (0.0, -c2, radius_x - c1, -radius_y, radius_x, -radius_y);
cr.ClosePath ();
}
示例2: OnDraw
protected override sealed void OnDraw(Context ctx, Rectangle bounds)
{
var frame = GetFrame (ctx.ScaleFactor);
var fixedWidth = frame.Bitmap.Width - 2 - frame.StretchableWidth;
var fixedHeight = frame.Bitmap.Height - 2 - frame.StretchableHeight;
double totalVariableWidth = bounds.Width - fixedWidth / frame.ScaleFactor;
double totalVariableHeight = bounds.Height - fixedHeight / frame.ScaleFactor;
double remainingVariableHeight = totalVariableHeight;
double y = bounds.Y, yb = 1;
int tileIndex = 0;
ctx.Save ();
if (totalVariableWidth < 0) {
if (fixedWidth > 0)
ctx.Scale (bounds.Width / fixedWidth, 1);
totalVariableWidth = 0;
}
if (totalVariableHeight < 0) {
if (fixedHeight > 0)
ctx.Scale (1, bounds.Height / fixedHeight);
totalVariableHeight = 0;
}
foreach (var vs in frame.VerticalSections) {
double sh = CalcSectionSize (frame, vs, totalVariableHeight, frame.StretchableHeight, ref remainingVariableHeight);
double x = bounds.X, xb = 1;
double remainingVariableWidth = totalVariableWidth;
foreach (var hs in frame.HorizontalSections) {
var sourceRegion = new Rectangle (xb, yb, hs.Size, vs.Size);
double sw = CalcSectionSize (frame, hs, totalVariableWidth, frame.StretchableWidth, ref remainingVariableWidth);
var targetRegion = new Rectangle (x, y, sw, sh);
if (vs.Mode != RenderMode.Tile && hs.Mode != RenderMode.Tile) {
var t = GetTile (frame, tileIndex, sourceRegion);
ctx.DrawImage (t, targetRegion);
} else {
double pw = hs.Size / frame.ScaleFactor;
double ph = vs.Size / frame.ScaleFactor;
if (hs.Mode == RenderMode.Stretch) {
pw = targetRegion.Width;
}
if (vs.Mode == RenderMode.Stretch) {
ph = targetRegion.Height;
}
ctx.Save ();
ctx.Translate (targetRegion.Location);
targetRegion.Location = Point.Zero;
ctx.Pattern = new ImagePattern (GetTile (frame, tileIndex, sourceRegion).WithSize (pw, ph));
ctx.NewPath ();
ctx.Rectangle (targetRegion);
ctx.Fill ();
ctx.Restore ();
}
x += sw;
xb += hs.Size;
tileIndex++;
}
yb += vs.Size;
y += sh;
}
ctx.Restore ();
}
示例3: Draw
void Draw (Context ctx, bool fill)
{
var parent = (RoundedFrameBox)Parent;
var border = parent.BorderSpacing;
var radius = parent.cornerRadius;
var rect = Bounds;
ctx.MoveTo (rect.X, rect.Y);
if (border.Top > 0) {
ctx.NewPath ();
if (radius.TopLeft > 0)
ctx.Arc (rect.Left + radius.TopLeft + border.Left / 2, rect.Top + radius.TopLeft + border.Top / 2, radius.TopLeft, 180, 270);
else
PathTo (ctx, rect.Left, rect.Top + border.Top / 2, fill);
if (radius.TopRight > 0) {
ctx.LineTo (rect.Right - (radius.TopRight + border.Right / 2), rect.Top + border.Top / 2);
ctx.Arc (rect.Right - (radius.TopRight + border.Right / 2), rect.Top + radius.TopRight + border.Top / 2, radius.TopRight, 270, 0);
} else
ctx.LineTo (rect.Right, rect.Top + border.Top / 2);
} else
PathTo (ctx, rect.Right - border.Right / 2, rect.Top, fill);
if (border.Right > 0)
// TODO: round corners if top/bottom border disabled
ctx.LineTo (rect.Right - border.Right / 2, rect.Bottom - (border.Bottom > 0 ? radius.BottomRight : 0));
else
PathTo (ctx, rect.Right - border.Right / 2, rect.Bottom - (border.Bottom > 0 ? radius.BottomRight : 0), fill);
if (border.Bottom > 0) {
if (radius.BottomRight > 0)
ctx.Arc (rect.Right - (radius.BottomRight + border.Right / 2), rect.Bottom - (radius.BottomRight + border.Bottom / 2), radius.BottomRight, 0, 90);
else
PathTo (ctx, rect.Right, rect.Bottom - border.Bottom / 2, fill);
if (radius.BottomLeft > 0) {
ctx.LineTo (rect.Left + (radius.BottomLeft + border.Left / 2), rect.Bottom - border.Bottom / 2);
ctx.Arc (rect.Left + radius.BottomLeft + border.Left / 2, rect.Bottom - (radius.BottomLeft + border.Bottom / 2), radius.BottomLeft, 90, 180);
} else
ctx.LineTo (rect.Left + border.Left / 2, rect.Bottom - border.Bottom / 2);
} else
PathTo (ctx, rect.Left + border.Left / 2, rect.Bottom - border.Bottom / 2, fill);
if (border.Left > 0)
// TODO: round corners if top/bottom border disabled
ctx.LineTo (rect.Left + border.Left / 2, rect.Top + (border.Top > 0 ? radius.TopLeft : 0));
else
PathTo (ctx, rect.Left + border.Left / 2, rect.Top + (border.Top > 0 ? radius.TopLeft : 0), fill);
if (fill) {
ctx.SetColor (parent.innerColor);
ctx.Fill ();
} else {
ctx.SetColor (parent.borderColor);
ctx.SetLineWidth (parent.borderWidth);
ctx.Stroke ();
}
}
示例4: DrawSerie
void DrawSerie (Context ctx, Serie serie)
{
ctx.NewPath ();
ctx.Rectangle (left, top, width + 1, height + 1);
ctx.Clip ();
ctx.NewPath ();
ctx.SetColor (serie.Color);
ctx.SetLineWidth (serie.LineWidth);
bool first = true;
bool blockMode = serie.DisplayMode == DisplayMode.BlockLine;
double lastY = 0;
foreach (Data d in serie.GetData (startX, endX)) {
double x, y;
GetPoint (d.X, d.Y, out x, out y);
if (first) {
ctx.MoveTo (x, y);
lastY = y;
first = false;
} else {
if (blockMode) {
if (lastY != y)
ctx.LineTo (x, lastY);
ctx.LineTo (x, y);
} else
ctx.LineTo (x, y);
}
lastY = y;
}
ctx.Stroke ();
}
示例5: DrawBorder
void DrawBorder(Context ctx, double x, double y, double w, double h, double radius, double thickness)
{
// test limits (without using multiplication)
if (radius > w - radius)
radius = w / 2;
if (radius > h - radius)
radius = h / 2;
// approximate (quite close) the arc using a bezier curve
double arc = ArcToBezier * radius;
ctx.SetLineWidth (thickness);
// top-left corner
ctx.NewPath ();
ctx.MoveTo (x, y + radius);
ctx.CurveTo (x, y + radius - arc, x + radius - arc, y, x + radius, y);
ctx.Pattern = GetCornerGradient (x + radius, y + radius, radius, thickness / 2);
ctx.Stroke ();
// top edge
ctx.NewPath ();
ctx.MoveTo (x + radius - 0.5, y);
ctx.LineTo (x + w - radius + 0.5, y);
ctx.Pattern = GetTopEdgeGradient (y, thickness / 2);
ctx.Stroke ();
// top-right corner
ctx.NewPath ();
ctx.MoveTo (x + w - radius, y);
ctx.CurveTo (x + w - radius + arc, y, x + w, y + arc, x + w, y + radius);
ctx.Pattern = GetCornerGradient (x + w - radius, y + radius, radius, thickness / 2);
ctx.Stroke ();
// right edge
ctx.NewPath ();
ctx.MoveTo (x + w, y + radius - 0.5);
ctx.LineTo (x + w, y + h - radius + 0.5);
ctx.Pattern = GetRightEdgeGradient (x + w, thickness / 2);
ctx.Stroke ();
// bottom-right corner
ctx.NewPath ();
ctx.MoveTo (x + w, y + h - radius);
ctx.CurveTo (x + w, y + h - radius + arc, x + w + arc - radius, y + h, x + w - radius, y + h);
ctx.Pattern = GetCornerGradient (x + w - radius, y + h - radius, radius, thickness / 2);
ctx.Stroke ();
// bottom edge
ctx.NewPath ();
ctx.MoveTo (x + w - radius + 0.5, y + h);
ctx.LineTo (x + radius - 0.5, y + h);
ctx.Pattern = GetBottomEdgeGradient (y + h, thickness / 2);
ctx.Stroke ();
// bottom-left corner
ctx.NewPath ();
ctx.MoveTo (x + radius, y + h);
ctx.CurveTo (x + radius - arc, y + h, x, y + h - arc, x, y + h - radius);
ctx.Pattern = GetCornerGradient (x + radius, y + h - radius, radius, thickness / 2);
ctx.Stroke ();
// left edge
ctx.NewPath ();
ctx.MoveTo (x, y + h - radius + 0.5);
ctx.LineTo (x, y + radius - 0.5);
ctx.Pattern = GetLeftEdgeGradient (x, thickness / 2);
ctx.Stroke ();
}
示例6: DrawPopover
void DrawPopover(Context ctx)
{
lock (trackerLock)
{
if (actualTrackerHitResult != null)
{
var trackerSettings = DefaultTrackerSettings;
if (actualTrackerHitResult.Series != null && !string.IsNullOrEmpty(actualTrackerHitResult.Series.TrackerKey))
trackerSettings = trackerDefinitions[actualTrackerHitResult.Series.TrackerKey];
if (trackerSettings.Enabled)
{
var extents = actualTrackerHitResult.LineExtents;
if (Math.Abs(extents.Width) < double.Epsilon)
{
extents = new OxyRect(actualTrackerHitResult.XAxis.ScreenMin.X, extents.Top, actualTrackerHitResult.XAxis.ScreenMax.X - actualTrackerHitResult.XAxis.ScreenMin.X, extents.Height);
}
if (Math.Abs(extents.Height) < double.Epsilon)
{
extents = new OxyRect(extents.Left, actualTrackerHitResult.YAxis.ScreenMin.Y, extents.Width, actualTrackerHitResult.YAxis.ScreenMax.Y - actualTrackerHitResult.YAxis.ScreenMin.Y);
}
var pos = actualTrackerHitResult.Position;
if (trackerSettings.HorizontalLineVisible)
{
renderContext.DrawLine(
new[] { new ScreenPoint(extents.Left, pos.Y), new ScreenPoint(extents.Right, pos.Y) },
trackerSettings.HorizontalLineColor,
trackerSettings.HorizontalLineWidth,
trackerSettings.HorizontalLineActualDashArray,
LineJoin.Miter,
true);
}
if (trackerSettings.VerticalLineVisible)
{
renderContext.DrawLine(
new[] { new ScreenPoint(pos.X, extents.Top), new ScreenPoint(pos.X, extents.Bottom) },
trackerSettings.VerticalLineColor,
trackerSettings.VerticalLineWidth,
trackerSettings.VerticalLineActualDashArray,
LineJoin.Miter,
true);
}
TextLayout text = new TextLayout();
text.Font = trackerSettings.Font;
text.Text = actualTrackerHitResult.Text;
var arrowTop = actualTrackerHitResult.Position.Y <= Bounds.Height / 2;
const int arrowPadding = 10;
var textSize = text.GetSize();
var outerSize = new Size(textSize.Width + (trackerSettings.Padding * 2),
textSize.Height + (trackerSettings.Padding * 2) + arrowPadding);
var trackerBounds = new Rectangle(pos.X - (outerSize.Width / 2),
0,
outerSize.Width,
outerSize.Height - arrowPadding);
if (arrowTop)
trackerBounds.Y = pos.Y + arrowPadding + trackerSettings.BorderWidth;
else
trackerBounds.Y = pos.Y - outerSize.Height - trackerSettings.BorderWidth;
var borderColor = trackerSettings.BorderColor.ToXwtColor();
ctx.RoundRectangle(trackerBounds, 6);
ctx.SetLineWidth(trackerSettings.BorderWidth);
ctx.SetColor(borderColor);
ctx.StrokePreserve();
ctx.SetColor(trackerSettings.Background.ToXwtColor());
ctx.Fill();
ctx.Save();
var arrowX = trackerBounds.Center.X;
var arrowY = arrowTop ? trackerBounds.Top : trackerBounds.Bottom;
ctx.NewPath();
ctx.MoveTo(arrowX, arrowY);
var triangleSide = 2 * arrowPadding / Math.Sqrt(3);
var halfSide = triangleSide / 2;
var verticalModifier = arrowTop ? -1 : 1;
ctx.RelMoveTo(-halfSide, 0);
ctx.RelLineTo(halfSide, verticalModifier * arrowPadding);
ctx.RelLineTo(halfSide, verticalModifier * -arrowPadding);
ctx.SetColor(borderColor);
ctx.StrokePreserve();
ctx.ClosePath();
ctx.SetColor(trackerSettings.Background.ToXwtColor());
ctx.Fill();
ctx.Restore();
ctx.SetColor(trackerSettings.TextColor.ToXwtColor());
ctx.DrawTextLayout(text,
trackerBounds.Left + trackerSettings.Padding,
trackerBounds.Top + trackerSettings.Padding);
}
}
}
//.........这里部分代码省略.........