QuickShow: Rotate image left and right, flip vertical and horizontal

This commit is contained in:
Hüseyin ASLITÜRK 2020-04-12 16:03:31 +03:00 committed by Andreas Kling
parent 2689fdf1d8
commit d79c81a179
Notes: sideshowbarker 2024-07-19 07:40:45 +09:00
3 changed files with 65 additions and 0 deletions

View file

@ -42,6 +42,22 @@ QSWidget::~QSWidget()
{
}
void QSWidget::flip(Gfx::Orientation orientation)
{
m_bitmap = m_bitmap->flipped(orientation);
set_scale(m_scale);
resize_window();
}
void QSWidget::rotate(Gfx::RotationDirection rotation_direction)
{
m_bitmap = m_bitmap->rotated(rotation_direction);
set_scale(m_scale);
resize_window();
}
void QSWidget::navigate(Directions direction)
{
if (m_path == nullptr)
@ -211,3 +227,22 @@ void QSWidget::drop_event(GUI::DropEvent& event)
if (on_drop)
on_drop(event);
}
void QSWidget::resize_window()
{
if (window()->is_fullscreen())
return;
if (!m_bitmap)
return;
auto new_size = m_bitmap->size();
if (new_size.width() < 300)
new_size.set_width(300);
if (new_size.height() < 200)
new_size.set_height(200);
new_size.set_height(new_size.height());
window()->resize(new_size);
}

View file

@ -27,6 +27,7 @@
#pragma once
#include <LibGUI/Frame.h>
#include <LibGfx/Bitmap.h>
#include <LibGfx/FloatPoint.h>
class QSLabel;
@ -46,6 +47,8 @@ public:
const Gfx::Bitmap* bitmap() const { return m_bitmap.ptr(); }
const String& path() const { return m_path; }
void flip(Gfx::Orientation);
void rotate(Gfx::RotationDirection);
void navigate(Directions);
void load_from_file(const String&);
@ -63,6 +66,7 @@ private:
virtual void drop_event(GUI::DropEvent&) override;
void relayout();
void resize_window();
String m_path;
RefPtr<Gfx::Bitmap> m_bitmap;

View file

@ -103,6 +103,26 @@ int main(int argc, char** argv)
};
// Actions
auto rotate_left_action = GUI::Action::create("Rotate Left", { Mod_None, Key_L },
[&](auto&) {
widget.rotate(Gfx::RotationDirection::Left);
});
auto rotate_right_action = GUI::Action::create("Rotate Right", { Mod_None, Key_R },
[&](auto&) {
widget.rotate(Gfx::RotationDirection::Right);
});
auto vertical_flip_action = GUI::Action::create("Vertical Flip", { Mod_None, Key_V },
[&](auto&) {
widget.flip(Gfx::Orientation::Vertical);
});
auto horizontal_flip_action = GUI::Action::create("Horizontal Flip", { Mod_None, Key_H },
[&](auto&) {
widget.flip(Gfx::Orientation::Horizontal);
});
auto go_first_action = GUI::Action::create("First", { Mod_None, Key_Home }, Gfx::Bitmap::load_from_file("/res/icons/16x16/go-first.png"),
[&](auto&) {
widget.navigate(QSWidget::Directions::First);
@ -137,6 +157,12 @@ int main(int argc, char** argv)
app.quit();
}));
auto& image_menu = menubar->add_menu("Image");
image_menu.add_action(rotate_left_action);
image_menu.add_action(rotate_right_action);
image_menu.add_action(vertical_flip_action);
image_menu.add_action(horizontal_flip_action);
auto& navigate_menu = menubar->add_menu("Navigate");
navigate_menu.add_action(go_first_action);
navigate_menu.add_action(go_back_action);