From 6a8c408856aa96215ca9c00f82c363b4908ea3d4 Mon Sep 17 00:00:00 2001 From: Mustafa Quraish Date: Thu, 2 Sep 2021 19:25:41 -0400 Subject: [PATCH] PixelPaint: Add actions to flip image vertically/horizontally --- Userland/Applications/PixelPaint/Image.cpp | 12 ++++++++++++ Userland/Applications/PixelPaint/Image.h | 2 ++ Userland/Applications/PixelPaint/main.cpp | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index 271800c374..5334f2da0c 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 cefd0551e3..64dc43ea6f 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 dc82695dfd..4d212b120e 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&) {