mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-02-20 14:44:21 +01:00
Added export and import tool to the PaintToolsPropertyInspector.
This commit is contained in:
parent
fede24767d
commit
73dc6be1da
@ -15,6 +15,7 @@
|
||||
#include "../bush_prefabs.h"
|
||||
#include "../paint_utilities.h"
|
||||
#include "core/io/image.h"
|
||||
#include "core/io/image_loader.h"
|
||||
#include "core/os/keyboard.h"
|
||||
#include "paint_project.h"
|
||||
#include "scene/resources/texture.h"
|
||||
@ -923,6 +924,24 @@ bool PaintCanvas::_forward_canvas_gui_input(const Ref<InputEvent> &event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Error PaintCanvas::load_image(const String &path) {
|
||||
if (path.empty()) {
|
||||
return ERR_FILE_NOT_FOUND;
|
||||
}
|
||||
|
||||
Error err = ImageLoader::load_image(path, _image);
|
||||
|
||||
if (err != OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
Vector2 size = _image->get_size();
|
||||
|
||||
set_size(size);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
PaintCanvas::PaintCanvas() {
|
||||
_symmetry_x = false;
|
||||
_symmetry_y = false;
|
||||
@ -1083,6 +1102,8 @@ void PaintCanvas::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_on_tool_changed"), &PaintCanvas::_on_tool_changed);
|
||||
ClassDB::bind_method(D_METHOD("tool_process", "local_position", "event"), &PaintCanvas::tool_process);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("load_image", "path"), &PaintCanvas::load_image);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_on_size_changed"), &PaintCanvas::_on_size_changed);
|
||||
|
||||
BIND_ENUM_CONSTANT(TOOL_PENCIL);
|
||||
|
@ -107,6 +107,8 @@ public:
|
||||
void tool_process(const Vector2 &local_position, const Ref<InputEvent> &event);
|
||||
bool _forward_canvas_gui_input(const Ref<InputEvent> &event);
|
||||
|
||||
Error load_image(const String &path);
|
||||
|
||||
PaintCanvas();
|
||||
~PaintCanvas();
|
||||
|
||||
|
@ -22,8 +22,10 @@ SOFTWARE.
|
||||
|
||||
#include "paint_tools_property_inspector.h"
|
||||
|
||||
#include "core/io/image_loader.h"
|
||||
#include "scene/gui/box_container.h"
|
||||
#include "scene/gui/button.h"
|
||||
#include "scene/gui/file_dialog.h"
|
||||
#include "scene/gui/flow_container.h"
|
||||
#include "scene/gui/label.h"
|
||||
#include "scene/gui/slider.h"
|
||||
@ -118,6 +120,36 @@ PaintToolsPropertyInspector::PaintToolsPropertyInspector() {
|
||||
_paint_canvas = 0;
|
||||
_group.instance();
|
||||
|
||||
Control *popups = memnew(Control);
|
||||
add_child(popups);
|
||||
popups->set_mouse_filter(MOUSE_FILTER_IGNORE);
|
||||
|
||||
_import_file_dialog = memnew(FileDialog);
|
||||
popups->add_child(_import_file_dialog);
|
||||
_import_file_dialog->set_access(FileDialog::ACCESS_FILESYSTEM);
|
||||
_import_file_dialog->set_resizable(true);
|
||||
_import_file_dialog->set_mode(FileDialog::MODE_OPEN_FILE);
|
||||
_import_file_dialog->set_title("Import image");
|
||||
_import_file_dialog->connect("confirmed", this, "_on_import_dialog_confirmed");
|
||||
_import_file_dialog->connect("file_selected", this, "_on_import_dialog_file_selected");
|
||||
|
||||
List<String> extensions;
|
||||
ImageLoader::get_recognized_extensions(&extensions);
|
||||
|
||||
for (List<String>::Element *E = extensions.front(); E; E = E->next()) {
|
||||
_import_file_dialog->add_filter("*." + E->get());
|
||||
}
|
||||
|
||||
_export_file_dialog = memnew(FileDialog);
|
||||
popups->add_child(_export_file_dialog);
|
||||
_export_file_dialog->set_access(FileDialog::ACCESS_FILESYSTEM);
|
||||
_export_file_dialog->set_resizable(true);
|
||||
_export_file_dialog->set_mode(FileDialog::MODE_SAVE_FILE);
|
||||
_export_file_dialog->set_title("Import image");
|
||||
_export_file_dialog->add_filter("*.png");
|
||||
_export_file_dialog->connect("confirmed", this, "_on_export_dialog_confirmed");
|
||||
_export_file_dialog->connect("file_selected", this, "_on_export_dialog_file_selected");
|
||||
|
||||
VBoxContainer *box_container = memnew(VBoxContainer);
|
||||
add_child(box_container);
|
||||
|
||||
@ -138,8 +170,11 @@ PaintToolsPropertyInspector::PaintToolsPropertyInspector() {
|
||||
add_tool_button(PaintCanvas::TOOL_COLORPICKER, "Colorpicker", "ColorPick", "EditorIcons");
|
||||
add_tool_button(PaintCanvas::TOOL_CUT, "Cut", "ActionCut", "EditorIcons");
|
||||
add_tool_button(PaintCanvas::TOOL_PASTECUT, "Pastecut", "ActionPaste", "EditorIcons");
|
||||
|
||||
add_action_button("_on_undo_pressed", "Undo", "ArrowLeft", "EditorIcons");
|
||||
add_action_button("_on_redo_pressed", "Redo", "ArrowRight", "EditorIcons");
|
||||
add_action_button("_on_import_pressed", "Import Image", "Load", "EditorIcons");
|
||||
add_action_button("_on_export_pressed", "Export Image", "Save", "EditorIcons");
|
||||
|
||||
_brush_prefabs = memnew(HFlowContainer);
|
||||
box_container->add_child(_brush_prefabs);
|
||||
@ -254,6 +289,44 @@ void PaintToolsPropertyInspector::_on_redo_pressed() {
|
||||
paint_canvas->redo_action();
|
||||
}
|
||||
|
||||
void PaintToolsPropertyInspector::_on_export_pressed() {
|
||||
_export_file_dialog->popup_centered_ratio();
|
||||
}
|
||||
|
||||
void PaintToolsPropertyInspector::_on_import_pressed() {
|
||||
_import_file_dialog->popup_centered_ratio();
|
||||
}
|
||||
|
||||
void PaintToolsPropertyInspector::_on_import_dialog_confirmed() {
|
||||
_on_import_dialog_file_selected(_import_file_dialog->get_current_file());
|
||||
}
|
||||
void PaintToolsPropertyInspector::_on_import_dialog_file_selected(const String &f) {
|
||||
PaintCanvas *paint_canvas = Object::cast_to<PaintCanvas>(ObjectDB::get_instance(_paint_canvas));
|
||||
|
||||
ERR_FAIL_COND(!paint_canvas);
|
||||
|
||||
if (f.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
paint_canvas->load_image(f);
|
||||
}
|
||||
|
||||
void PaintToolsPropertyInspector::_on_export_dialog_confirmed() {
|
||||
_on_export_dialog_file_selected(_export_file_dialog->get_current_file());
|
||||
}
|
||||
void PaintToolsPropertyInspector::_on_export_dialog_file_selected(const String &f) {
|
||||
PaintCanvas *paint_canvas = Object::cast_to<PaintCanvas>(ObjectDB::get_instance(_paint_canvas));
|
||||
|
||||
ERR_FAIL_COND(!paint_canvas);
|
||||
|
||||
if (f.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
paint_canvas->get_image()->save_png(f);
|
||||
}
|
||||
|
||||
void PaintToolsPropertyInspector::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_on_button_toggled"), &PaintToolsPropertyInspector::_on_button_toggled);
|
||||
ClassDB::bind_method(D_METHOD("_on_tool_changed"), &PaintToolsPropertyInspector::_on_tool_changed);
|
||||
@ -263,4 +336,13 @@ void PaintToolsPropertyInspector::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_on_undo_pressed"), &PaintToolsPropertyInspector::_on_undo_pressed);
|
||||
ClassDB::bind_method(D_METHOD("_on_redo_pressed"), &PaintToolsPropertyInspector::_on_redo_pressed);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_on_import_pressed"), &PaintToolsPropertyInspector::_on_import_pressed);
|
||||
ClassDB::bind_method(D_METHOD("_on_export_pressed"), &PaintToolsPropertyInspector::_on_export_pressed);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_on_import_dialog_confirmed"), &PaintToolsPropertyInspector::_on_import_dialog_confirmed);
|
||||
ClassDB::bind_method(D_METHOD("_on_import_dialog_file_selected"), &PaintToolsPropertyInspector::_on_import_dialog_file_selected);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_on_export_dialog_confirmed"), &PaintToolsPropertyInspector::_on_export_dialog_confirmed);
|
||||
ClassDB::bind_method(D_METHOD("_on_export_dialog_file_selected"), &PaintToolsPropertyInspector::_on_export_dialog_file_selected);
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ class PaintProject;
|
||||
class ButtonGroup;
|
||||
class HSlider;
|
||||
class Label;
|
||||
class FileDialog;
|
||||
|
||||
class PaintToolsPropertyInspector : public PaintCustomPropertyInspector {
|
||||
GDCLASS(PaintToolsPropertyInspector, PaintCustomPropertyInspector);
|
||||
@ -56,9 +57,18 @@ protected:
|
||||
void _on_brush_size_changed();
|
||||
void _on_undo_pressed();
|
||||
void _on_redo_pressed();
|
||||
void _on_import_pressed();
|
||||
void _on_export_pressed();
|
||||
void _on_import_dialog_confirmed();
|
||||
void _on_import_dialog_file_selected(const String &f);
|
||||
void _on_export_dialog_confirmed();
|
||||
void _on_export_dialog_file_selected(const String &f);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
FileDialog *_import_file_dialog;
|
||||
FileDialog *_export_file_dialog;
|
||||
|
||||
HFlowContainer *_grid;
|
||||
HFlowContainer *_brush_prefabs;
|
||||
HSlider *_brush_size_slider;
|
||||
|
Loading…
Reference in New Issue
Block a user