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); }
/// <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; } } }
/// <summary> /// /// </summary> private IReadOnlyRegion2D ToScreenCoord(IReadOnlyRegion2D region) { return(region .Offset(_contentOrigin.InvertSign().ToSize()) .Offset(_viewport.Location.ToSize())); }
/// <summary> /// コンストラクタ。 /// </summary> public Renderer(IOffscreen offscreen, Rect2D viewport, IReadOnlyRegion2D clipRegion) { _offscreen = offscreen; _clipRegion = clipRegion; _viewport = viewport; }