Esempio n. 1
0
        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.
        }
Esempio n. 2
0
        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
            }
        }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
 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;
     }
 }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
 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);
     }
 }
Esempio n. 8
0
        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);
                }
            }
        }
Esempio n. 9
0
        /// <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);
                    }
                }
            }
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        /// <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);
                    }
                }
            }
        }
Esempio n. 12
0
        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;
                    }
                }
            }
        }
Esempio n. 13
0
        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
            }
        }
Esempio n. 14
0
 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;
     }
 }
Esempio n. 15
0
        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
            }
        }
Esempio n. 16
0
        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;
                    }
                }
            }
        }
Esempio n. 17
0
 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);
     }
 }
Esempio n. 18
0
        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);
            }
        }
Esempio n. 19
0
        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
            }
        }