public override void CreateMetrics(Graphics graphics) { double rightEdge = (ThickStrokeWidth / 2F) + DoubleBarPadding + ThinStrokeWidth; double leftEdge = -rightEdge; Metrics = new BRMetrics(leftEdge, rightEdge, CSSObjectClass.thinBarline, CSSObjectClass.thickBarline); SetCommonMetrics(graphics, DrawObjects); foreach (DrawObject drawObject in DrawObjects) { if (drawObject is FramedRegionStartText frst) { FramedRegionStartTextMetrics = new FramedRegionInfoMetrics(graphics, frst.Texts, frst.FrameInfo, Gap); if (RegionFrameConnectorMetrics == null) { RegionFrameConnectorMetrics = new RegionFrameConnectorMetrics(Metrics.OriginX, frst.FrameInfo.Bottom, Metrics.Top); } } if (drawObject is FramedRegionEndText fret) { FramedRegionEndTextMetrics = new FramedRegionInfoMetrics(graphics, fret.Texts, fret.FrameInfo, Gap); } } }
/// <summary> /// This function writes the staff name, barnumber and region info to the SVG file (if they are present). /// The barline itself is drawn when the system (and staff edges) is complete. /// </summary> public override void WriteDrawObjectsSVG(SvgWriter w) { base.WriteDrawObjectsSVG(w); FramedRegionInfoMetrics upperBox = null; if (FramedRegionEndTextMetrics != null) { upperBox = FramedRegionEndTextMetrics; } if (FramedRegionStartTextMetrics != null) { upperBox = (upperBox != null && upperBox.Bottom < FramedRegionStartTextMetrics.Bottom) ? upperBox : FramedRegionStartTextMetrics; } if (upperBox != null) { DrawRegionFrameConnector(w, upperBox); } if (FramedRegionEndTextMetrics != null) { FramedRegionEndTextMetrics.WriteSVG(w); } if (FramedRegionStartTextMetrics != null) { FramedRegionStartTextMetrics.WriteSVG(w); } }
protected virtual void DrawRegionFrameConnector(SvgWriter w, FramedRegionInfoMetrics framedRegionInfoMetrics) { double x = this.Metrics.OriginX; double top = framedRegionInfoMetrics.Bottom; double bottom = this.Metrics.Top; w.SvgLine(CSSObjectClass.regionFrameConnector, x, top, x, bottom); }
/// <summary> /// Moves this FramedRegionInfoMetrics object above the argument, /// but only if they overlap horizontally. /// </summary> /// <param name="framedRegionInfoMetrics"></param> internal void MoveAbove(FramedRegionInfoMetrics framedRegionInfoMetrics) { double verticalOverlap = this.OverlapHeight(framedRegionInfoMetrics, -1); if (verticalOverlap > 0) { this.Move(0, Bottom - (verticalOverlap - (2 * Gap))); } }
// The following functions are inherited from EndRegionBarline. // public override void WriteDrawObjectsSVG(SvgWriter w) // public override void AddMetricsToEdge(HorizontalEdge horizontalEdge) // internal override void AlignFramedTextsXY(List<NoteObject> fixedNoteObjects) // internal override void AddAncilliaryMetricsTo(StaffMetrics staffMetrics) public override void CreateMetrics(Graphics graphics) { double leftEdge = -((ThickStrokeWidth / 2F) + DoubleBarPadding + NormalStrokeWidth); double rightEdge = (ThickStrokeWidth / 2F); Metrics = new BRMetrics(leftEdge, rightEdge, CSSObjectClass.thinBarline, CSSObjectClass.thickBarline); foreach (DrawObject drawObject in DrawObjects) { if (drawObject is FramedRegionEndText frst) { FramedRegionEndTextMetrics = new FramedRegionInfoMetrics(graphics, frst.Texts, frst.FrameInfo, Gap); break; } } }
protected void MoveBarnumberAboveRegionBox(BarnumberMetrics barnumberMetrics, FramedRegionInfoMetrics regionInfoMetrics) { if (barnumberMetrics != null && regionInfoMetrics != null) { double padding = Gap * 1.5; double shift = barnumberMetrics.Bottom - regionInfoMetrics.Top + padding; barnumberMetrics.Move(0, -shift); } }