public FontGlyphData(FontPage page, FontGlyph glyph, Rectangle rectangle) { this.Page = page; this.glyph = glyph; this.Rectangle = rectangle; this.PaddingRectangle = page.GeneratePaddingRectangle(rectangle); this.SpacingRectangle = page.GenerateSpacingRectangle(rectangle); }
private IReservator ReserveRegion(FontGlyph glyph, Point point) { var padding = this.settings.Padding; var metrics = glyph.Metrics; var width = metrics.Width; var height = metrics.Height; var rect = new Rectangle(point.X + padding.Left, point.Y + padding.Top, width, height); var paddingRect = this.Page.GeneratePaddingRectangle(rect); if (paddingRect.Right > this.Rectangle.Right || paddingRect.Bottom > this.Rectangle.Bottom) { return(null); } var spacingRect = this.Page.GenerateSpacingRectangle(rect); var nodeList = new List <FontNode>(this.count); this.CollectNode(spacingRect, nodeList); if (nodeList.Any() == false) { return(null); } var query1 = from item in nodeList where item.IsLeaf select item; var query2 = from item in query1 where this.IntersectsWithGlyph(spacingRect) == false select item; if (query1.Count() != query2.Count()) { return(null); } return(new Reservator(() => this.Reserve(glyph, nodeList.ToArray(), rect))); }
private void Reserve(FontGlyph glyph, FontNode[] nodes, Rectangle region) { var glyphData = new FontGlyphData(this.Page, glyph, region); foreach (var item in nodes) { item.AddGlyphData(glyphData); } var spacingRect = glyphData.SpacingRectangle; var lt = new Point(spacingRect.Left, spacingRect.Top); var rt = new Point(spacingRect.Right, spacingRect.Top); var lb = new Point(spacingRect.Left, spacingRect.Bottom); var rb = new Point(spacingRect.Right, spacingRect.Bottom); this.pointList.Remove(lt); this.pointList.Remove(lb); this.pointList.Insert(0, rt); if (this.rightBottomList.Contains(lb) == false) { this.pointList.Add(lb); } this.rightBottomList.Add(rb); }
public IReservator ReserveRegion(FontGlyph glyph) { if (glyph == null) { throw new ArgumentNullException(nameof(glyph)); } if (glyph.Bitmap == null) { return(null); } if (this.Parent != null) { throw new InvalidOperationException(Resources.Exception_RootOnlyCanBeUsed); } foreach (var item in this.pointList) { if (this.ReserveRegion(glyph, item) is IReservator reservator) { return(reservator); } } return(null); }
public IReservator ReserveRegion(FontGlyph glyph) { return(this.node.ReserveRegion(glyph)); }