protected override void OnRender(DrawingContext dc) { dc.PushGuidelineSet(Guidelines); // This isn't pointless, it makes WPF mouse hit tests succeed near the wire instead of exactly on it. dc.DrawRectangle(Brushes.Transparent, null, new Rect(-2, -2, ActualWidth + 4, ActualHeight + 4)); if (Selected) { dc.DrawLine(SelectedWirePen, new Point(0, 0), new Point(ActualWidth, ActualHeight)); } else if (Highlighted) { dc.DrawLine(HighlightedWirePen, new Point(0, 0), new Point(ActualWidth, ActualHeight)); } else { dc.DrawLine(WirePen, new Point(0, 0), new Point(ActualWidth, ActualHeight)); } ElementControl.DrawTerminal(dc, ToPoint(wire.A - wire.LowerBound), wire.Anode.ConnectedTo != null); ElementControl.DrawTerminal(dc, ToPoint(wire.B - wire.LowerBound), wire.Cathode.ConnectedTo != null); dc.Pop(); }
private static Pen MapToSignalPen(Circuit.EdgeType Color) { switch (Color) { // These two need to be brighter than the normal colors. case Circuit.EdgeType.Red: return(new Pen(new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 80, 80)), 1.0)); case Circuit.EdgeType.Blue: return(new Pen(new SolidColorBrush(System.Windows.Media.Color.FromRgb(20, 180, 255)), 1.0)); default: return(ElementControl.MapToPen(Color)); } }
private void ElementRemoved(object sender, Circuit.ElementEventArgs e) { ElementControl control = (ElementControl)e.Element.Tag; control.Element.LayoutChanged -= ElementLayoutChanged; wires.Children.Remove(control); symbols.Children.Remove(control); if (control.Selected) { RaiseSelectionChanged(); } }
private void ElementLayoutChanged(object sender, EventArgs e) { Circuit.Element element = (Circuit.Element)sender; Circuit.Coord lb = element.LowerBound; Circuit.Coord ub = element.UpperBound; ElementControl control = (ElementControl)element.Tag; Canvas.SetLeft(control, lb.x + origin.x); Canvas.SetTop(control, lb.y + origin.y); control.Width = ub.x - lb.x; control.Height = ub.y - lb.y; control.InvalidateVisual(); }
private void ElementAdded(object sender, Circuit.ElementEventArgs e) { ElementControl control = ElementControl.New(e.Element); if (control is WireControl) { wires.Children.Add(control); } else if (control is SymbolControl) { symbols.Children.Add(control); } else { throw new InvalidOperationException("Unknown element type"); } control.Element.LayoutChanged += ElementLayoutChanged; ElementLayoutChanged(control.Element, null); }
public void RemoveOverlay(ElementControl Element) { overlays.Children.Remove(Element); Element.Element.LayoutChanged -= ElementLayoutChanged; }
// Add/remove overlay element controls. public void AddOverlay(ElementControl Element) { overlays.Children.Add(Element); Element.Element.LayoutChanged += ElementLayoutChanged; ElementLayoutChanged(Element.Element, null); }
public void RemoveOverlay(ElementControl Element) { Overlays.Children.Remove(Element); Element.Element.LayoutChanged -= ElementLayoutChanged; }
// Add/remove overlay element controls. public void AddOverlay(ElementControl Element) { Overlays.Children.Add(Element); Element.Element.LayoutChanged += ElementLayoutChanged; ElementLayoutChanged(Element.Element, null); }