Also ported the PaintCanvasDialog, and the grid size dialog.

This commit is contained in:
Relintai 2022-04-17 16:44:54 +02:00
parent 398af1a772
commit bd42d11629
7 changed files with 211 additions and 51 deletions

View File

@ -24,34 +24,109 @@ SOFTWARE.
#include "paint_canvas_dialog.h" #include "paint_canvas_dialog.h"
void PaintCanvasDialog::_ready() { #include "scene/gui/box_container.h"
/* #include "scene/gui/label.h"
yield(owner, "ready") #include "scene/gui/spin_box.h"
find_node("Width").value = owner.paint_canvas.canvas_width
find_node("Height").value = owner.paint_canvas.canvas_height int PaintCanvasDialog::get_size_x() const {
*/ return static_cast<int>(size_x_spin_box->get_value());
} }
void PaintCanvasDialog::_on_ConfirmationDialog_confirmed() { void PaintCanvasDialog::set_size_x(const int val) {
/* size_x_spin_box->set_value(val);
var width = find_node("Width").value _x_prev_val = val;
var height = find_node("Height").value
print("change canvas size: ", width, " ", height)
owner.paint_canvas.resize(width, height)
*/
} }
void PaintCanvasDialog::_on_ChangeCanvasSize_visibility_changed() {
/* int PaintCanvasDialog::get_size_y() const {
if visible: return static_cast<int>(size_y_spin_box->get_value());
find_node("Width").value = owner.paint_canvas.canvas_width }
find_node("Height").value = owner.paint_canvas.canvas_height void PaintCanvasDialog::set_size_y(const int val) {
*/ size_y_spin_box->set_value(val);
_y_prev_val = val;
}
void PaintCanvasDialog::_on_confirmed() {
_x_prev_val = get_size_x();
_y_prev_val = get_size_y();
}
void PaintCanvasDialog::_on_about_to_show() {
set_size_x(_x_prev_val);
set_size_y(_y_prev_val);
} }
PaintCanvasDialog::PaintCanvasDialog() { PaintCanvasDialog::PaintCanvasDialog() {
_x_prev_val = 0;
_y_prev_val = 0;
set_resizable(true);
set_title("Please Confirm...");
VBoxContainer *main_box_container = memnew(VBoxContainer);
add_child(main_box_container);
Label *main_label = memnew(Label);
main_label->set_text("Change canvas size?");
main_label->set_align(Label::ALIGN_CENTER);
main_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
main_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(main_label);
HBoxContainer *grid_spin_container = memnew(HBoxContainer);
grid_spin_container->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(grid_spin_container);
Label *grid_label = memnew(Label);
grid_label->set_text("Width (X)");
grid_label->set_align(Label::ALIGN_CENTER);
grid_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->add_child(grid_label);
size_x_spin_box = memnew(SpinBox);
size_x_spin_box->set_value(64);
size_x_spin_box->set_min(1);
size_x_spin_box->set_max(2500);
size_x_spin_box->set_v_size_flags(Control::SIZE_EXPAND_FILL);
size_x_spin_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->add_child(size_x_spin_box);
HBoxContainer *big_grid_spin_container = memnew(HBoxContainer);
big_grid_spin_container->set_v_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(big_grid_spin_container);
grid_label = memnew(Label);
grid_label->set_text("Height (Y)");
grid_label->set_align(Label::ALIGN_CENTER);
grid_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->add_child(grid_label);
size_y_spin_box = memnew(SpinBox);
size_y_spin_box->set_value(64);
size_y_spin_box->set_min(1);
size_y_spin_box->set_max(2500);
size_y_spin_box->set_v_size_flags(Control::SIZE_EXPAND_FILL);
size_y_spin_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->add_child(size_y_spin_box);
} }
PaintCanvasDialog::~PaintCanvasDialog() { PaintCanvasDialog::~PaintCanvasDialog() {
} }
void PaintCanvasDialog::_bind_methods() { void PaintCanvasDialog::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_POSTINITIALIZE: {
connect("confirmed", this, "_on_confirmed");
connect("about_to_show", this, "_on_about_to_show");
} break;
default: {
} break;
}
}
void PaintCanvasDialog::_bind_methods() {
ClassDB::bind_method(D_METHOD("_on_confirmed"), &PaintCanvasDialog::_on_confirmed);
ClassDB::bind_method(D_METHOD("_on_about_to_show"), &PaintCanvasDialog::_on_about_to_show);
} }

View File

@ -27,18 +27,32 @@ SOFTWARE.
#include "scene/gui/dialogs.h" #include "scene/gui/dialogs.h"
class SpinBox;
class PaintCanvasDialog : public ConfirmationDialog { class PaintCanvasDialog : public ConfirmationDialog {
GDCLASS(PaintCanvasDialog, ConfirmationDialog); GDCLASS(PaintCanvasDialog, ConfirmationDialog);
public: public:
void _ready(); int get_size_x() const;
void _on_ConfirmationDialog_confirmed(); void set_size_x(const int val);
void _on_ChangeCanvasSize_visibility_changed();
int get_size_y() const;
void set_size_y(const int val);
SpinBox *size_x_spin_box;
SpinBox *size_y_spin_box;
PaintCanvasDialog(); PaintCanvasDialog();
~PaintCanvasDialog(); ~PaintCanvasDialog();
protected: protected:
void _on_confirmed();
void _on_about_to_show();
int _x_prev_val;
int _y_prev_val;
void _notification(int p_what);
static void _bind_methods(); static void _bind_methods();
}; };

View File

@ -24,36 +24,75 @@ SOFTWARE.
#include "paint_change_grid_size_dialog.h" #include "paint_change_grid_size_dialog.h"
void PaintChangeGridSizeDialog::_ready() { #include "scene/gui/box_container.h"
/* #include "scene/gui/label.h"
yield(owner, "ready") #include "scene/gui/spin_box.h"
find_node("GridValue").value = owner.paint_canvas.grid_size
find_node("BigGridValue").value = owner.paint_canvas.big_grid_size int PaintChangeGridSizeDialog::get_grid_value() const {
*/ return static_cast<int>(grid_spin_box->get_value());
}
void PaintChangeGridSizeDialog::set_grid_value(const int val) {
grid_spin_box->set_value(val);
} }
void PaintChangeGridSizeDialog::_on_ChangeGridSizeDialog_confirmed() { int PaintChangeGridSizeDialog::get_big_grid_value() const {
/* return static_cast<int>(big_grid_spin_box->get_value());
var grid_size = find_node("GridValue").value
var big_grid_size = find_node("BigGridValue").value
owner.paint_canvas.grid_size = grid_size
owner.paint_canvas.big_grid_size = big_grid_size
*/
} }
void PaintChangeGridSizeDialog::_on_GridValue_value_changed(float value) { void PaintChangeGridSizeDialog::set_big_grid_value(const int val) {
/* big_grid_spin_box->set_value(val);
var grid_size = value
owner.paint_canvas.grid_size = grid_size
*/
}
void PaintChangeGridSizeDialog::_on_BigGridValue_value_changed(float value) {
/*
var big_grid_size = value
owner.paint_canvas.big_grid_size = big_grid_size
*/
} }
PaintChangeGridSizeDialog::PaintChangeGridSizeDialog() { PaintChangeGridSizeDialog::PaintChangeGridSizeDialog() {
set_resizable(true);
set_title("Change Grid Size");
VBoxContainer *main_box_container = memnew(VBoxContainer);
add_child(main_box_container);
Label *main_label = memnew(Label);
main_label->set_text("Change Grid Size");
main_label->set_align(Label::ALIGN_CENTER);
main_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
main_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(main_label);
HBoxContainer *grid_spin_container = memnew(HBoxContainer);
grid_spin_container->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(grid_spin_container);
Label *grid_label = memnew(Label);
grid_label->set_text("Grid 1");
grid_label->set_align(Label::ALIGN_CENTER);
grid_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->add_child(grid_label);
grid_spin_box = memnew(SpinBox);
grid_spin_box->set_value(1);
grid_spin_box->set_max(2500);
grid_spin_box->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
grid_spin_container->add_child(grid_spin_box);
HBoxContainer *big_grid_spin_container = memnew(HBoxContainer);
big_grid_spin_container->set_v_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->set_h_size_flags(Control::SIZE_EXPAND_FILL);
main_box_container->add_child(big_grid_spin_container);
grid_label = memnew(Label);
grid_label->set_text("Grid 2");
grid_label->set_align(Label::ALIGN_CENTER);
grid_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
grid_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->add_child(grid_label);
big_grid_spin_box = memnew(SpinBox);
big_grid_spin_box->set_value(8);
big_grid_spin_box->set_max(2500);
big_grid_spin_box->set_v_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_box->set_h_size_flags(Control::SIZE_EXPAND_FILL);
big_grid_spin_container->add_child(big_grid_spin_box);
} }
PaintChangeGridSizeDialog::~PaintChangeGridSizeDialog() { PaintChangeGridSizeDialog::~PaintChangeGridSizeDialog() {

View File

@ -27,18 +27,24 @@ SOFTWARE.
#include "scene/gui/dialogs.h" #include "scene/gui/dialogs.h"
class SpinBox;
class PaintChangeGridSizeDialog : public AcceptDialog { class PaintChangeGridSizeDialog : public AcceptDialog {
GDCLASS(PaintChangeGridSizeDialog, AcceptDialog); GDCLASS(PaintChangeGridSizeDialog, AcceptDialog);
public: public:
void _ready(); int get_grid_value() const;
void _on_ChangeGridSizeDialog_confirmed(); void set_grid_value(const int val);
void _on_GridValue_value_changed(float value);
void _on_BigGridValue_value_changed(float value); int get_big_grid_value() const;
void set_big_grid_value(const int val);
PaintChangeGridSizeDialog(); PaintChangeGridSizeDialog();
~PaintChangeGridSizeDialog(); ~PaintChangeGridSizeDialog();
SpinBox *grid_spin_box;
SpinBox *big_grid_spin_box;
protected: protected:
static void _bind_methods(); static void _bind_methods();
}; };

View File

@ -533,6 +533,10 @@ PoolVector2iArray PaintCanvas::get_neighbouring_pixels(const int pos_x, const in
} }
void PaintCanvas::resize(int width, int height) { void PaintCanvas::resize(int width, int height) {
if (get_canvas_width() == width && get_canvas_height() == height) {
return;
}
if (width < 0) { if (width < 0) {
width = 1; width = 1;
} }

View File

@ -782,6 +782,15 @@ void PaintWindow::_on_Editor_visibility_changed() {
set_process(is_visible_in_tree()); set_process(is_visible_in_tree());
} }
void PaintWindow::_on_ChangeGridSizeDialog_confirmed() {
paint_canvas->set_grid_size(paint_change_grid_size_dialog->get_grid_value());
paint_canvas->set_big_grid_size(paint_change_grid_size_dialog->get_big_grid_value());
}
void PaintWindow::_on_ChangeCanvasSizeDialog_confirmed() {
paint_canvas->resize(paint_canvas_dialog->get_size_x(), paint_canvas_dialog->get_size_y());
}
void PaintWindow::highlight_layer(const String &layer_name) { void PaintWindow::highlight_layer(const String &layer_name) {
for (int i = 0; i < layers_box_container->get_child_count(); ++i) { for (int i = 0; i < layers_box_container->get_child_count(); ++i) {
PaintLayerButton *button = Object::cast_to<PaintLayerButton>(layers_box_container->get_child(i)); PaintLayerButton *button = Object::cast_to<PaintLayerButton>(layers_box_container->get_child(i));
@ -1407,10 +1416,16 @@ PaintWindow::PaintWindow() {
//PaintCanvasDialog //PaintCanvasDialog
paint_canvas_dialog = memnew(PaintCanvasDialog); paint_canvas_dialog = memnew(PaintCanvasDialog);
paint_canvas_dialog->set_size_x(64);
paint_canvas_dialog->set_size_y(64);
paint_canvas_dialog->connect("confirmed", this, "_on_ChangeCanvasSizeDialog_confirmed");
add_child(paint_canvas_dialog); add_child(paint_canvas_dialog);
//PaintChangeGridSizeDialog //PaintChangeGridSizeDialog
paint_change_grid_size_dialog = memnew(PaintChangeGridSizeDialog); paint_change_grid_size_dialog = memnew(PaintChangeGridSizeDialog);
paint_change_grid_size_dialog->set_grid_value(1);
paint_change_grid_size_dialog->set_big_grid_value(8);
paint_change_grid_size_dialog->connect("confirmed", this, "_on_ChangeGridSizeDialog_confirmed");
add_child(paint_change_grid_size_dialog); add_child(paint_change_grid_size_dialog);
//PaintLoadFileDialog //PaintLoadFileDialog
@ -1432,6 +1447,9 @@ PaintWindow::PaintWindow() {
set_brush(Tools::PAINT); set_brush(Tools::PAINT);
_on_ChangeCanvasSizeDialog_confirmed();
_on_ChangeGridSizeDialog_confirmed();
//find_node("CanvasBackground").material.set_shader_param("pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) //find_node("CanvasBackground").material.set_shader_param("pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size)
add_new_layer(); add_new_layer();
@ -1459,6 +1477,8 @@ void PaintWindow::_bind_methods() {
ClassDB::bind_method(D_METHOD("_on_ColorPickerTool_pressed"), &PaintWindow::_on_ColorPickerTool_pressed); ClassDB::bind_method(D_METHOD("_on_ColorPickerTool_pressed"), &PaintWindow::_on_ColorPickerTool_pressed);
ClassDB::bind_method(D_METHOD("_on_CutTool_pressed"), &PaintWindow::_on_CutTool_pressed); ClassDB::bind_method(D_METHOD("_on_CutTool_pressed"), &PaintWindow::_on_CutTool_pressed);
ClassDB::bind_method(D_METHOD("_on_Editor_visibility_changed"), &PaintWindow::_on_Editor_visibility_changed); ClassDB::bind_method(D_METHOD("_on_Editor_visibility_changed"), &PaintWindow::_on_Editor_visibility_changed);
ClassDB::bind_method(D_METHOD("_on_ChangeGridSizeDialog_confirmed"), &PaintWindow::_on_ChangeGridSizeDialog_confirmed);
ClassDB::bind_method(D_METHOD("_on_ChangeCanvasSizeDialog_confirmed"), &PaintWindow::_on_ChangeCanvasSizeDialog_confirmed);
ClassDB::bind_method(D_METHOD("_on_Button_pressed"), &PaintWindow::_on_Button_pressed); ClassDB::bind_method(D_METHOD("_on_Button_pressed"), &PaintWindow::_on_Button_pressed);
ClassDB::bind_method(D_METHOD("_on_PaintCanvasContainer_mouse_entered"), &PaintWindow::_on_PaintCanvasContainer_mouse_entered); ClassDB::bind_method(D_METHOD("_on_PaintCanvasContainer_mouse_entered"), &PaintWindow::_on_PaintCanvasContainer_mouse_entered);

View File

@ -132,6 +132,8 @@ public:
void _on_ColorPickerTool_pressed(); void _on_ColorPickerTool_pressed();
void _on_CutTool_pressed(); void _on_CutTool_pressed();
void _on_Editor_visibility_changed(); void _on_Editor_visibility_changed();
void _on_ChangeGridSizeDialog_confirmed();
void _on_ChangeCanvasSizeDialog_confirmed();
void highlight_layer(const String &layer_name); void highlight_layer(const String &layer_name);
void toggle_layer_visibility(Node *button, const String &layer_name); void toggle_layer_visibility(Node *button, const String &layer_name);