소스 검색

Magnifier: Add 8x magnification and pausing

This adds an option for even more magnification, when you really need to
count pixels, as well as pausing the capture by pressing Space and
switching between magnification levels with keys 2, 4 & 8.
Marcus Nilsson 3 년 전
부모
커밋
401ea85655

+ 4 - 1
Userland/Applications/Magnifier/MagnifierWidget.cpp

@@ -22,13 +22,16 @@ MagnifierWidget::~MagnifierWidget()
 
 
 void MagnifierWidget::set_scale_factor(int scale_factor)
 void MagnifierWidget::set_scale_factor(int scale_factor)
 {
 {
-    VERIFY(scale_factor == 2 || scale_factor == 4);
+    VERIFY(scale_factor == 2 || scale_factor == 4 || scale_factor == 8);
     m_scale_factor = scale_factor;
     m_scale_factor = scale_factor;
     update();
     update();
 }
 }
 
 
 void MagnifierWidget::sync()
 void MagnifierWidget::sync()
 {
 {
+    if (m_pause_capture)
+        return;
+
     auto size = frame_inner_rect().size();
     auto size = frame_inner_rect().size();
     Gfx::IntSize grab_size { size.width() / m_scale_factor, size.height() / m_scale_factor };
     Gfx::IntSize grab_size { size.width() / m_scale_factor, size.height() / m_scale_factor };
     m_grabbed_bitmap = GUI::WindowServerConnection::the().get_screen_bitmap_around_cursor(grab_size).bitmap();
     m_grabbed_bitmap = GUI::WindowServerConnection::the().get_screen_bitmap_around_cursor(grab_size).bitmap();

+ 2 - 0
Userland/Applications/Magnifier/MagnifierWidget.h

@@ -14,6 +14,7 @@ class MagnifierWidget final : public GUI::Frame {
 public:
 public:
     virtual ~MagnifierWidget();
     virtual ~MagnifierWidget();
     void set_scale_factor(int scale_factor);
     void set_scale_factor(int scale_factor);
+    void pause_capture(bool pause) { m_pause_capture = pause; }
 
 
 private:
 private:
     MagnifierWidget();
     MagnifierWidget();
@@ -24,4 +25,5 @@ private:
 
 
     int m_scale_factor { 2 };
     int m_scale_factor { 2 };
     RefPtr<Gfx::Bitmap> m_grabbed_bitmap;
     RefPtr<Gfx::Bitmap> m_grabbed_bitmap;
+    bool m_pause_capture { false };
 };
 };

+ 17 - 2
Userland/Applications/Magnifier/main.cpp

@@ -56,24 +56,39 @@ int main(int argc, char** argv)
     auto size_action_group = make<GUI::ActionGroup>();
     auto size_action_group = make<GUI::ActionGroup>();
 
 
     auto two_x_action = GUI::Action::create_checkable(
     auto two_x_action = GUI::Action::create_checkable(
-        "&2x", [&](auto&) {
+        "&2x", { Key_2 }, [&](auto&) {
             magnifier.set_scale_factor(2);
             magnifier.set_scale_factor(2);
         });
         });
 
 
     auto four_x_action = GUI::Action::create_checkable(
     auto four_x_action = GUI::Action::create_checkable(
-        "&4x", [&](auto&) {
+        "&4x", { Key_4 }, [&](auto&) {
             magnifier.set_scale_factor(4);
             magnifier.set_scale_factor(4);
         });
         });
 
 
+    auto eight_x_action = GUI::Action::create_checkable(
+        "&8x", { Key_8 }, [&](auto&) {
+            magnifier.set_scale_factor(8);
+        });
+
+    auto pause_action = GUI::Action::create_checkable(
+        "&Pause Capture", { Key_Space }, [&](auto& action) {
+            magnifier.pause_capture(action.is_checked());
+        });
+
     size_action_group->add_action(two_x_action);
     size_action_group->add_action(two_x_action);
     size_action_group->add_action(four_x_action);
     size_action_group->add_action(four_x_action);
+    size_action_group->add_action(eight_x_action);
     size_action_group->set_exclusive(true);
     size_action_group->set_exclusive(true);
 
 
     auto& view_menu = window->add_menu("&View");
     auto& view_menu = window->add_menu("&View");
     view_menu.add_action(two_x_action);
     view_menu.add_action(two_x_action);
     view_menu.add_action(four_x_action);
     view_menu.add_action(four_x_action);
+    view_menu.add_action(eight_x_action);
     two_x_action->set_checked(true);
     two_x_action->set_checked(true);
 
 
+    view_menu.add_separator();
+    view_menu.add_action(pause_action);
+
     auto& help_menu = window->add_menu("&Help");
     auto& help_menu = window->add_menu("&Help");
     help_menu.add_action(GUI::CommonActions::make_about_action("Magnifier", app_icon, window));
     help_menu.add_action(GUI::CommonActions::make_about_action("Magnifier", app_icon, window));