public Toolbar() { Padding = new Thickness(4); MinMaxHeight = Metrics.ToolbarHeight; MinWidth = 50; // TimelineMetrics.ToolbarMinWidth; Presenter = new SyncDelegatePresenter <Widget>(Render); Layout = new HBoxLayout { Spacing = 2, DefaultCell = new DefaultLayoutCell(Alignment.Center) }; }
public ColorBoxButton(Color4 color) { Nodes.Clear(); Size = MinMaxSize = new Vector2(12, 12); PostPresenter = new SyncDelegatePresenter <Widget>(widget => { widget.PrepareRendererState(); Renderer.DrawRect(Vector2.Zero, widget.Size, Color4.White); var checkSize = new Vector2(widget.Width / 4, widget.Height / 3); for (int i = 0; i < 3; i++) { var checkPos = new Vector2(widget.Width / 2 + ((i == 1) ? widget.Width / 4 : 0), i * checkSize.Y); Renderer.DrawRect(checkPos, checkPos + checkSize, Color4.Black); } Renderer.DrawRect(Vector2.Zero, widget.Size, color); Renderer.DrawRectOutline(Vector2.Zero, widget.Size, ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox); }); }
public ColorBoxButton(IDataflowProvider <Color4> colorProvider) { Nodes.Clear(); Size = MinMaxSize = new Vector2(25, Theme.Metrics.DefaultButtonSize.Y); var color = colorProvider.GetDataflow(); PostPresenter = new SyncDelegatePresenter <Widget>(widget => { widget.PrepareRendererState(); Renderer.DrawRect(Vector2.Zero, widget.Size, Color4.White); color.Poll(); var checkSize = new Vector2(widget.Width / 4, widget.Height / 3); for (int i = 0; i < 3; i++) { var checkPos = new Vector2(widget.Width / 2 + ((i == 1) ? widget.Width / 4 : 0), i * checkSize.Y); Renderer.DrawRect(checkPos, checkPos + checkSize, Color4.Black); } Renderer.DrawRect(Vector2.Zero, widget.Size, color.Value); Renderer.DrawRectOutline(Vector2.Zero, widget.Size, ColorTheme.Current.Inspector.BorderAroundKeyframeColorbox); }); }
public IEnumerator <object> Task() { var widget = curveEditor.MainAreaWidget; var input = CommonWindow.Current.Input; while (true) { if (widget.IsMouseOver() && input.WasKeyPressed(Key.Mouse0)) { input.ConsumeKey(Key.Mouse0); using (Document.Current.History.BeginTransaction()) { var initialMousePos = curveEditor.ContentWidget.LocalMousePosition(); var currentMousePos = initialMousePos; var rectanglePresenter = new SyncDelegatePresenter <Widget>(w => { w.PrepareRendererState(); Renderer.DrawRectOutline(initialMousePos, currentMousePos, ColorTheme.Current.TimelineCurveEditor.Selection); }); curveEditor.ContentWidget.CompoundPostPresenter.Add(rectanglePresenter); while (input.IsMousePressed()) { currentMousePos = curveEditor.ContentWidget.LocalMousePosition(); var rect = new Rectangle(initialMousePos, currentMousePos); foreach (var c in curveEditor.Curves) { SelectKeysWithinRectangle(c, rect); } Window.Current.Invalidate(); yield return(null); } curveEditor.ContentWidget.CompoundPostPresenter.Remove(rectanglePresenter); Window.Current.Invalidate(); Document.Current.History.CommitTransaction(); } } yield return(null); } }
public Toolbar() { Padding = new Thickness(4); MinMaxHeight = Metrics.ToolbarHeight; MinWidth = 50; Presenter = new SyncDelegatePresenter <Widget>(Render); Layout = new HBoxLayout { Spacing = 2, DefaultCell = new DefaultLayoutCell(Alignment.Center) }; Nodes.AddRange( new Widget { Layout = new VBoxLayout(), Nodes = { (Content = new Widget { Layout = new HBoxLayout { Spacing = 2 } }) } } ); }
public IEnumerator <object> Task() { var sceneView = SceneView.Instance; var input = sceneView.Input; while (true) { if (input.WasMousePressed() && !input.IsKeyPressed(Key.Shift)) { var rect = new Rectangle(sceneView.MousePosition, sceneView.MousePosition); var presenter = new SyncDelegatePresenter <Widget>(w => { w.PrepareRendererState(); var t = sceneView.Scene.CalcTransitionToSpaceOf(sceneView.Frame); Renderer.DrawRectOutline(rect.A * t, rect.B * t, ColorTheme.Current.SceneView.MouseSelection); }); sceneView.Frame.CompoundPostPresenter.Add(presenter); using (Document.Current.History.BeginTransaction()) { var clicked = true; var selectedNodes = Document.Current.SelectedNodes().Editable().ToList(); while (input.IsMousePressed()) { rect.B = sceneView.MousePosition; clicked &= (rect.B - rect.A).Length <= 5; if (!clicked) { RefreshSelectedNodes(rect, selectedNodes); } CommonWindow.Current.Invalidate(); yield return(null); } // Evgenii Polikutin: this covers for the edge case, when no nodes // were selected on click, therefore Inspector.Rebuild() wasn't called. Document.Current.InspectRootNode = false; if (clicked) { var controlPressed = SceneView.Instance.Input.IsKeyPressed(Key.Control); if (!controlPressed) { Core.Operations.ClearRowSelection.Perform(); } Node selectedNode = null; foreach (var widget in WidgetsPivotMarkPresenter.WidgetsWithDisplayedPivot()) { var pos = widget.GlobalPivotPosition; if (widget.GloballyVisible && SceneView.Instance.HitTestControlPoint(pos)) { selectedNode = widget; break; } } if (selectedNode == null) { foreach (var node in Document.Current.Container.Nodes.Editable()) { if (Probe(node, rect.A)) { selectedNode = node; break; } } } if (selectedNode != null) { Core.Operations.SelectNode.Perform(selectedNode, !controlPressed || !Document.Current.SelectedNodes().Contains(selectedNode)); } } sceneView.Frame.CompoundPostPresenter.Remove(presenter); CommonWindow.Current.Invalidate(); input.ConsumeKey(Key.Mouse0); Document.Current.History.CommitTransaction(); } } yield return(null); } }
private IEnumerator <object> DragTask(Widget panelContainer, WidgetInput input, int rowIndex, int panelIndex) { var rootWidget = widget.GetRoot().AsWidget; var newRowIndex = rowIndex; var newPanelIndex = panelIndex; var presenter = new SyncDelegatePresenter <Widget>(w => { w.PrepareRendererState(); if (panelContainer == null) { return; } var aabb = panelContainer.CalcAABBInSpaceOf(rootWidget); Renderer.DrawRect(aabb.A, aabb.B, ColorTheme.Current.Toolbar.PanelPlacementHighlightBackground); Renderer.DrawRectOutline(aabb.A, aabb.B, ColorTheme.Current.Toolbar.PanelPlacementHighlightBorder); }); while (true) { if (!input.WasMousePressed() || Core.Project.Current == Core.Project.Null) { yield return(null); continue; } rootWidget.CompoundPostPresenter.Add(presenter); while (input.IsMousePressed()) { Vector2 pos; Utils.ChangeCursorIfDefault(MouseCursor.Hand); for (var i = 0; i < widget.Nodes.Count; ++i) { var rowWidget = (Widget)widget.Nodes[i]; if (!IsMouseOver(rowWidget, out pos)) { continue; } for (var j = 0; j < rowWidget.Nodes.Count; ++j) { var panelWidget = (Widget)rowWidget.Nodes[j]; if (!IsMouseOver(panelWidget, out pos)) { continue; } if ((newRowIndex != i || newPanelIndex != j) && (rowIndex != i || j != rowWidget.Nodes.Count - 1)) { panelContainer = panelWidget; newRowIndex = i; newPanelIndex = j; } goto Next; } } panelContainer = null; if (!IsMouseOver(widget, out pos)) { newPanelIndex = 0; if (pos.Y < 0) { newRowIndex = -1; } if (pos.Y > widget.Height) { newRowIndex = toolbarModel.Rows.Count; } } Next: yield return(null); } rootWidget.CompoundPostPresenter.Remove(presenter); if (newRowIndex == rowIndex && newPanelIndex == panelIndex) { continue; } ToolbarModel.ToolbarRow row; if (newRowIndex < 0 || newRowIndex == toolbarModel.Rows.Count) { row = new ToolbarModel.ToolbarRow(); toolbarModel.InsertRow(row, newRowIndex < 0 ? 0 : newRowIndex); if (newRowIndex < 0) { ++rowIndex; } } else { row = toolbarModel.Rows[newRowIndex]; } var oldRow = toolbarModel.Rows[rowIndex]; var panel = oldRow.Panels[panelIndex]; if (newRowIndex != rowIndex) { toolbarModel.RemovePanel(panel); toolbarModel.InsertPanel(row, panel, newPanelIndex); } else { toolbarModel.SwapPanels(row.Panels[newPanelIndex], panel); } if (oldRow.Panels.Count == 0) { toolbarModel.RemoveRow(oldRow); } toolbarModel.RefreshAfterLoad(); Rebuild(); yield break; } }
public IEnumerator <object> Task() { ICommand command = new Command(); Type nodeTypeActive = null; while (true) { if (sv.Input.WasKeyPressed(Key.Escape) || sv.Input.WasMousePressed(1)) { nodeTypeActive = null; } Type nodeTypeIncome; ICommand newCommand; if (CreateNodeRequestComponent.Consume <Widget>(sv.Components, out nodeTypeIncome, out newCommand)) { nodeTypeActive = nodeTypeIncome; command.Checked = false; command = newCommand; command.Checked = true; } if (nodeTypeActive == null) { command.Checked = false; yield return(null); continue; } if (sv.InputArea.IsMouseOver()) { Utils.ChangeCursorIfDefault(MouseCursor.Hand); } var container = Document.Current.Container as Widget; CreateNodeRequestComponent.Consume <Node>(sv.Components); if (sv.Input.WasMousePressed() && container != null) { sv.Input.ConsumeKey(Key.Mouse0); var t = sv.Scene.CalcTransitionToSpaceOf(container); var rect = new Rectangle(sv.MousePosition * t, sv.MousePosition * t); var presenter = new SyncDelegatePresenter <Widget>(w => { w.PrepareRendererState(); var t2 = container.CalcTransitionToSpaceOf(sv.Frame); DrawRectOutline(rect.A, (rect.A + rect.B) / 2, t2); DrawRectOutline(rect.A, rect.B, t2); }); sv.Frame.CompoundPostPresenter.Add(presenter); using (Document.Current.History.BeginTransaction()) { while (sv.Input.IsMousePressed()) { rect.B = sv.MousePosition * t; CommonWindow.Current.Invalidate(); yield return(null); } sv.Frame.CompoundPostPresenter.Remove(presenter); try { var widget = (Widget)Core.Operations.CreateNode.Perform(nodeTypeActive); Core.Operations.SetProperty.Perform(widget, nameof(Widget.Size), rect.B - rect.A); Core.Operations.SetProperty.Perform(widget, nameof(Widget.Position), rect.A + widget.Size / 2); Core.Operations.SetProperty.Perform(widget, nameof(Widget.Pivot), Vector2.Half); } catch (InvalidOperationException e) { AlertDialog.Show(e.Message); } Document.Current.History.CommitTransaction(); } nodeTypeActive = null; Utils.ChangeCursorIfDefault(MouseCursor.Default); } yield return(null); } }