Files
LifeProject/LifeMaterialEditor/GUIShaderNode.h
T

96 lines
2.4 KiB
C++
Raw Normal View History

2025-05-13 02:46:21 +03:00
#ifndef GUIShaderNode_h__
#define GUIShaderNode_h__
#include <gui/GUIWindow.h>
#include <gui/GUIPlane.h>
#include <gui/GUIText.h>
#include <gui/GUIMenu.h>
#include <gui/GUIManager.h>
#include "GUIShaderNodeIO.h"
#include <gui/GUIPicture.h>
#include <shaders/IShaderGraphNode.h>
#include <vector>
#include <IPropertyHolder.h>
class GUIShaderNode : public GUIWindow, public Core::IPropertyHolder
{
public:
EVENT(LayoutEvent);
LayoutEvent Event_LayoutChanged;
EVENT1(ShaderNodeEvent, GUIShaderNode*);
ShaderNodeEvent Event_Select;
EVENT2(ShaderNodeNouseEvent, GUIShaderNode*, int);
ShaderNodeNouseEvent Event_HeaderClick;
EVENT2(NodeEvent, GUIShaderNodeIO*, GUIShaderNodeIO*);
NodeEvent Event_Attach;
GUIShaderNode(IShaderGraphNode* src);
~GUIShaderNode();
void SetCaption(const String& text);
const String& GetCaption();
void Update(float dt);
void RenderSelf();
void SetBackColor(const Vec4f& color);
void AddInput(GUIShaderNodeIO* node);
void AddOutput(GUIShaderNodeIO* node);
size_t GetInputCount();
size_t GetOutputCount();
GUIShaderNodeIO* GetInput(int id);
GUIShaderNodeIO* GetOutput(int id);
bool ProcessMessage(GUIMessageType mt, GUIMessageParam mp, IMessageArgs* args);
void* UserData;
IShaderGraphNode* GetGraphicsNode()
{
return GraphicsNode;
}
void Invalidate()
{
GUIWindow::Invalidate();
invalid = true;
}
private:
GUIMenu* menu;
IShaderGraphNode* GraphicsNode;
bool invalid;
GUIPicture* display;
bool resizing;
bool moving;
Vec2i size_pos;
Vec2i size_min;
Vec2i size_max;
void OnHeaderRightClick(GUIWindow* wnd, int param);
void OnBeginResize(GUIWindow* wnd, int param);
void OnDoResize(GUIWindow* wnd, int param);
void OnEndResize(GUIWindow* wnd, int param);
void OnHeaderMouseDown(GUIWindow* wnd, int param);
void OnHeaderMouseMove(GUIWindow* wnd, int param);
void OnHeaderMouseUp(GUIWindow* wnd, int param);
void OnHeaderMouseClick(GUIWindow* wnd, int param);
void OnSelect();
void ProcessLink(GUIShaderNodeIO* my, GUIShaderNodeIO* other);
void FormatInputs();
void FormatOutputs();
void OnIOResize(GUIWindow* wnd);
GUIPlane* header;
GUIText* header_text;
GUIPlane* body;
GUIPlane* mover;
GUIPlane* back;
typedef std::vector<GUIShaderNodeIO*> IoVector;
IoVector inputs;
IoVector outputs;
protected:
void SetDisplayImage(texture_ptr tex);
texture_ptr displayImage;
};
#endif // GUIShaderNode_h__