diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index 271800c3743..5334f2da0cc 100644 --- a/Userland/Applications/PixelPaint/Image.cpp +++ b/Userland/Applications/PixelPaint/Image.cpp @@ -573,4 +573,16 @@ void Image::set_path(String path) set_title(LexicalPath::basename(m_path)); } +void Image::flip(Gfx::Orientation orientation) +{ + for (auto& layer : m_layers) { + auto flipped = layer.bitmap().flipped(orientation); + VERIFY(flipped); + layer.set_bitmap(*flipped); + layer.did_modify_bitmap(rect()); + } + + did_change(); +} + } diff --git a/Userland/Applications/PixelPaint/Image.h b/Userland/Applications/PixelPaint/Image.h index cefd0551e33..64dc43ea6f6 100644 --- a/Userland/Applications/PixelPaint/Image.h +++ b/Userland/Applications/PixelPaint/Image.h @@ -91,6 +91,8 @@ public: String const& title() const { return m_title; } void set_title(String); + void flip(Gfx::Orientation orientation); + private: explicit Image(Gfx::IntSize const&); diff --git a/Userland/Applications/PixelPaint/main.cpp b/Userland/Applications/PixelPaint/main.cpp index dc82695dfdb..4d212b120ee 100644 --- a/Userland/Applications/PixelPaint/main.cpp +++ b/Userland/Applications/PixelPaint/main.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2021, Andreas Kling + * Copyright (c) 2021, Mustafa Quraish * * SPDX-License-Identifier: BSD-2-Clause */ @@ -406,6 +407,24 @@ int main(int argc, char** argv) return IterationDecision::Continue; }); + auto& image_menu = window->add_menu("&Image"); + image_menu.add_action(GUI::Action::create( + "Flip &Vertically", [&](auto&) { + auto* editor = current_image_editor(); + if (!editor) + return; + editor->image().flip(Gfx::Orientation::Vertical); + }, + window)); + image_menu.add_action(GUI::Action::create( + "Flip &Horizontally", [&](auto&) { + auto* editor = current_image_editor(); + if (!editor) + return; + editor->image().flip(Gfx::Orientation::Horizontal); + }, + window)); + auto& layer_menu = window->add_menu("&Layer"); layer_menu.add_action(GUI::Action::create( "New &Layer...", { Mod_Ctrl | Mod_Shift, Key_N }, [&](auto&) {