mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-06 17:06:31 +00:00
Magnifier: Add ability to drag the location when it is locked
This commit is contained in:
parent
9d3debcbbe
commit
f413033a50
|
@ -156,3 +156,29 @@ void MagnifierWidget::second_paint_event(GUI::PaintEvent&)
|
|||
|
||||
m_color_filter->apply(*target, rect, *clone, rect);
|
||||
}
|
||||
|
||||
void MagnifierWidget::mousemove_event(GUI::MouseEvent& event)
|
||||
{
|
||||
if (m_locked_location.has_value() && m_currently_dragging && !m_pause_capture) {
|
||||
auto current_position = event.position();
|
||||
auto difference = current_position - m_last_drag_position;
|
||||
Gfx::IntPoint remainder = { difference.x() % m_scale_factor, difference.y() % m_scale_factor };
|
||||
auto moved_by = difference / m_scale_factor;
|
||||
m_locked_location = m_locked_location.value() - moved_by;
|
||||
m_last_drag_position = current_position - remainder;
|
||||
}
|
||||
}
|
||||
|
||||
void MagnifierWidget::mousedown_event(GUI::MouseEvent& event)
|
||||
{
|
||||
if (event.button() == GUI::MouseButton::Primary && !m_pause_capture) {
|
||||
m_currently_dragging = true;
|
||||
m_last_drag_position = event.position();
|
||||
}
|
||||
}
|
||||
|
||||
void MagnifierWidget::mouseup_event(GUI::MouseEvent& event)
|
||||
{
|
||||
if (event.button() == GUI::MouseButton::Primary)
|
||||
m_currently_dragging = false;
|
||||
}
|
||||
|
|
|
@ -47,6 +47,10 @@ private:
|
|||
virtual void paint_event(GUI::PaintEvent&) override;
|
||||
virtual void second_paint_event(GUI::PaintEvent&) override;
|
||||
|
||||
virtual void mousemove_event(GUI::MouseEvent&) override;
|
||||
virtual void mousedown_event(GUI::MouseEvent&) override;
|
||||
virtual void mouseup_event(GUI::MouseEvent&) override;
|
||||
|
||||
void sync();
|
||||
|
||||
int m_scale_factor { 2 };
|
||||
|
@ -55,6 +59,8 @@ private:
|
|||
CircularQueue<RefPtr<Gfx::Bitmap>, 512> m_grabbed_bitmaps {};
|
||||
ssize_t m_frame_offset_from_head { 0 };
|
||||
bool m_pause_capture { false };
|
||||
bool m_currently_dragging { false };
|
||||
Gfx::IntPoint m_last_drag_position {};
|
||||
Optional<Gfx::IntPoint> m_locked_location {};
|
||||
bool m_show_grid { false };
|
||||
Gfx::Color m_grid_color { 255, 0, 255, 100 };
|
||||
|
|
Loading…
Reference in a new issue