/// <summary> /// Renders the legend for the specified series. /// </summary> /// <param name="rc">The render context.</param> /// <param name="s">The series.</param> /// <param name="rect">The position and size of the legend.</param> private void RenderLegend(IRenderContext rc, Series.Series s, OxyRect rect) { var actualItemAlignment = this.LegendItemAlignment; if (this.LegendOrientation == LegendOrientation.Horizontal) { // center/right alignment is not supported for horizontal orientation actualItemAlignment = HorizontalAlignment.Left; } double x = rect.Left; switch (actualItemAlignment) { case HorizontalAlignment.Center: x = (rect.Left + rect.Right) / 2; if (this.LegendSymbolPlacement == LegendSymbolPlacement.Left) { x -= (this.LegendSymbolLength + this.LegendSymbolMargin) / 2; } else { x -= (this.LegendSymbolLength + this.LegendSymbolMargin) / 2; } break; case HorizontalAlignment.Right: x = rect.Right; // if (LegendSymbolPlacement == LegendSymbolPlacement.Right) x -= this.LegendSymbolLength + this.LegendSymbolMargin; break; } if (this.LegendSymbolPlacement == LegendSymbolPlacement.Left) { x += this.LegendSymbolLength + this.LegendSymbolMargin; } double y = rect.Top; var maxsize = new OxySize(Math.Max(rect.Width - this.LegendSymbolLength - this.LegendSymbolMargin, 0), rect.Height); rc.SetToolTip(s.ToolTip); var textSize = rc.DrawMathText( new ScreenPoint(x, y), s.Title, this.LegendTextColor.GetActualColor(this.TextColor), this.LegendFont ?? this.DefaultFont, this.LegendFontSize, this.LegendFontWeight, 0, actualItemAlignment, VerticalAlignment.Top, maxsize, true); double x0 = x; switch (actualItemAlignment) { case HorizontalAlignment.Center: x0 = x - (textSize.Width * 0.5); break; case HorizontalAlignment.Right: x0 = x - textSize.Width; break; } var symbolRect = new OxyRect( this.LegendSymbolPlacement == LegendSymbolPlacement.Right ? x0 + textSize.Width + this.LegendSymbolMargin : x0 - this.LegendSymbolMargin - this.LegendSymbolLength, rect.Top, this.LegendSymbolLength, textSize.Height); s.RenderLegend(rc, symbolRect); rc.SetToolTip(null); }
/// <summary> /// Renders the legend for the specified series. /// </summary> /// <param name="rc"> /// The render context. /// </param> /// <param name="s"> /// The series. /// </param> /// <param name="rect"> /// The position and size of the legend. /// </param> private void RenderLegend(IRenderContext rc, Series s, OxyRect rect) { double x = rect.Left; switch (this.LegendItemAlignment) { case HorizontalTextAlign.Center: x = (rect.Left + rect.Right) / 2; if (this.LegendSymbolPlacement == LegendSymbolPlacement.Left) { x -= (this.LegendSymbolLength + this.LegendSymbolMargin) / 2; } else { x -= (this.LegendSymbolLength + this.LegendSymbolMargin) / 2; } break; case HorizontalTextAlign.Right: x = rect.Right; // if (LegendSymbolPlacement == LegendSymbolPlacement.Right) x -= this.LegendSymbolLength + this.LegendSymbolMargin; break; } if (this.LegendSymbolPlacement == LegendSymbolPlacement.Left) { x += this.LegendSymbolLength + this.LegendSymbolMargin; } double y = rect.Top; var maxsize = new OxySize(Math.Max(rect.Right - x, 0), Math.Max(rect.Bottom - y, 0)); var textSize = rc.DrawMathText( new ScreenPoint(x, y), s.Title, this.LegendTextColor ?? this.TextColor, this.LegendFont ?? this.DefaultFont, this.LegendFontSize, this.LegendFontWeight, 0, this.LegendItemAlignment, VerticalTextAlign.Top, maxsize, true); double x0 = x; switch (this.LegendItemAlignment) { case HorizontalTextAlign.Center: x0 = x - (textSize.Width * 0.5); break; case HorizontalTextAlign.Right: x0 = x - textSize.Width; break; } var symbolRect = new OxyRect( this.LegendSymbolPlacement == LegendSymbolPlacement.Right ? x0 + textSize.Width + this.LegendSymbolMargin : x0 - this.LegendSymbolMargin - this.LegendSymbolLength, rect.Top, this.LegendSymbolLength, textSize.Height); s.RenderLegend(rc, symbolRect); }