You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

101 lines
2.7 KiB

// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using UnityEngine;
using System.Collections.Generic;
using System;
namespace AmplifyShaderEditor
{
public sealed class ContextPalette : PaletteParent
{
private Vector3 m_position;
private Vector2 m_startDropPosition;
public ContextPalette( AmplifyShaderEditorWindow parentWindow ) : base( parentWindow, 0, 0, 250, 250, string.Empty, MenuAnchor.NONE, MenuAutoSize.NONE )
{
m_isActive = false;
OnPaletteNodeCreateEvt += OnOptionSelected;
m_searchFilterControl += "CONTEXTPALETTE";
}
public override void OnEnterPressed(int index = 0)
{
if ( m_searchFilter.Length > 0 && m_currentItems.Count > 0 )
{
FireNodeCreateEvent( m_currentItems[ index ].NodeType, m_currentItems[ index ].Name, m_currentItems[ index ].Function );
}
else
{
Disable();
}
}
public override void OnEscapePressed()
{
Disable();
if ( m_parentWindow.WireReferenceUtils.ValidReferences() )
{
m_parentWindow.WireReferenceUtils.InvalidateReferences();
}
}
public override void Draw( Rect parentPosition, Vector2 mousePosition, int mouseButtonId, bool hasKeyboadFocus )
{
//if ( !_isActive )
// return;
if ( Event.current.type == EventType.MouseDown && !IsInside( Event.current.mousePosition ) )
{
Disable();
return;
}
base.Draw( parentPosition, mousePosition, mouseButtonId, hasKeyboadFocus );
}
public void Show( Vector2 position, Rect cameraInfo )
{
m_startDropPosition = position;
m_maximizedArea.x = ( position.x + m_maximizedArea.width ) > cameraInfo.width ? ( cameraInfo.width - 1.1f * m_maximizedArea.width ) : position.x;
m_maximizedArea.y = ( position.y + m_maximizedArea.height ) > cameraInfo.height ? ( cameraInfo.height - 1.1f * m_maximizedArea.height ) : position.y;
m_position = new Vector3( m_maximizedArea.x, m_maximizedArea.y, 0f );
m_isActive = true;
m_focusOnSearch = true;
}
// This override is removing focus from our window ... need to figure out a workaround before re-using it
//public override bool CheckButton( GUIContent content, GUIStyle style, int buttonId )
//{
// if ( buttonId != m_validButtonId )
// return false;
// return GUILayout.Button( content, style );
//}
void OnOptionSelected( System.Type type, string name, AmplifyShaderFunction function )
{
Disable();
}
public void Disable()
{
m_isActive = false;
}
public Vector2 StartDropPosition
{
get { return m_startDropPosition; }
}
public Vector3 CurrentPosition
{
get { return m_position; }
}
public Vector2 CurrentPosition2D
{
get { return new Vector2( m_position.x, m_position.y ); }
}
}
}