示例#1
0
        public static Rectangle FillStrokedRoundedRectangle(this Context g, Rectangle r, double radius, Cairo.Color fill, Cairo.Color stroke, int lineWidth)
        {
            g.Save ();

            if ((radius > r.Height / 2) || (radius > r.Width / 2))
                radius = Math.Min (r.Height / 2, r.Width / 2);

            g.MoveTo (r.X, r.Y + radius);
            g.Arc (r.X + radius, r.Y + radius, radius, Math.PI, -Math.PI / 2);
            g.LineTo (r.X + r.Width - radius, r.Y);
            g.Arc (r.X + r.Width - radius, r.Y + radius, radius, -Math.PI / 2, 0);
            g.LineTo (r.X + r.Width, r.Y + r.Height - radius);
            g.Arc (r.X + r.Width - radius, r.Y + r.Height - radius, radius, 0, Math.PI / 2);
            g.LineTo (r.X + radius, r.Y + r.Height);
            g.Arc (r.X + radius, r.Y + r.Height - radius, radius, Math.PI / 2, Math.PI);
            g.ClosePath ();

            g.Color = fill;
            g.FillPreserve ();

            g.Color = stroke;
            g.LineWidth = lineWidth;

            Rectangle dirty = g.StrokeExtents ();

            g.Stroke ();
            g.Restore ();

            return dirty;
        }
示例#2
0
        public static Rectangle FillEllipse(this Context g, Rectangle r, Cairo.Color color)
        {
            double rx = r.Width / 2;
            double ry = r.Height / 2;
            double cx = r.X + rx;
            double cy = r.Y + ry;
            double c1 = 0.552285;

            g.Save ();

            g.MoveTo (cx + rx, cy);

            g.CurveTo (cx + rx, cy - c1 * ry, cx + c1 * rx, cy - ry, cx, cy - ry);
            g.CurveTo (cx - c1 * rx, cy - ry, cx - rx, cy - c1 * ry, cx - rx, cy);
            g.CurveTo (cx - rx, cy + c1 * ry, cx - c1 * rx, cy + ry, cx, cy + ry);
            g.CurveTo (cx + c1 * rx, cy + ry, cx + rx, cy + c1 * ry, cx + rx, cy);

            g.ClosePath ();

            g.Color = color;

            Rectangle dirty = g.StrokeExtents ();

            g.Fill ();
            g.Restore ();

            return dirty;
        }
示例#3
0
        public static Rectangle FillStrokedEllipse(this Context g, Rectangle r, Cairo.Color fill, Cairo.Color stroke, int lineWidth)
        {
            double rx = r.Width / 2;
            double ry = r.Height / 2;
            double cx = r.X + rx;
            double cy = r.Y + ry;
            double c1 = 0.552285;

            g.Save ();

            g.MoveTo (cx + rx, cy);

            g.CurveTo (cx + rx, cy - c1 * ry, cx + c1 * rx, cy - ry, cx, cy - ry);
            g.CurveTo (cx - c1 * rx, cy - ry, cx - rx, cy - c1 * ry, cx - rx, cy);
            g.CurveTo (cx - rx, cy + c1 * ry, cx - c1 * rx, cy + ry, cx, cy + ry);
            g.CurveTo (cx + c1 * rx, cy + ry, cx + rx, cy + c1 * ry, cx + rx, cy);

            g.ClosePath ();

            g.Color = fill;
            g.FillPreserve ();

            g.Color = stroke;
            g.LineWidth = lineWidth;

            Rectangle dirty = g.StrokeExtents ();

            g.Stroke ();
            g.Restore ();

            return dirty;
        }
示例#4
0
        public static Path CreateRoundedRectanglePath(this Context g, Rectangle r, double radius)
        {
            g.Save ();

            if ((radius > r.Height / 2) || (radius > r.Width / 2))
                radius = Math.Min (r.Height / 2, r.Width / 2);

            g.MoveTo (r.X, r.Y + radius);
            g.Arc (r.X + radius, r.Y + radius, radius, Math.PI, -Math.PI / 2);
            g.LineTo (r.X + r.Width - radius, r.Y);
            g.Arc (r.X + r.Width - radius, r.Y + radius, radius, -Math.PI / 2, 0);
            g.LineTo (r.X + r.Width, r.Y + r.Height - radius);
            g.Arc (r.X + r.Width - radius, r.Y + r.Height - radius, radius, 0, Math.PI / 2);
            g.LineTo (r.X + radius, r.Y + r.Height);
            g.Arc (r.X + radius, r.Y + r.Height - radius, radius, Math.PI / 2, Math.PI);
            g.ClosePath ();

            Path p = g.CopyPath ();
            g.Restore ();

            return p;
        }
示例#5
0
        public static Path CreatePolygonPath(this Context g, Cairo.Point[][] polygonSet)
        {
            g.Save ();
            Cairo.Point p;
            for (int i =0; i < polygonSet.Length; i++)
            {
                if (polygonSet[i].Length == 0)
                    continue;

                p = polygonSet[i][0];
                g.MoveTo (p.X, p.Y);

                for (int j =1; j < polygonSet[i].Length; j++)
                {
                    p = polygonSet[i][j];
                    g.LineTo (p.X, p.Y);
                }
                g.ClosePath ();
            }

            Path path = g.CopyPath ();

            g.Restore ();

            return path;
        }
示例#6
0
        public static Path CreateEllipsePath(this Context g, Rectangle r)
        {
            double rx = r.Width / 2;
            double ry = r.Height / 2;
            double cx = r.X + rx;
            double cy = r.Y + ry;
            double c1 = 0.552285;

            g.Save ();

            g.MoveTo (cx + rx, cy);

            g.CurveTo (cx + rx, cy - c1 * ry, cx + c1 * rx, cy - ry, cx, cy - ry);
            g.CurveTo (cx - c1 * rx, cy - ry, cx - rx, cy - c1 * ry, cx - rx, cy);
            g.CurveTo (cx - rx, cy + c1 * ry, cx - c1 * rx, cy + ry, cx, cy + ry);
            g.CurveTo (cx + c1 * rx, cy + ry, cx + rx, cy + c1 * ry, cx + rx, cy);

            g.ClosePath ();

            Path path = g.CopyPath ();

            g.Restore ();

            return path;
        }
示例#7
0
		public static Rectangle FillRoundedRectangle (this Context g, Rectangle r, double radius, Color fill)
		{
			g.Save ();

			if ((radius > r.Height / 2) || (radius > r.Width / 2))
				radius = Math.Min (r.Height / 2, r.Width / 2);

			g.MoveTo (r.X, r.Y + radius);
			g.Arc (r.X + radius, r.Y + radius, radius, Math.PI, -Math.PI / 2);
			g.LineTo (r.X + r.Width - radius, r.Y);
			g.Arc (r.X + r.Width - radius, r.Y + radius, radius, -Math.PI / 2, 0);
			g.LineTo (r.X + r.Width, r.Y + r.Height - radius);
			g.Arc (r.X + r.Width - radius, r.Y + r.Height - radius, radius, 0, Math.PI / 2);
			g.LineTo (r.X + radius, r.Y + r.Height);
			g.Arc (r.X + radius, r.Y + r.Height - radius, radius, Math.PI / 2, Math.PI);
			g.ClosePath ();

			g.SetSourceColor (fill);

			Rectangle dirty = g.FixedStrokeExtents ();

			g.Fill ();
			g.Restore ();

			return dirty;
		}
示例#8
0
		public static Rectangle DrawEllipse (this Context g, Rectangle r, Color color, int lineWidth)
		{
			double rx = r.Width / 2;
			double ry = r.Height / 2;
			double cx = r.X + rx;
			double cy = r.Y + ry;
			double c1 = 0.552285;

			g.Save ();

			g.MoveTo (cx + rx, cy);

			g.CurveTo (cx + rx, cy - c1 * ry, cx + c1 * rx, cy - ry, cx, cy - ry);
			g.CurveTo (cx - c1 * rx, cy - ry, cx - rx, cy - c1 * ry, cx - rx, cy);
			g.CurveTo (cx - rx, cy + c1 * ry, cx - c1 * rx, cy + ry, cx, cy + ry);
			g.CurveTo (cx + c1 * rx, cy + ry, cx + rx, cy + c1 * ry, cx + rx, cy);

			g.ClosePath ();

			g.SetSourceColor (color);
			g.LineWidth = lineWidth;

			Rectangle dirty = g.FixedStrokeExtents ();

			g.Stroke ();
			g.Restore ();

			return dirty;
		}