internal BlackboardCategoryController(CategoryData categoryData, BlackboardCategoryViewModel categoryViewModel, GraphDataStore dataStore) : base(categoryData, categoryViewModel, dataStore) { m_BlackboardCategoryView = new SGBlackboardCategory(categoryViewModel, this); blackboard = categoryViewModel.parentView as SGBlackboard; if (blackboard == null) { return; } blackboard.Add(m_BlackboardCategoryView); // These make sure that the drag indicators are disabled whenever a drag action is cancelled without completing a drop blackboard.RegisterCallback <MouseUpEvent>(evt => { m_BlackboardCategoryView.OnDragActionCanceled(); }); blackboard.hideDragIndicatorAction += m_BlackboardCategoryView.OnDragActionCanceled; foreach (var categoryItem in categoryData.Children) { if (categoryItem == null) { AssertHelpers.Fail("Failed to insert blackboard row into category due to shader input being null."); continue; } InsertBlackboardRow(categoryItem); } }
internal BlackboardSectionController(GraphData graphData, BlackboardSectionViewModel sectionViewModel, GraphDataStore dataStore) : base(graphData, sectionViewModel, dataStore) { m_BlackboardSectionView = new SGBlackboardSection(sectionViewModel); blackboard = sectionViewModel.parentView as SGBlackboard; if (blackboard == null) { return; } blackboard.Add(m_BlackboardSectionView); // These make sure that the drag indicators are disabled whenever a drag action is cancelled without completing a drop blackboard.RegisterCallback <MouseUpEvent>(evt => { m_BlackboardSectionView.OnDragActionCanceled(); }); blackboard.hideDragIndicatorAction += m_BlackboardSectionView.OnDragActionCanceled; // Go through categories in Data Store foreach (var categoryData in graphData.categories) { // If category can be found with matching guid for this section // And that category contains this input if (categoryData.categoryGuid == ViewModel.associatedCategoryGuid) { m_CategoryDataReference = categoryData; break; } } foreach (var shaderInput in graphData.properties) { if (IsInputInSection(shaderInput)) { InsertBlackboardRow(shaderInput); } } foreach (var shaderInput in graphData.keywords) { if (IsInputInSection(shaderInput)) { InsertBlackboardRow(shaderInput); } } foreach (var shaderInput in graphData.dropdowns) { if (IsInputInSection(shaderInput)) { InsertBlackboardRow(shaderInput); } } }
// [UnityTest] // public IEnumerator SubWindowLocationRememberedAfterCloseAndReopen() // { // yield return TestBlackboardLocation(new Rect(50.0f, 50.0f, 160.0f, 160.0f)); // yield return TestBlackboardLocation(new Rect(80050.0f, 50.0f, 220.0f, 240.0f)); // yield return TestBlackboardLocation(new Rect(50.0f, 90050.0f, 220.0f, 240.0f)); // yield return TestBlackboardLocation(new Rect(80050.0f, 90050.0f, 220.0f, 240.0f)); // yield return TestBlackboardLocation(new Rect(50.0f, -50.0f, 230.0f, 230.0f)); // } // Test does not pass when run in batchmode on yamato, needs more investigation to re-enable // Only works for Blackboard... for now. (Plan is to make Internal Inspector, Blackboard 2.0, and MasterPreview use the same SubWindow class someday) private IEnumerator TestBlackboardLocation(Rect blackboardRect) { ToggleSubWindows(true, true, true); SGBlackboard blackboard = m_GraphEditorView.blackboardController.blackboard; MasterPreviewView masterPreviewView = m_GraphEditorView.Q <MasterPreviewView>(); blackboard.SetPosition(blackboardRect); yield return(null); CloseGraphWindow(); yield return(null); OpenGraphWindow(); yield return(null); blackboard = m_GraphEditorView.blackboardController.blackboard; // Keep inside the GraphEditor in the same way as expected Rect editorViewContainer = m_GraphEditorView.graphView.contentContainer.layout; Rect blackboardRectBefore = blackboardRect; if (blackboardRect.x + blackboardRect.width > editorViewContainer.width) { blackboardRect.x = editorViewContainer.width - blackboardRect.width; } if (blackboardRect.y + blackboardRect.height > editorViewContainer.height) { blackboardRect.y = editorViewContainer.height - blackboardRect.height; } if (blackboardRect.x < 0) { blackboardRect.x = 0; } if (blackboardRect.y < 0) { blackboardRect.y = 0; } // Using approximately instead of exact comparisons, which is why we don't use (blackboard.layout == blackboardRect) Assert.That(Mathf.Approximately(blackboard.layout.x, blackboardRect.x), "Blackboard did not remember location, x differs: " + "m_GraphEditorView.layout=" + m_GraphEditorView.layout + " blackboard.layout=" + blackboard.layout + " blackboardRect=" + blackboardRect + " blackboardRectPreModification=" + blackboardRectBefore); Assert.That(Mathf.Approximately(blackboard.layout.y, blackboardRect.y), "Blackboard did not remember location, y differs: " + "m_GraphEditorView.layout=" + m_GraphEditorView.layout + " blackboard.layout=" + blackboard.layout + " blackboardRect=" + blackboardRect + " blackboardRectPreModification=" + blackboardRectBefore); Assert.That(Mathf.Approximately(blackboard.layout.width, blackboardRect.width), "Blackboard did not remember width: " + "m_GraphEditorView.layout=" + m_GraphEditorView.layout + " blackboard.layout=" + blackboard.layout + " blackboardRect=" + blackboardRect + " blackboardRectPreModification=" + blackboardRectBefore); Assert.That(Mathf.Approximately(blackboard.layout.height, blackboardRect.height), "Blackboard did not remember height: " + "m_GraphEditorView.layout=" + m_GraphEditorView.layout + " blackboard.layout=" + blackboard.layout + " blackboardRect=" + blackboardRect + " blackboardRectPreModification=" + blackboardRectBefore); }