private void owner_MouseDownPicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button != MouseButtons.Left) { return; } TimelinePath hitPath = e.HitRecord.HitPath; bool isResizing = false; switch (e.HitRecord.Type) { case HitType.IntervalResizeLeft: if (Owner.IsEditable(hitPath) && ( Owner.Selection.SelectionContains(hitPath) || Owner.Select <IEvent>(hitPath))) { IInterval hitInterval = e.HitRecord.HitTimelineObject as IInterval; m_resizer = new Resizer(Side.Left, ScaleMode.InPlace, hitInterval.Start, Owner); isResizing = true; } break; case HitType.IntervalResizeRight: if (Owner.IsEditable(hitPath) && ( Owner.Selection.SelectionContains(hitPath) || Owner.Select <IEvent>(hitPath))) { IInterval hitInterval = e.HitRecord.HitTimelineObject as IInterval; m_resizer = new Resizer(Side.Right, ScaleMode.InPlace, hitInterval.Start + hitInterval.Length, Owner); isResizing = true; } break; case HitType.Custom: { HitRecordObject hitManipulator = e.HitRecord.HitObject as HitRecordObject; if (hitManipulator != null) { if (hitManipulator.Side == Side.Left) { m_resizer = new Resizer(Side.Left, ScaleMode.TimePeriod, m_worldMin, Owner); } else { m_resizer = new Resizer(Side.Right, ScaleMode.TimePeriod, m_worldMax, Owner); } isResizing = true; } } break; default: m_resizer = null; break; } Owner.IsResizingSelection = isResizing; //legacy. obsolete. }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.Left && !m_owner.IsUsingMouse) { m_mouseMoveHitRecord = null; HitRecord hitRecord = e.HitRecord; if (m_owner.IsEditable(hitRecord.HitPath)) { switch (e.HitRecord.Type) { case HitType.GroupMove: case HitType.TrackMove: case HitType.Interval: case HitType.Key: case HitType.Marker: m_mouseMoveHitRecord = hitRecord; break; } } m_owner.IsMovingSelection = m_mouseMoveHitRecord != null; //obsolete } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.None) { HitRecord hitRecord = e.HitRecord; TimelinePath hitPath = hitRecord.HitPath; switch (hitRecord.Type) { case HitType.IntervalResizeLeft: case HitType.IntervalResizeRight: if (Owner.IsEditable(hitPath)) { Owner.Cursor = Cursors.SizeWE; } break; //one of the scale manipulator's handles? case HitType.Custom: if (hitRecord.HitObject == m_leftHitObject || hitRecord.HitObject == m_rightHitObject) { Owner.Cursor = Cursors.SizeWE; } break; default: break; } } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.None && e.HitRecord.HitObject == m_handleHitObject) { Owner.Cursor = Cursors.SizeWE; e.Handled = true; } }
private void owner_Picking(object sender, HitEventArgs e) { Rectangle clipRectangle = Owner.VisibleClientRectangle; if (m_handleRect.IntersectsWith(clipRectangle) && e.PickRectangle.IntersectsWith(m_handleRect)) { // sets Handled to true e.HitRecord = new HitRecord(HitType.Custom, m_handleHitObject); } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { string toolTipText = null; if (m_active) { e.Handled = true; if (e.HitRecord.Type == HitType.Interval && e.MouseEvent.Button == MouseButtons.None && !m_owner.IsUsingMouse && m_owner.IsEditable(e.HitRecord.HitPath)) { SetCursor(); TimelinePath hitPath = e.HitRecord.HitPath; IInterval hitObject = (IInterval)e.HitRecord.HitTimelineObject; float worldX = GdiUtil.InverseTransform(m_owner.Transform, e.MouseEvent.Location.X); //Make sure the snap-to indicator line is drawn. float delta = m_owner.GetSnapOffset(new[] { worldX }, s_snapOptions); worldX += delta; worldX = m_owner.ConstrainFrameOffset(worldX); Matrix localToWorld = TimelineControl.CalculateLocalToWorld(hitPath); if (worldX <= GdiUtil.Transform(localToWorld, hitObject.Start) || worldX >= GdiUtil.Transform(localToWorld, hitObject.Start + hitObject.Length)) { // Clear the results since a split is impossible. m_owner.GetSnapOffset(new float[] { }, s_snapOptions); } else { toolTipText = worldX.ToString(); } } } if (toolTipText != null) { m_toolTip.Show(toolTipText, m_owner, e.MouseEvent.Location); } else { m_toolTip.Hide(m_owner); } }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.Left && e.HitRecord.HitObject == m_handleHitObject) { m_isMoving = true; Owner.Cursor = Cursors.SizeWE; e.Handled = true; Owner.Invalidate(); } else if (e.HitRecord.Type == HitType.TimeScale) { m_isMoving = false; Matrix worldToView = Owner.Transform; // Setting the position also invalidates the Owner Control. Position = Sce.Atf.GdiUtil.InverseTransform(worldToView, e.MouseEvent.Location.X); } }
private void owner_Picking(object sender, HitEventArgs e) { if (m_visibleManipulator) { Rectangle clipRectangle = Owner.VisibleClientRectangle; if (m_leftHandle.IntersectsWith(clipRectangle) && e.PickRectangle.IntersectsWith(m_leftHandle)) { e.HitRecord = new HitRecord(HitType.Custom, m_leftHitObject); } else if (m_rightHandle.IntersectsWith(clipRectangle) && e.PickRectangle.IntersectsWith(m_rightHandle)) { e.HitRecord = new HitRecord(HitType.Custom, m_rightHitObject); } } }
/// <summary> /// Event handler for the TimelineControl.MouseDownPicked event</summary> /// <param name="sender">The TimelineControl that we are attached to</param> /// <param name="e">HitEventArgs</param> protected virtual void Owner_MouseDownPicked(object sender, HitEventArgs e) { HitRecord hitRecord = e.HitRecord; TimelinePath hitObject = hitRecord.HitPath; if (hitObject != null) { Keys modifiers = Control.ModifierKeys; if (e.MouseEvent.Button == MouseButtons.Left) { if (modifiers == Keys.None && SelectionContext != null && SelectionContext.SelectionContains(hitObject)) { // The hit object is already selected. Wait until the mouse up to see if there was // a drag or not. If no drag, then set the selection set to be this one object. m_mouseDownHitRecord = hitRecord; m_mouseDownPos = e.MouseEvent.Location; } else if (modifiers == Keys.Control) { // Either this object is not already selected or Shift key is being held down. // to be consistent with the Windows interface. m_mouseDownHitRecord = hitRecord; m_mouseDownPos = e.MouseEvent.Location; } else if ((modifiers & Keys.Alt) == 0) { // The 'Alt' key might mean something different. If no Alt key, we can update the // selection immediately. UpdateSelection(hitRecord, modifiers); } } else if (e.MouseEvent.Button == MouseButtons.Right) { if (modifiers == Keys.None && SelectionContext != null && !SelectionContext.SelectionContains(hitObject)) { // The hit object is not already selected and a right-click landed on it. Select it. UpdateSelection(hitRecord, modifiers); } } } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { string toolTipText = null; if (m_active) { e.Handled = true; if (e.HitRecord.Type == HitType.Interval && e.MouseEvent.Button == MouseButtons.None && !m_owner.IsUsingMouse && m_owner.IsEditable(e.HitRecord.HitPath)) { SetCursor(); TimelinePath hitPath = e.HitRecord.HitPath; IInterval hitObject = (IInterval)e.HitRecord.HitTimelineObject; float worldX = GdiUtil.InverseTransform(m_owner.Transform, e.MouseEvent.Location.X); //Make sure the snap-to indicator line is drawn. float delta = m_owner.GetSnapOffset(new[] { worldX }, s_snapOptions); worldX += delta; worldX = m_owner.ConstrainFrameOffset(worldX); Matrix localToWorld = TimelineControl.CalculateLocalToWorld(hitPath); if (worldX <= GdiUtil.Transform(localToWorld, hitObject.Start) || worldX >= GdiUtil.Transform(localToWorld, hitObject.Start + hitObject.Length)) { // Clear the results since a split is impossible. m_owner.GetSnapOffset(new float[] { }, s_snapOptions); } else { toolTipText = worldX.ToString(); } } } if (toolTipText != null) m_toolTip.Show(toolTipText, m_owner, e.MouseEvent.Location); else m_toolTip.Hide(m_owner); }
/// <summary> /// Event handler for the TimelineControl.MouseDownPicked event</summary> /// <param name="sender">The TimelineControl that we are attached to</param> /// <param name="e">HitEventArgs</param> protected virtual void Owner_MouseDownPicked(object sender, HitEventArgs e) { HitRecord hitRecord = e.HitRecord; TimelinePath hitObject = hitRecord.HitPath; if (hitObject != null) { Keys modifiers = Control.ModifierKeys; if (e.MouseEvent.Button == MouseButtons.Left) { if (modifiers == Keys.None && SelectionContext != null && SelectionContext.SelectionContains(hitObject)) { // The hit object is already selected. Wait until the mouse up to see if there was // a drag or not. If no drag, then set the selection set to be this one object. m_mouseDownHitRecord = hitRecord; m_mouseDownPos = e.MouseEvent.Location; } else if (modifiers == Keys.Control) { // Either this object is not already selected or Shift key is being held down. // to be consistent with the Windows interface. m_mouseDownHitRecord = hitRecord; m_mouseDownPos = e.MouseEvent.Location; } else if ((modifiers & Keys.Alt) == 0) { // The 'Alt' key might mean something different. If no Alt key, we can update the // selection immediately. UpdateSelection(hitRecord, modifiers); } } else if (e.MouseEvent.Button == MouseButtons.Right) { if (modifiers == Keys.None && SelectionContext != null && !SelectionContext.SelectionContains(hitObject)) { // The hit object is not already selected and a right-click landed on it. Select it. UpdateSelection(hitRecord, modifiers); } } } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.None && !m_owner.IsUsingMouse) { HitRecord hitRecord = e.HitRecord; if (m_owner.IsEditable(hitRecord.HitPath)) { switch (hitRecord.Type) { case HitType.Interval: case HitType.Key: case HitType.Marker: m_owner.Cursor = Cursors.SizeAll; break; default: break; } } } }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { TimelinePath hitPath = e.HitRecord.HitPath; IInterval hitInterval = e.HitRecord.HitTimelineObject as IInterval; if (m_active && e.MouseEvent.Button == MouseButtons.Left && !m_owner.IsUsingMouse && m_owner.IsEditable(hitPath)) { if (hitInterval != null && e.HitRecord.Type == HitType.Interval) { float worldX = Sce.Atf.GdiUtil.InverseTransform(m_owner.Transform, e.MouseEvent.Location.X); worldX += m_owner.GetSnapOffset(new[] { worldX }, s_snapOptions); Matrix localToWorld = TimelineControl.CalculateLocalToWorld(hitPath); float fraction = (worldX - GdiUtil.Transform(localToWorld, hitInterval.Start)) / GdiUtil.TransformVector(localToWorld, hitInterval.Length); if (m_owner.Selection.SelectionContains(hitInterval)) { SplitSelectedIntervals(fraction); } else { SplitUnselectedInterval(hitInterval, fraction); } } Active = false; e.Handled = true; //don't let subsequent listeners get this event } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.None && e.HitRecord.HitObject == m_handleHitObject) { Owner.Cursor = Cursors.SizeWE; e.Handled = true; } }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.Left && !m_owner.IsUsingMouse) { m_mouseMoveHitRecord = null; HitRecord hitRecord = e.HitRecord; if (m_owner.IsEditable(hitRecord.HitPath)) { switch (e.HitRecord.Type) { case HitType.GroupMove: case HitType.TrackMove: case HitType.Interval: case HitType.Key: case HitType.Marker: m_mouseMoveHitRecord = hitRecord; break; } } m_owner.IsMovingSelection = m_mouseMoveHitRecord != null; //obsolete } }
private void owner_MouseMovePicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.None && !m_owner.IsUsingMouse) { HitRecord hitRecord = e.HitRecord; if (m_owner.IsEditable(hitRecord.HitPath)) { switch (hitRecord.Type) { case HitType.Interval: case HitType.Key: case HitType.Marker: m_owner.Cursor = Cursors.SizeAll; break; default: break; } } } }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { if (e.MouseEvent.Button == MouseButtons.Left && e.HitRecord.HitObject == m_handleHitObject) { m_isMoving = true; Owner.Cursor = Cursors.SizeWE; e.Handled = true; Owner.Invalidate(); } else if (e.HitRecord.Type == HitType.TimeScale) { m_isMoving = false; Matrix worldToView = Owner.Transform; // Setting the position also invalidates the Owner Control. Position = Sce.Atf.GdiUtil.InverseTransform(worldToView, e.MouseEvent.Location.X); } }
private void owner_Picking(object sender, HitEventArgs e) { Rectangle clipRectangle = Owner.VisibleClientRectangle; if (m_handleRect.IntersectsWith(clipRectangle) && e.PickRectangle.IntersectsWith(m_handleRect)) { // sets Handled to true e.HitRecord = new HitRecord(HitType.Custom, m_handleHitObject); } }
private void owner_MouseDownPicked(object sender, HitEventArgs e) { TimelinePath hitPath = e.HitRecord.HitPath; IInterval hitInterval = e.HitRecord.HitTimelineObject as IInterval; if (m_active && e.MouseEvent.Button == MouseButtons.Left && !m_owner.IsUsingMouse && m_owner.IsEditable(hitPath)) { if (hitInterval != null && e.HitRecord.Type == HitType.Interval) { float worldX = Sce.Atf.GdiUtil.InverseTransform(m_owner.Transform, e.MouseEvent.Location.X); worldX += m_owner.GetSnapOffset(new[] { worldX }, s_snapOptions); Matrix localToWorld = TimelineControl.CalculateLocalToWorld(hitPath); float fraction = (worldX - GdiUtil.Transform(localToWorld, hitInterval.Start)) / GdiUtil.TransformVector(localToWorld, hitInterval.Length); if (m_owner.Selection.SelectionContains(hitInterval)) SplitSelectedIntervals(fraction); else SplitUnselectedInterval(hitInterval, fraction); } Active = false; e.Handled = true; //don't let subsequent listeners get this event } }