Exemplo n.º 1
0
        public void Clip(IReadOnlyRegion2D region)
        {
            var clip = new System.Drawing.Region(System.Drawing.Rectangle.Empty);

            foreach (var rect in region.Rects)
            {
                clip.Union(new System.Drawing.Rectangle(rect.X, rect.Y, rect.Width, rect.Height));
            }
            Graphics.SetClip(clip, System.Drawing.Drawing2D.CombineMode.Replace);
        }
Exemplo n.º 2
0
 /// <summary>
 ///
 /// </summary>
 public void Clip(IReadOnlyRegion2D region)
 {
     _writer.WriteStartObject();
     _writer.WriteString("name", nameof(JSRenderFuncName.clip));
     _writer.WriteStartArray("arg");
     foreach (var rect in region.Rects)
     {
         _writer.WriteStartObject();
         _writer.WriteNumber("x", rect.X);
         _writer.WriteNumber("y", rect.Y);
         _writer.WriteNumber("w", rect.Width);
         _writer.WriteNumber("h", rect.Height);
         _writer.WriteEndObject();
     }
     _writer.WriteEndArray();
     _writer.WriteEndObject();
 }
        /// <summary>
        /// 文字ループ。
        /// </summary>
        public IEnumerable <ICharMetric> EnumerateCharMetrics(IReadOnlyRegion2D clipRegion)
        {
            foreach (var lineMetric in EnumerateLineMetrics(clipRegion))
            {
                foreach (var charMetric in EnumerateCharMetricsByLine(lineMetric.Index, true, true))
                {
                    Debug.Assert(CharUtil.CanDraw(charMetric.Char));

                    if (clipRegion.IntersectsWith(charMetric.CharRect))
                    {
                        yield return(charMetric);
                    }

                    if (charMetric.Right > clipRegion.Bounds.Right)
                    {
                        break;
                    }
                }
            }
        }
        /// <summary>
        /// 行ループ。
        /// </summary>
        public IEnumerable <ILineMetric> EnumerateLineMetrics(IReadOnlyRegion2D clipRegion)
        {
            var lineHeight = _textView.GetLineHeight();
            var lineIndex  = clipRegion.Bounds.Y / lineHeight;
            var y          = lineIndex * lineHeight;
            var lineMetric = new LineMetric();

            while (lineIndex < _textView.Doc.Lines.Count)
            {
                if ((y + lineHeight) > clipRegion.Bounds.Top)
                {
                    yield return(lineMetric.Init(lineIndex, y, lineHeight));
                }

                lineIndex++;
                y += lineHeight;

                if (y >= clipRegion.Bounds.Bottom)
                {
                    break;
                }
            }
        }
Exemplo n.º 5
0
 /// <summary>
 ///
 /// </summary>
 private IReadOnlyRegion2D ToScreenCoord(IReadOnlyRegion2D region)
 {
     return(region
            .Offset(_contentOrigin.InvertSign().ToSize())
            .Offset(_viewport.Location.ToSize()));
 }
Exemplo n.º 6
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 public Renderer(IOffscreen offscreen, Rect2D viewport, IReadOnlyRegion2D clipRegion)
 {
     _offscreen  = offscreen;
     _clipRegion = clipRegion;
     _viewport   = viewport;
 }