internal ViewerControl.MouseAction ImminentAction(MouseEventArgs e) { if (clickableThings == null) { return(null); } int i = 0; while (i < clickableThings.GetLength(0)) { ClickableThing clickableThing = clickableThings[i]; if (clickableThing.vertexLocation.originalIndex >= 0 && clickableThing.path.IsVisible(e.Location)) { if (clickableThing.clickedWhich == ClickableThing.ClickedWhich.Segment) { return(new SegmentMouseAction(this, clickableThing.vertexLocation.originalIndex, e.Location)); } return(new VertexMouseAction(this, clickableThing.vertexLocation.originalIndex)); } else { i++; } } return(null); }
private void UpdateState(State state) { if (state.Equals(lastState)) { return; } TracedScreenPoint[] path = GetUserRegion() .GetPath(CoordinateSystemUtilities.GetBounds(csi, state.center, state.size), state.center.zoom, csi); List <TracedScreenPoint> list = new List <TracedScreenPoint>(); int length = path.GetLength(0); for (int i = 0; i < length; i++) { D.Assert(path[i].originalIndex >= 0); int num = (i + length - 1) % length; if (!(path[num].pointf == path[i].pointf)) { list.Add(path[i]); } } list.ToArray(); int count = list.Count; List <ClickableThing> list2 = new List <ClickableThing>(); List <ClickableThing> list3 = new List <ClickableThing>(); for (int j = 0; j < count; j++) { ClickableThing clickableThing = new ClickableThing(); list2.Add(clickableThing); clickableThing.vertexLocation = list[j]; clickableThing.path = new GraphicsPath(); clickableThing.path.AddEllipse(list[j].pointf.X - 4f, list[j].pointf.Y - 4f, 8f, 8f); clickableThing.clickedWhich = ClickableThing.ClickedWhich.Vertex; clickableThing.pointIndex = j; ClickableThing clickableThing2 = new ClickableThing(); list3.Add(clickableThing2); clickableThing2.vertexLocation = list[j]; clickableThing2.path = new GraphicsPath(); clickableThing2.path.AddLine(list[j].pointf, list[(j + 1) % count].pointf); clickableThing2.path.Widen(new Pen(Color.Black, 4f)); clickableThing2.clickedWhich = ClickableThing.ClickedWhich.Segment; clickableThing2.pointIndex = j; } list2.AddRange(list3); clickableThings = list2.ToArray(); lastState = new State(state); }
internal void Paint(PaintSpecification e, LatLonZoom center, Size size) { if (GetUserRegion() == null) { return; } State state; state.center = center; state.size = size; state.valid = true; UpdateState(state); ClickableThing[] array = clickableThings; for (int i = 0; i < array.Length; i++) { ClickableThing clickableThing = array[i]; e.Graphics.FillPath(segmentFillBrush, clickableThing.path); } }