PixelPaint: Add Fit Image To View
action
This is a feature I missed from Photoshop: it sets the scale and position so that the image fits (it's longest dimension) into the editor view. There's a 5% border left around the image to provide context. This is just arbitrary seemed like the right amount after some trial and error.
This commit is contained in:
parent
111ef19114
commit
d9832f8d0b
Notes:
sideshowbarker
2024-07-18 04:22:51 +09:00
Author: https://github.com/mustafaquraish Commit: https://github.com/SerenityOS/serenity/commit/d9832f8d0bf Pull-request: https://github.com/SerenityOS/serenity/pull/9887 Reviewed-by: https://github.com/danielledeleo
3 changed files with 18 additions and 0 deletions
Userland/Applications/PixelPaint
|
@ -425,6 +425,18 @@ void ImageEditor::scale_by(float scale_delta)
|
|||
}
|
||||
}
|
||||
|
||||
void ImageEditor::fit_image_to_view()
|
||||
{
|
||||
const float border_ratio = 0.95f;
|
||||
auto image_size = image().size();
|
||||
auto height_ratio = rect().height() / (float)image_size.height();
|
||||
auto width_ratio = rect().width() / (float)image_size.width();
|
||||
m_scale = border_ratio * min(height_ratio, width_ratio);
|
||||
|
||||
m_pan_origin = Gfx::FloatPoint(0, 0);
|
||||
relayout();
|
||||
}
|
||||
|
||||
void ImageEditor::reset_scale_and_position()
|
||||
{
|
||||
if (m_scale != 1.0f)
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
|
||||
float scale() const { return m_scale; }
|
||||
void scale_centered_on_position(Gfx::IntPoint const&, float);
|
||||
void fit_image_to_view();
|
||||
void reset_scale_and_position();
|
||||
void scale_by(float);
|
||||
|
||||
|
|
|
@ -342,6 +342,11 @@ void MainWidget::initialize_menubar(GUI::Window& window)
|
|||
view_menu.add_action(*m_zoom_in_action);
|
||||
view_menu.add_action(*m_zoom_out_action);
|
||||
view_menu.add_action(*m_reset_zoom_action);
|
||||
view_menu.add_action(GUI::Action::create(
|
||||
"&Fit Image To View", [&](auto&) {
|
||||
if (auto* editor = current_image_editor())
|
||||
editor->fit_image_to_view();
|
||||
}));
|
||||
view_menu.add_separator();
|
||||
view_menu.add_action(*m_add_guide_action);
|
||||
view_menu.add_action(*m_show_guides_action);
|
||||
|
|
Loading…
Add table
Reference in a new issue