diff options
author | rtk0c <[email protected]> | 2022-06-27 18:27:13 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-06-27 18:27:13 -0700 |
commit | 8f0dda5eab181b0f14f2652b4e984aaaae3f258c (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /3rdparty/imgui-node-editor/imgui_node_editor.h | |
parent | fad6a88a13ab1f888ab25ad0aae19c1d63aa0623 (diff) |
Start from a clean slate
Diffstat (limited to '3rdparty/imgui-node-editor/imgui_node_editor.h')
-rw-r--r-- | 3rdparty/imgui-node-editor/imgui_node_editor.h | 481 |
1 files changed, 0 insertions, 481 deletions
diff --git a/3rdparty/imgui-node-editor/imgui_node_editor.h b/3rdparty/imgui-node-editor/imgui_node_editor.h deleted file mode 100644 index e9bce90..0000000 --- a/3rdparty/imgui-node-editor/imgui_node_editor.h +++ /dev/null @@ -1,481 +0,0 @@ -//------------------------------------------------------------------------------ -// VERSION 0.9.1 -// -// LICENSE -// This software is dual-licensed to the public domain and under the following -// license: you are granted a perpetual, irrevocable license to copy, modify, -// publish, and distribute this file as you see fit. -// -// CREDITS -// Written by Michal Cichon -//------------------------------------------------------------------------------ -# ifndef __IMGUI_NODE_EDITOR_H__ -# define __IMGUI_NODE_EDITOR_H__ -# pragma once - - -//------------------------------------------------------------------------------ -# include <imgui.h> -# include <cstdint> // std::uintXX_t -# include <utility> // std::move - - -//------------------------------------------------------------------------------ -namespace ax { -namespace NodeEditor { - - -//------------------------------------------------------------------------------ -struct NodeId; -struct LinkId; -struct PinId; - - -//------------------------------------------------------------------------------ -enum class SaveReasonFlags: uint32_t -{ - None = 0x00000000, - Navigation = 0x00000001, - Position = 0x00000002, - Size = 0x00000004, - Selection = 0x00000008, - AddNode = 0x00000010, - RemoveNode = 0x00000020, - User = 0x00000040 -}; - -inline SaveReasonFlags operator |(SaveReasonFlags lhs, SaveReasonFlags rhs) { return static_cast<SaveReasonFlags>(static_cast<uint32_t>(lhs) | static_cast<uint32_t>(rhs)); } -inline SaveReasonFlags operator &(SaveReasonFlags lhs, SaveReasonFlags rhs) { return static_cast<SaveReasonFlags>(static_cast<uint32_t>(lhs) & static_cast<uint32_t>(rhs)); } - -using ConfigSaveSettings = bool (*)(const char* data, size_t size, SaveReasonFlags reason, void* userPointer); -using ConfigLoadSettings = size_t (*)(char* data, void* userPointer); - -using ConfigSaveNodeSettings = bool (*)(NodeId nodeId, const char* data, size_t size, SaveReasonFlags reason, void* userPointer); -using ConfigLoadNodeSettings = size_t (*)(NodeId nodeId, char* data, void* userPointer); - -using ConfigSession = void (*)(void* userPointer); - -struct Config -{ - const char* SettingsFile; - ConfigSession BeginSaveSession; - ConfigSession EndSaveSession; - ConfigSaveSettings SaveSettings; - ConfigLoadSettings LoadSettings; - ConfigSaveNodeSettings SaveNodeSettings; - ConfigLoadNodeSettings LoadNodeSettings; - void* UserPointer; - int DragButtonIndex; // Mouse button index drag action will react to (0-left, 1-right, 2-middle) - int SelectButtonIndex; // Mouse button index select action will react to (0-left, 1-right, 2-middle) - int NavigateButtonIndex; // Mouse button index navigate action will react to (0-left, 1-right, 2-middle) - int ContextMenuButtonIndex; // Mouse button index context menu action will react to (0-left, 1-right, 2-middle) - - Config() - : SettingsFile("NodeEditor.json") - , BeginSaveSession(nullptr) - , EndSaveSession(nullptr) - , SaveSettings(nullptr) - , LoadSettings(nullptr) - , SaveNodeSettings(nullptr) - , LoadNodeSettings(nullptr) - , UserPointer(nullptr) - , DragButtonIndex(0) - , SelectButtonIndex(0) - , NavigateButtonIndex(1) - , ContextMenuButtonIndex(1) - { - } -}; - - -//------------------------------------------------------------------------------ -enum class PinKind -{ - Input, - Output -}; - -enum class FlowDirection -{ - Forward, - Backward -}; - - -//------------------------------------------------------------------------------ -enum StyleColor -{ - StyleColor_Bg, - StyleColor_Grid, - StyleColor_NodeBg, - StyleColor_NodeBorder, - StyleColor_HovNodeBorder, - StyleColor_SelNodeBorder, - StyleColor_NodeSelRect, - StyleColor_NodeSelRectBorder, - StyleColor_HovLinkBorder, - StyleColor_SelLinkBorder, - StyleColor_LinkSelRect, - StyleColor_LinkSelRectBorder, - StyleColor_PinRect, - StyleColor_PinRectBorder, - StyleColor_Flow, - StyleColor_FlowMarker, - StyleColor_GroupBg, - StyleColor_GroupBorder, - - StyleColor_Count -}; - -enum StyleVar -{ - StyleVar_NodePadding, - StyleVar_NodeRounding, - StyleVar_NodeBorderWidth, - StyleVar_HoveredNodeBorderWidth, - StyleVar_SelectedNodeBorderWidth, - StyleVar_PinRounding, - StyleVar_PinBorderWidth, - StyleVar_LinkStrength, - StyleVar_SourceDirection, - StyleVar_TargetDirection, - StyleVar_ScrollDuration, - StyleVar_FlowMarkerDistance, - StyleVar_FlowSpeed, - StyleVar_FlowDuration, - StyleVar_PivotAlignment, - StyleVar_PivotSize, - StyleVar_PivotScale, - StyleVar_PinCorners, - StyleVar_PinRadius, - StyleVar_PinArrowSize, - StyleVar_PinArrowWidth, - StyleVar_GroupRounding, - StyleVar_GroupBorderWidth, - - StyleVar_Count -}; - -struct Style -{ - ImVec4 NodePadding; - float NodeRounding; - float NodeBorderWidth; - float HoveredNodeBorderWidth; - float SelectedNodeBorderWidth; - float PinRounding; - float PinBorderWidth; - float LinkStrength; - ImVec2 SourceDirection; - ImVec2 TargetDirection; - float ScrollDuration; - float FlowMarkerDistance; - float FlowSpeed; - float FlowDuration; - ImVec2 PivotAlignment; - ImVec2 PivotSize; - ImVec2 PivotScale; - float PinCorners; - float PinRadius; - float PinArrowSize; - float PinArrowWidth; - float GroupRounding; - float GroupBorderWidth; - ImVec4 Colors[StyleColor_Count]; - - Style() - { - NodePadding = ImVec4(8, 8, 8, 8); - NodeRounding = 12.0f; - NodeBorderWidth = 1.5f; - HoveredNodeBorderWidth = 3.5f; - SelectedNodeBorderWidth = 3.5f; - PinRounding = 4.0f; - PinBorderWidth = 0.0f; - LinkStrength = 100.0f; - SourceDirection = ImVec2(1.0f, 0.0f); - TargetDirection = ImVec2(-1.0f, 0.0f); - ScrollDuration = 0.35f; - FlowMarkerDistance = 30.0f; - FlowSpeed = 150.0f; - FlowDuration = 2.0f; - PivotAlignment = ImVec2(0.5f, 0.5f); - PivotSize = ImVec2(0.0f, 0.0f); - PivotScale = ImVec2(1, 1); -#if IMGUI_VERSION_NUM > 18101 - PinCorners = ImDrawFlags_RoundCornersAll; -#else - PinCorners = ImDrawCornerFlags_All; -#endif - PinRadius = 0.0f; - PinArrowSize = 0.0f; - PinArrowWidth = 0.0f; - GroupRounding = 6.0f; - GroupBorderWidth = 1.0f; - - Colors[StyleColor_Bg] = ImColor( 60, 60, 70, 200); - Colors[StyleColor_Grid] = ImColor(120, 120, 120, 40); - Colors[StyleColor_NodeBg] = ImColor( 32, 32, 32, 200); - Colors[StyleColor_NodeBorder] = ImColor(255, 255, 255, 96); - Colors[StyleColor_HovNodeBorder] = ImColor( 50, 176, 255, 255); - Colors[StyleColor_SelNodeBorder] = ImColor(255, 176, 50, 255); - Colors[StyleColor_NodeSelRect] = ImColor( 5, 130, 255, 64); - Colors[StyleColor_NodeSelRectBorder] = ImColor( 5, 130, 255, 128); - Colors[StyleColor_HovLinkBorder] = ImColor( 50, 176, 255, 255); - Colors[StyleColor_SelLinkBorder] = ImColor(255, 176, 50, 255); - Colors[StyleColor_LinkSelRect] = ImColor( 5, 130, 255, 64); - Colors[StyleColor_LinkSelRectBorder] = ImColor( 5, 130, 255, 128); - Colors[StyleColor_PinRect] = ImColor( 60, 180, 255, 100); - Colors[StyleColor_PinRectBorder] = ImColor( 60, 180, 255, 128); - Colors[StyleColor_Flow] = ImColor(255, 128, 64, 255); - Colors[StyleColor_FlowMarker] = ImColor(255, 128, 64, 255); - Colors[StyleColor_GroupBg] = ImColor( 0, 0, 0, 160); - Colors[StyleColor_GroupBorder] = ImColor(255, 255, 255, 32); - } -}; - - -//------------------------------------------------------------------------------ -struct EditorContext; - - -//------------------------------------------------------------------------------ -void SetCurrentEditor(EditorContext* ctx); -EditorContext* GetCurrentEditor(); -EditorContext* CreateEditor(const Config* config = nullptr); -void DestroyEditor(EditorContext* ctx); - -Style& GetStyle(); -const char* GetStyleColorName(StyleColor colorIndex); - -void PushStyleColor(StyleColor colorIndex, const ImVec4& color); -void PopStyleColor(int count = 1); - -void PushStyleVar(StyleVar varIndex, float value); -void PushStyleVar(StyleVar varIndex, const ImVec2& value); -void PushStyleVar(StyleVar varIndex, const ImVec4& value); -void PopStyleVar(int count = 1); - -void Begin(const char* id, const ImVec2& size = ImVec2(0, 0)); -void End(); - -void BeginNode(NodeId id); -void BeginPin(PinId id, PinKind kind); -void PinRect(const ImVec2& a, const ImVec2& b); -void PinPivotRect(const ImVec2& a, const ImVec2& b); -void PinPivotSize(const ImVec2& size); -void PinPivotScale(const ImVec2& scale); -void PinPivotAlignment(const ImVec2& alignment); -void EndPin(); -void Group(const ImVec2& size); -void EndNode(); - -bool BeginGroupHint(NodeId nodeId); -ImVec2 GetGroupMin(); -ImVec2 GetGroupMax(); -ImDrawList* GetHintForegroundDrawList(); -ImDrawList* GetHintBackgroundDrawList(); -void EndGroupHint(); - -// TODO: Add a way to manage node background channels -ImDrawList* GetNodeBackgroundDrawList(NodeId nodeId); - -bool Link(LinkId id, PinId startPinId, PinId endPinId, const ImVec4& color = ImVec4(1, 1, 1, 1), float thickness = 1.0f); - -void Flow(LinkId linkId, FlowDirection direction = FlowDirection::Forward); - -bool BeginCreate(const ImVec4& color = ImVec4(1, 1, 1, 1), float thickness = 1.0f); -bool QueryNewLink(PinId* startId, PinId* endId); -bool QueryNewLink(PinId* startId, PinId* endId, const ImVec4& color, float thickness = 1.0f); -bool QueryNewNode(PinId* pinId); -bool QueryNewNode(PinId* pinId, const ImVec4& color, float thickness = 1.0f); -bool AcceptNewItem(); -bool AcceptNewItem(const ImVec4& color, float thickness = 1.0f); -void RejectNewItem(); -void RejectNewItem(const ImVec4& color, float thickness = 1.0f); -void EndCreate(); - -bool BeginDelete(); -bool QueryDeletedLink(LinkId* linkId, PinId* startId = nullptr, PinId* endId = nullptr); -bool QueryDeletedNode(NodeId* nodeId); -bool AcceptDeletedItem(bool deleteDependencies = true); -void RejectDeletedItem(); -void EndDelete(); - -void SetNodePosition(NodeId nodeId, const ImVec2& editorPosition); -void SetGroupSize(NodeId nodeId, const ImVec2& size); -ImVec2 GetNodePosition(NodeId nodeId); -ImVec2 GetNodeSize(NodeId nodeId); -void CenterNodeOnScreen(NodeId nodeId); -void SetNodeZPosition(NodeId nodeId, float z); // Sets node z position, nodes with higher value are drawn over nodes with lower value -float GetNodeZPosition(NodeId nodeId); // Returns node z position, defaults is 0.0f - -void RestoreNodeState(NodeId nodeId); - -void Suspend(); -void Resume(); -bool IsSuspended(); - -bool IsActive(); - -bool HasSelectionChanged(); -int GetSelectedObjectCount(); -int GetSelectedNodes(NodeId* nodes, int size); -int GetSelectedLinks(LinkId* links, int size); -bool IsNodeSelected(NodeId nodeId); -bool IsLinkSelected(LinkId linkId); -void ClearSelection(); -void SelectNode(NodeId nodeId, bool append = false); -void SelectLink(LinkId linkId, bool append = false); -void DeselectNode(NodeId nodeId); -void DeselectLink(LinkId linkId); - -bool DeleteNode(NodeId nodeId); -bool DeleteLink(LinkId linkId); - -bool HasAnyLinks(NodeId nodeId); // Returns true if node has any link connected -bool HasAnyLinks(PinId pinId); // Return true if pin has any link connected -int BreakLinks(NodeId nodeId); // Break all links connected to this node -int BreakLinks(PinId pinId); // Break all links connected to this pin - -void NavigateToContent(float duration = -1); -void NavigateToSelection(bool zoomIn = false, float duration = -1); - -bool ShowNodeContextMenu(NodeId* nodeId); -bool ShowPinContextMenu(PinId* pinId); -bool ShowLinkContextMenu(LinkId* linkId); -bool ShowBackgroundContextMenu(); - -void EnableShortcuts(bool enable); -bool AreShortcutsEnabled(); - -bool BeginShortcut(); -bool AcceptCut(); -bool AcceptCopy(); -bool AcceptPaste(); -bool AcceptDuplicate(); -bool AcceptCreateNode(); -int GetActionContextSize(); -int GetActionContextNodes(NodeId* nodes, int size); -int GetActionContextLinks(LinkId* links, int size); -void EndShortcut(); - -float GetCurrentZoom(); - -NodeId GetHoveredNode(); -PinId GetHoveredPin(); -LinkId GetHoveredLink(); -NodeId GetDoubleClickedNode(); -PinId GetDoubleClickedPin(); -LinkId GetDoubleClickedLink(); -bool IsBackgroundClicked(); -bool IsBackgroundDoubleClicked(); - -bool GetLinkPins(LinkId linkId, PinId* startPinId, PinId* endPinId); // pass nullptr if particular pin do not interest you - -bool PinHadAnyLinks(PinId pinId); - -ImVec2 GetScreenSize(); -ImVec2 ScreenToCanvas(const ImVec2& pos); -ImVec2 CanvasToScreen(const ImVec2& pos); - -int GetNodeCount(); // Returns number of submitted nodes since Begin() call -int GetOrderedNodeIds(NodeId* nodes, int size); // Fills an array with node id's in order they're drawn; up to 'size` elements are set. Returns actual size of filled id's. - - - - - - - -//------------------------------------------------------------------------------ -namespace Details { - -template <typename T, typename Tag> -struct SafeType -{ - SafeType(T t) - : m_Value(std::move(t)) - { - } - - SafeType(const SafeType&) = default; - - template <typename T2, typename Tag2> - SafeType( - const SafeType - < - typename std::enable_if<!std::is_same<T, T2>::value, T2>::type, - typename std::enable_if<!std::is_same<Tag, Tag2>::value, Tag2>::type - >&) = delete; - - SafeType& operator=(const SafeType&) = default; - - explicit operator T() const { return Get(); } - - T Get() const { return m_Value; } - -private: - T m_Value; -}; - - -template <typename Tag> -struct SafePointerType - : SafeType<uintptr_t, Tag> -{ - static const Tag Invalid; - - using SafeType<uintptr_t, Tag>::SafeType; - - SafePointerType() - : SafePointerType(Invalid) - { - } - - template <typename T = void> explicit SafePointerType(T* ptr): SafePointerType(reinterpret_cast<uintptr_t>(ptr)) {} - template <typename T = void> T* AsPointer() const { return reinterpret_cast<T*>(this->Get()); } - - explicit operator bool() const { return *this != Invalid; } -}; - -template <typename Tag> -const Tag SafePointerType<Tag>::Invalid = { 0 }; - -template <typename Tag> -inline bool operator==(const SafePointerType<Tag>& lhs, const SafePointerType<Tag>& rhs) -{ - return lhs.Get() == rhs.Get(); -} - -template <typename Tag> -inline bool operator!=(const SafePointerType<Tag>& lhs, const SafePointerType<Tag>& rhs) -{ - return lhs.Get() != rhs.Get(); -} - -} // namespace Details - -struct NodeId final: Details::SafePointerType<NodeId> -{ - using SafePointerType::SafePointerType; -}; - -struct LinkId final: Details::SafePointerType<LinkId> -{ - using SafePointerType::SafePointerType; -}; - -struct PinId final: Details::SafePointerType<PinId> -{ - using SafePointerType::SafePointerType; -}; - - -//------------------------------------------------------------------------------ -} // namespace Editor -} // namespace ax - - -//------------------------------------------------------------------------------ -# endif // __IMGUI_NODE_EDITOR_H__
\ No newline at end of file |