void ISelectable.DrawSelection(GaugeGraphics g, bool designTimeSelection) { if (GetGauge() == null) { return; } Stack stack = new Stack(); for (NamedElement namedElement = GetGauge().ParentObject; namedElement != null; namedElement = (NamedElement)((IRenderable)namedElement).GetParentRenderable()) { stack.Push(namedElement); } foreach (IRenderable item in stack) { g.CreateDrawRegion(item.GetBoundRect(g)); } g.CreateDrawRegion(((IRenderable)GetGauge()).GetBoundRect(g)); SetDrawRegion(g); Gap gap = new Gap(GetRadius()); gap.SetOffset(Placement.Cross, Width); gap.SetBase(); if (MajorTickMark.Visible) { gap.SetOffsetBase(MajorTickMark.Placement, MajorTickMark.Length); if (MajorTickMark.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - MajorTickMark.DistanceFromScale); } else if (MajorTickMark.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f); gap.Inside = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f); } } if (MinorTickMark.Visible) { gap.SetOffsetBase(MinorTickMark.Placement, MinorTickMark.Length); if (MinorTickMark.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - MinorTickMark.DistanceFromScale); } else if (MinorTickMark.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f); gap.Inside = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f); } } if (LabelStyle.Visible) { if (LabelStyle.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - LabelStyle.DistanceFromScale); } else if (LabelStyle.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f); gap.Inside = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f); } } float angularMargin = 4f; float num = 5f; using (GraphicsPath graphicsPath = GetBarPath(gap.Inside + num, gap.Outside + num, angularMargin)) { if (graphicsPath != null) { PointF[] selectionMarkers = GetSelectionMarkers(g, gap.Inside + num, gap.Outside + num, angularMargin); g.DrawRadialSelection(g, graphicsPath, selectionMarkers, designTimeSelection, Common.GaugeCore.SelectionBorderColor, Common.GaugeCore.SelectionMarkerColor); } } g.RestoreDrawRegion(); g.RestoreDrawRegion(); foreach (IRenderable item2 in stack) { _ = item2; g.RestoreDrawRegion(); } }
private void SetScaleHitTestPath(GaugeGraphics g) { Gap gap = new Gap(GetRadius()); gap.SetOffset(Placement.Cross, Width); gap.SetBase(); if (MajorTickMark.Visible) { gap.SetOffsetBase(MajorTickMark.Placement, MajorTickMark.Length); if (MajorTickMark.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - MajorTickMark.DistanceFromScale); } else if (MajorTickMark.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f); gap.Inside = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - MajorTickMark.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, MajorTickMark.DistanceFromScale + MajorTickMark.Length + Width / 2f); } } if (MinorTickMark.Visible) { gap.SetOffsetBase(MinorTickMark.Placement, MinorTickMark.Length); if (MinorTickMark.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - MinorTickMark.DistanceFromScale); } else if (MinorTickMark.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f); gap.Inside = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - MinorTickMark.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, MinorTickMark.DistanceFromScale + MinorTickMark.Length + Width / 2f); } } if (LabelStyle.Visible) { if (LabelStyle.Placement == Placement.Outside) { gap.Outside = Math.Max(gap.Outside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f); gap.Inside = Math.Max(gap.Inside, 0f - LabelStyle.DistanceFromScale); } else if (LabelStyle.Placement == Placement.Cross) { gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f); gap.Inside = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height / 2f); } else { gap.Outside = Math.Max(gap.Outside, 0f - LabelStyle.DistanceFromScale); gap.Inside = Math.Max(gap.Inside, LabelStyle.DistanceFromScale + (float)LabelStyle.Font.Height + Width / 2f); } } GraphicsPath barPath = GetBarPath(gap.Inside, gap.Outside, 0f); Common.GaugeCore.HotRegionList.SetHotRegion(this, g.GetAbsolutePoint(GetPivotPoint()), barPath); }