コード例 #1
0
        /// <summary>
        ///  Draws the LimitLines associated with this axis to the screen.
        /// </summary>
        /// <param name="c"></param>
        public virtual void RenderLimitLines(SKCanvas c)
        {
            var limitLines = XAxis.LimitLines;

            if (limitLines == null || limitLines.Count <= 0)
            {
                return;
            }

            for (int i = 0; i < limitLines.Count; i++)
            {
                LimitLine l = limitLines[i];

                if (!l.IsEnabled)
                {
                    continue;
                }

                int clipRestoreCount = c.Save();
                c.ClipRect(ViewPortHandler.ContentRect.InsetHorizontally(l.LineWidth));

                var position = Trasformer.PointValueToPixel(l.Limit, 0.0f);

                RenderLimitLineLine(c, l, position);
                RenderLimitLineLabel(c, l, position, 2.0f + l.YOffset);

                c.RestoreToCount(clipRestoreCount);
            }
        }
コード例 #2
0
        public virtual void RenderLimitLines(SKCanvas c)
        {
            IList <LimitLine> limitLines = YAxis.LimitLines;

            if (limitLines == null || limitLines.Count <= 0)
            {
                return;
            }

            SKPath limitLinePath = RenderLimitLinesPath;

            limitLinePath.Reset();

            foreach (LimitLine l in limitLines)
            {
                if (!l.IsEnabled)
                {
                    continue;
                }

                int    clipRestoreCount      = c.Save();
                SKRect limitLineClippingRect = ViewPortHandler.ContentRect.InsetVertically(l.LineWidth);
                c.ClipRect(limitLineClippingRect);

                LimitLinePaint.Style       = SKPaintStyle.Stroke;
                LimitLinePaint.Color       = l.LineColor;
                LimitLinePaint.StrokeWidth = l.LineWidth;
                LimitLinePaint.PathEffect  = l.DashPathEffect;

                SKPoint pt = Trasformer.PointValueToPixel(0f, l.Limit);

                limitLinePath.MoveTo(ViewPortHandler.ContentLeft, pt.Y);
                limitLinePath.LineTo(ViewPortHandler.ContentRight, pt.Y);

                c.DrawPath(limitLinePath, LimitLinePaint);
                limitLinePath.Reset();
                // c.drawLines(pts, mLimitLinePaint);

                string label = l.Label;

                // if drawing the limit-value label is enabled
                if (string.IsNullOrEmpty(label) == false)
                {
                    LimitLinePaint.Style       = l.TextStyle;
                    LimitLinePaint.PathEffect  = null;
                    LimitLinePaint.Typeface    = l.Typeface;
                    LimitLinePaint.Color       = l.TextColor;
                    LimitLinePaint.StrokeWidth = 0.5f;
                    LimitLinePaint.TextSize    = l.TextSize;

                    float labelLineHeight = LimitLinePaint.MeasureHeight(label);
                    float xOffset         = 4f.DpToPixel() + l.XOffset;
                    float yOffset         = l.LineWidth + labelLineHeight + l.YOffset;

                    LimitLine.LimitLabelPosition position = l.LabelPosition;

                    if (position == LimitLine.LimitLabelPosition.RightTop)
                    {
                        LimitLinePaint.TextAlign = SKTextAlign.Right;
                        c.DrawText(label,
                                   ViewPortHandler.ContentRight - xOffset,
                                   pt.Y - yOffset + labelLineHeight, LimitLinePaint);
                    }
                    else if (position == LimitLine.LimitLabelPosition.RightBottom)
                    {
                        LimitLinePaint.TextAlign = SKTextAlign.Right;
                        c.DrawText(label,
                                   ViewPortHandler.ContentRight - xOffset,
                                   pt.Y + yOffset, LimitLinePaint);
                    }
                    else if (position == LimitLine.LimitLabelPosition.LeftTop)
                    {
                        LimitLinePaint.TextAlign = SKTextAlign.Left;
                        c.DrawText(label,
                                   ViewPortHandler.ContentLeft + xOffset,
                                   pt.Y - yOffset + labelLineHeight, LimitLinePaint);
                    }
                    else
                    {
                        LimitLinePaint.TextAlign = SKTextAlign.Left;
                        c.DrawText(label,
                                   ViewPortHandler.OffsetLeft + xOffset,
                                   pt.Y + yOffset, LimitLinePaint);
                    }
                }

                c.RestoreToCount(clipRestoreCount);
            }
        }