Przeglądaj źródła

PixelPaint: Add actions to flip image vertically/horizontally

Mustafa Quraish 3 lat temu
rodzic
commit
6a8c408856

+ 12 - 0
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();
+}
+
 }

+ 2 - 0
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&);
 

+ 19 - 0
Userland/Applications/PixelPaint/main.cpp

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Mustafa Quraish <mustafa@cs.toronto.edu>
  *
  * 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&) {