mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-01-24 01:57:18 +01:00
Added resize method to PaintCanvas.
This commit is contained in:
parent
9eaa2bd56f
commit
94b5ac9267
@ -128,6 +128,59 @@ void PaintCanvas::update_textures() {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PaintCanvas::resize(int width, int height) {
|
||||||
|
if (get_size().x == width && get_size().y == height) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width < 0) {
|
||||||
|
width = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (height < 0) {
|
||||||
|
height = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_size(Vector2i(width, height));
|
||||||
|
|
||||||
|
resize_image(_image_texture);
|
||||||
|
resize_image(_preview_image_texture);
|
||||||
|
|
||||||
|
update_textures();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PaintCanvas::resize_image(Ref<Image> image) {
|
||||||
|
PoolColorArray pixel_colors;
|
||||||
|
int prev_width = image->get_size().x;
|
||||||
|
int prev_height = image->get_size().y;
|
||||||
|
|
||||||
|
image->lock();
|
||||||
|
|
||||||
|
for (int y = 0; y < prev_height; ++y) {
|
||||||
|
for (int x = 0; x < prev_width; ++x) {
|
||||||
|
pixel_colors.append(image->get_pixel(x, y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image->unlock();
|
||||||
|
|
||||||
|
image->create(get_size().x, get_size().y, false, Image::FORMAT_RGBA8);
|
||||||
|
|
||||||
|
image->lock();
|
||||||
|
|
||||||
|
for (int x = 0; x < prev_width; ++x) {
|
||||||
|
for (int y = 0; y < prev_height; ++y) {
|
||||||
|
if (x >= get_size().x || y >= get_size().y) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
image->set_pixel(x, y, pixel_colors[PaintUtilities::to_1D(x, y, prev_width)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image->unlock();
|
||||||
|
}
|
||||||
|
|
||||||
PoolVector2iArray PaintCanvas::select_color(const int p_x, const int p_y) {
|
PoolVector2iArray PaintCanvas::select_color(const int p_x, const int p_y) {
|
||||||
PoolVector2iArray same_color_pixels;
|
PoolVector2iArray same_color_pixels;
|
||||||
|
|
||||||
@ -267,6 +320,9 @@ void PaintCanvas::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("clear_preview"), &PaintCanvas::clear_preview);
|
ClassDB::bind_method(D_METHOD("clear_preview"), &PaintCanvas::clear_preview);
|
||||||
ClassDB::bind_method(D_METHOD("update_textures"), &PaintCanvas::update_textures);
|
ClassDB::bind_method(D_METHOD("update_textures"), &PaintCanvas::update_textures);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("resize", "width", "height"), &PaintCanvas::resize);
|
||||||
|
ClassDB::bind_method(D_METHOD("resize_image", "image"), &PaintCanvas::resize_image);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("select_color", "x", "y"), &PaintCanvas::select_color);
|
ClassDB::bind_method(D_METHOD("select_color", "x", "y"), &PaintCanvas::select_color);
|
||||||
ClassDB::bind_method(D_METHOD("select_same_color", "x", "y"), &PaintCanvas::select_same_color);
|
ClassDB::bind_method(D_METHOD("select_same_color", "x", "y"), &PaintCanvas::select_same_color);
|
||||||
ClassDB::bind_method(D_METHOD("get_neighbouring_pixels", "x", "y"), &PaintCanvas::get_neighbouring_pixels);
|
ClassDB::bind_method(D_METHOD("get_neighbouring_pixels", "x", "y"), &PaintCanvas::get_neighbouring_pixels);
|
||||||
|
@ -43,6 +43,9 @@ public:
|
|||||||
void clear_preview();
|
void clear_preview();
|
||||||
void update_textures();
|
void update_textures();
|
||||||
|
|
||||||
|
void resize(const int width, const int height);
|
||||||
|
void resize_image(Ref<Image> image);
|
||||||
|
|
||||||
PoolVector2iArray select_color(const int p_x, const int p_y);
|
PoolVector2iArray select_color(const int p_x, const int p_y);
|
||||||
PoolVector2iArray select_same_color(const int p_x, const int p_y);
|
PoolVector2iArray select_same_color(const int p_x, const int p_y);
|
||||||
PoolVector2iArray get_neighbouring_pixels(const int pos_x, const int pos_y);
|
PoolVector2iArray get_neighbouring_pixels(const int pos_x, const int pos_y);
|
||||||
|
Loading…
Reference in New Issue
Block a user