mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
PixelPaint: Implement Merge Active Layer Up
Implements 'Merge Active Layer Up' and adds it to the 'Layer' menu.
This commit is contained in:
parent
db299e9804
commit
7e5b3ce26b
3 changed files with 29 additions and 0 deletions
|
@ -369,6 +369,23 @@ void Image::merge_visible_layers()
|
|||
}
|
||||
}
|
||||
|
||||
void Image::merge_active_layer_up(Layer& layer)
|
||||
{
|
||||
if (m_layers.size() < 2)
|
||||
return;
|
||||
size_t layer_index = this->index_of(layer);
|
||||
if ((layer_index + 1) == m_layers.size()) {
|
||||
dbgln("Cannot merge layer up: layer is already at the top");
|
||||
return; // FIXME: Notify user of error properly.
|
||||
}
|
||||
|
||||
auto& layer_above = m_layers.at(layer_index + 1);
|
||||
GUI::Painter painter(layer_above.bitmap());
|
||||
painter.draw_scaled_bitmap(rect(), layer.bitmap(), layer.rect(), (float)layer.opacity_percent() / 100.0f);
|
||||
remove_layer(layer);
|
||||
select_layer(&layer_above);
|
||||
}
|
||||
|
||||
void Image::merge_active_layer_down(Layer& layer)
|
||||
{
|
||||
if (m_layers.size() < 2)
|
||||
|
|
|
@ -81,6 +81,7 @@ public:
|
|||
void select_layer(Layer*);
|
||||
void flatten_all_layers();
|
||||
void merge_visible_layers();
|
||||
void merge_active_layer_up(Layer& layer);
|
||||
void merge_active_layer_down(Layer& layer);
|
||||
|
||||
void add_client(ImageClient&);
|
||||
|
|
|
@ -591,6 +591,17 @@ void MainWidget::initialize_menubar(GUI::Window& window)
|
|||
editor->did_complete_action();
|
||||
}));
|
||||
|
||||
m_layer_menu->add_action(GUI::Action::create(
|
||||
"Merge &Active Layer Up", [&](auto&) {
|
||||
auto* editor = current_image_editor();
|
||||
VERIFY(editor);
|
||||
auto active_layer = editor->active_layer();
|
||||
if (!active_layer)
|
||||
return;
|
||||
editor->image().merge_active_layer_up(*active_layer);
|
||||
editor->did_complete_action();
|
||||
}));
|
||||
|
||||
m_layer_menu->add_action(GUI::Action::create(
|
||||
"M&erge Active Layer Down", { Mod_Ctrl, Key_E }, [&](auto&) {
|
||||
auto* editor = current_image_editor();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue