#ifndef GUIShaderNode_h__ #define GUIShaderNode_h__ #include #include #include #include #include #include "GUIShaderNodeIO.h" #include #include #include #include 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 IoVector; IoVector inputs; IoVector outputs; protected: void SetDisplayImage(texture_ptr tex); texture_ptr displayImage; }; #endif // GUIShaderNode_h__