private void SetHoveredItem(ObsSceneItem item) { if (hoveredItem != null) { hoveredItem.Dispose(); } hoveredItem = item; }
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); }
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); } } } } }
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); } } }
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(); }; }