mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2024-12-24 12:47:12 +01:00
Now PaintNodes can handle input events coming from the editor plugin.
This commit is contained in:
parent
afa0e83f78
commit
c683e675e1
@ -34,6 +34,13 @@ Color PaintNode::util_random_color_alt() {
|
||||
return PaintUtilities::random_color_alt();
|
||||
}
|
||||
|
||||
bool PaintNode::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
|
||||
return call("_forward_canvas_gui_input", p_event);
|
||||
}
|
||||
bool PaintNode::_forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PaintProject *PaintNode::get_paint_project() {
|
||||
PaintNode *p = this;
|
||||
|
||||
@ -87,5 +94,9 @@ void PaintNode::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("util_random_color"), &PaintNode::util_random_color);
|
||||
ClassDB::bind_method(D_METHOD("util_random_color_alt"), &PaintNode::util_random_color_alt);
|
||||
|
||||
BIND_VMETHOD(MethodInfo(Variant::BOOL, "_forward_canvas_gui_input", PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent")));
|
||||
ClassDB::bind_method(D_METHOD("forward_canvas_gui_input", "event"), &PaintNode::forward_canvas_gui_input);
|
||||
ClassDB::bind_method(D_METHOD("_forward_canvas_gui_input", "event"), &PaintNode::_forward_canvas_gui_input);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_paint_project"), &PaintNode::get_paint_project);
|
||||
}
|
||||
|
@ -24,6 +24,9 @@ public:
|
||||
Color util_random_color();
|
||||
Color util_random_color_alt();
|
||||
|
||||
bool forward_canvas_gui_input(const Ref<InputEvent> &p_event);
|
||||
bool _forward_canvas_gui_input(const Ref<InputEvent> &p_event);
|
||||
|
||||
PaintProject *get_paint_project();
|
||||
|
||||
String get_configuration_warning() const;
|
||||
|
@ -44,7 +44,9 @@ String PaintEditorPlugin::get_name() const {
|
||||
}
|
||||
|
||||
void PaintEditorPlugin::edit(Object *p_object) {
|
||||
_sidebar->on_paint_node_selected(Object::cast_to<PaintNode>(p_object));
|
||||
_active_node = Object::cast_to<PaintNode>(p_object);
|
||||
|
||||
_sidebar->on_paint_node_selected(_active_node);
|
||||
}
|
||||
bool PaintEditorPlugin::handles(Object *p_object) const {
|
||||
return p_object->is_class("PaintNode");
|
||||
@ -53,7 +55,16 @@ void PaintEditorPlugin::edited_scene_changed() {
|
||||
}
|
||||
|
||||
bool PaintEditorPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
|
||||
return false;
|
||||
if (!_active_node) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ObjectDB::instance_validate(_active_node)) {
|
||||
_active_node = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
return _active_node->forward_canvas_gui_input(p_event);
|
||||
}
|
||||
void PaintEditorPlugin::forward_canvas_draw_over_viewport(Control *p_overlay) {
|
||||
}
|
||||
@ -61,6 +72,8 @@ void PaintEditorPlugin::forward_canvas_force_draw_over_viewport(Control *p_overl
|
||||
}
|
||||
|
||||
PaintEditorPlugin::PaintEditorPlugin(EditorNode *p_node) {
|
||||
_active_node = NULL;
|
||||
|
||||
editor = p_node;
|
||||
|
||||
EDITOR_DEF("editors/paint/editor_side", 0);
|
||||
@ -88,6 +101,12 @@ PaintEditorPlugin::~PaintEditorPlugin() {
|
||||
Engine::get_singleton()->remove_global("PaintEditorPlugin");
|
||||
}
|
||||
|
||||
void PaintEditorPlugin::on_node_removed(Node *node) {
|
||||
if (_active_node == node) {
|
||||
_active_node = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void PaintEditorPlugin::_notification(int p_what) {
|
||||
if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
|
||||
switch ((int)EditorSettings::get_singleton()->get("editors/paint/editor_side")) {
|
||||
@ -98,9 +117,14 @@ void PaintEditorPlugin::_notification(int p_what) {
|
||||
CanvasItemEditor::get_singleton()->move_control_to_right_panel(_sidebar);
|
||||
} break;
|
||||
}
|
||||
} else if (p_what == NOTIFICATION_READY) {
|
||||
if (!get_tree()->is_connected("node_removed", this, "on_node_removed")) {
|
||||
get_tree()->connect("node_removed", this, "on_node_removed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PaintEditorPlugin::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_sidebar"), &PaintEditorPlugin::get_sidebar);
|
||||
ClassDB::bind_method(D_METHOD("on_node_removed", "node"), &PaintEditorPlugin::on_node_removed);
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ SOFTWARE.
|
||||
class PaintWindow;
|
||||
class Texture;
|
||||
class PaintSidebar;
|
||||
class PaintNode;
|
||||
|
||||
class PaintEditorPlugin : public EditorPlugin {
|
||||
GDCLASS(PaintEditorPlugin, EditorPlugin);
|
||||
@ -53,11 +54,14 @@ public:
|
||||
EditorNode *editor;
|
||||
|
||||
protected:
|
||||
void on_node_removed(Node *node);
|
||||
|
||||
void _notification(int p_what);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
PaintSidebar *_sidebar;
|
||||
PaintNode *_active_node;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user