public HitTestResult HitTest( Point pt, IViewModel eventsHandler, HitTestResult.AreaCode panelCode, Func <LJD.Graphics> graphicsFactory ) { var viewMetrics = this; HitTestResult ret = new HitTestResult(); if (panelCode == HitTestResult.AreaCode.NavigationPanel) { var m = GetNavigationPanelMetrics(eventsHandler); if (m.Resizer1.Contains(pt)) { ret.Area = HitTestResult.AreaCode.NavigationPanelResizer1; } else if (m.Resizer2.Contains(pt)) { ret.Area = HitTestResult.AreaCode.NavigationPanelResizer2; } else if (m.VisibleRangeBox.Contains(pt)) { ret.Area = HitTestResult.AreaCode.NavigationPanelThumb; } else { ret.Area = HitTestResult.AreaCode.NavigationPanel; } ret.RelativeX = (double)pt.X / viewMetrics.NavigationPanelWidth; return(ret); } double viewWidth = viewMetrics.ActivitiesViewWidth; ret.RelativeX = (double)pt.X / viewWidth; ret.ActivityIndex = GetActivityByPoint(pt, viewMetrics, eventsHandler.ActivitiesCount); if (panelCode == HitTestResult.AreaCode.CaptionsPanel) { if (ret.ActivityIndex != null && pt.X > viewMetrics.SequenceDiagramAreaWidth && pt.X < viewMetrics.SequenceDiagramAreaWidth + viewMetrics.FoldingAreaWidth) { ret.Area = HitTestResult.AreaCode.FoldingSign; } else { ret.Area = HitTestResult.AreaCode.CaptionsPanel; } return(ret); } using (var g = graphicsFactory()) { foreach (var bmk in GetBookmarksMetrics(g, eventsHandler)) { if (bmk.IsOverLink(pt)) { ret.Area = HitTestResult.AreaCode.BookmarkTrigger; ret.Trigger = bmk.Bookmark.Trigger; return(ret); } } foreach (var evt in GetEventMetrics(g, eventsHandler).Reverse()) { if (evt.IsOverLink(pt)) { ret.Area = HitTestResult.AreaCode.EventTrigger; ret.Trigger = evt.Event.Trigger; return(ret); } } } if (pt.Y < viewMetrics.RulersPanelHeight) { ret.Area = HitTestResult.AreaCode.RulersPanel; return(ret); } foreach (var a in GetActivitiesMetrics(eventsHandler)) { foreach (var ms in a.Milestones) { if (ms.Bounds.HasValue && ms.Bounds.Value.Contains(pt)) { ret.Area = HitTestResult.AreaCode.ActivityTrigger; ret.Trigger = ms.Trigger; return(ret); } } if (a.BeginTriggerLinkRect.HasValue && a.BeginTriggerLinkRect.Value.Contains(pt)) { ret.Area = HitTestResult.AreaCode.ActivityTrigger; ret.Trigger = a.Activity.BeginTrigger; return(ret); } if (a.EndTriggerLinkRect.HasValue && a.EndTriggerLinkRect.Value.Contains(pt)) { ret.Area = HitTestResult.AreaCode.ActivityTrigger; ret.Trigger = a.Activity.EndTrigger; return(ret); } if (a.ActivityBarRect.Contains(pt)) { ret.Area = HitTestResult.AreaCode.Activity; return(ret); } } ret.Area = HitTestResult.AreaCode.ActivitiesPanel; return(ret); }
static void PushGraphicsStateForDrawingActivites(LJD.Graphics g, ViewMetrics vm, HitTestResult.AreaCode area) { g.PushState(); g.IntsersectClip(new Rectangle(0, vm.RulersPanelHeight, area == HitTestResult.AreaCode.CaptionsPanel ? vm.ActivitesCaptionsViewWidth : vm.ActivitiesViewWidth, vm.ActivitiesViewHeight)); }