Example #1
0
        private void SetHoveredItem(ObsSceneItem item)
        {
            if (hoveredItem != null)
            {
                hoveredItem.Dispose();
            }

            hoveredItem = item;
        }
Example #2
0
        private bool DrawHoveredItem(ObsScene scene, ObsSceneItem item, IntPtr data)
        {
            GS.LoadVertexBuffer(boxPrimitive);
            libobs.matrix4 boxTransform = item.BoxTransform;

            DrawOutline(boxTransform, item.Width, item.Height, 3.0f);

            return(true);
        }
Example #3
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);

            Vector2 mousePosition = GetPositionInScene(new Vector2(e.Location));

            if (e.Button == MouseButtons.Left)
            {
                // unselect all items
                foreach (ObsSceneItem item in scene.Items)
                {
                    item.Selected = false;
                }

                // select item under the mouse cursor
                using (ObsSceneItem mouseItem = GetItemAtPosition(mousePosition))
                {
                    if (mouseItem != null && !dragging)
                    {
                        Vector2 pixel          = new Vector2(1.0f / mouseItem.Bounds.x, 1.0f / mouseItem.Bounds.y);
                        Vector3 transformedPos = Vector3.GetTransform(
                            new Vector3(mousePosition), mouseItem.BoxTransform.GetInverse());

                        Obs.Log(LogErrorLevel.Info, pixel.ToString());
                        //TODO: test dragging near edges

                        dragging           = true;
                        dragLastPosition   = mousePosition;
                        mouseItem.Selected = true;

                        if (mouseItem == hoveredItem)
                        {
                            SetHoveredItem(null);
                        }
                    }
                }
            }
        }
Example #4
0
        protected void OnMouseLeftDown(MouseEventArgs e)
        {
            Vector2 mousePosition = GetPositionInScene(new Vector2(e.Location));

            // unselect all items
            foreach (ObsSceneItem item in scene.Items)
            {
                item.Selected = false;
            }

            const float edgeSize = 0.01f;

            // select item under the mouse cursor
            using (ObsSceneItem mouseItem = GetItemAtPosition(mousePosition, edgeSize))
            {
                if (mouseItem == null || dragging)
                {
                    return;
                }

                mouseItem.Selected = true;

                Vector3 transformedPos = Vector3.GetTransform(
                    new Vector3(mousePosition), mouseItem.BoxTransform.GetInverse());

                bool edgeTop    = transformedPos.y <= edgeSize;
                bool edgeBottom = transformedPos.y >= 1.0f - edgeSize;
                bool edgeLeft   = transformedPos.x <= edgeSize;
                bool edgeRight  = transformedPos.x >= 1.0f - edgeSize;
                bool center     = !edgeTop && !edgeBottom && !edgeLeft && !edgeRight;

                if (center)
                {
                    resizeEdge     = ResizeEdge.None;
                    Cursor.Current = Cursors.Hand;

                    dragging          = true;
                    dragLastPosition  = mousePosition;
                    dragStartPosition = mousePosition;
                }
                else
                {
                    dragLastPosition  = mousePosition;
                    dragStartPosition = mousePosition;
                    itemLastPosition  = mouseItem.Position;
                    itemLastBounds    = mouseItem.Bounds;
                    resizeEdge        = ResizeEdge.None;

                    if (edgeTop)
                    {
                        Cursor.Current = Cursors.SizeNS;
                        resizeEdge    |= ResizeEdge.Top;
                    }
                    else if (edgeBottom)
                    {
                        Cursor.Current = Cursors.SizeNS;
                        resizeEdge    |= ResizeEdge.Bottom;
                    }

                    if (edgeLeft)
                    {
                        Cursor.Current = Cursors.SizeWE;
                        resizeEdge    |= ResizeEdge.Left;
                    }
                    else if (edgeRight)
                    {
                        Cursor.Current = Cursors.SizeWE;
                        resizeEdge    |= ResizeEdge.Right;
                    }
                }

                if (mouseItem == hoveredItem)
                {
                    SetHoveredItem(null);
                }
            }
        }
Example #5
0
        public TestTransform(ObsSceneItem item)
        {
            InitializeComponent();

            // Store scene item
            _selectedItem = item;

            // Set minmax on numerics
            // the rendercontext minmax are bigger than the decimal one so this is fine
            const decimal min = decimal.MinValue;
            const decimal max = decimal.MaxValue;

            xNumeric.Minimum = min;
            xNumeric.Maximum = max;

            yNumeric.Minimum = min;
            yNumeric.Maximum = max;

            wNumeric.Minimum = min;
            wNumeric.Maximum = max;

            hNumeric.Minimum = min;
            hNumeric.Maximum = max;

            // Populate Controls

            // Position
            _oldPos        = _selectedItem.Position;
            xNumeric.Value = (decimal)_oldPos.x;
            yNumeric.Value = (decimal)_oldPos.y;

            // Scale
            _oldScale      = _selectedItem.Scale;
            wNumeric.Value = (decimal)_oldScale.x;
            hNumeric.Value = (decimal)_oldScale.y;

            // Rotation
            _oldRot           = _selectedItem.Rotation;
            Rotation.Rotation = (int)Math.Round(_oldRot);

            // Alignment
            _oldAlignment       = _selectedItem.Alignment;
            Alignment.Alignment = _oldAlignment;

            // Delegates to change transform properties
            xNumeric.ValueChanged += (sender, args) => _selectedItem.Position = ItemPosition;
            yNumeric.ValueChanged += (sender, args) => _selectedItem.Position = ItemPosition;

            wNumeric.ValueChanged += (sender, args) => _selectedItem.Scale = ItemScale;
            hNumeric.ValueChanged += (sender, args) => _selectedItem.Scale = ItemScale;

            // These even handlers return the exact value we need
            // Do this in the future for all custom even handlers
            // Makes creating inline event handlers a breeze!
            Rotation.RotationChanged += rotation => _selectedItem.Rotation = rotation;

            Alignment.AlignmentChanged += alignment => _selectedItem.Alignment = alignment;

            // Close form methods

            okButton.Click     += (sender, args) => Close();
            cancelButton.Click += (sender, args) =>
            {
                _selectedItem.Position  = _oldPos;
                _selectedItem.Scale     = _oldScale;
                _selectedItem.Rotation  = _oldRot;
                _selectedItem.Alignment = _oldAlignment;

                Close();
            };
        }