Skip to content

Commit

Permalink
PixelPaint: Fix layer dragging bug
Browse files Browse the repository at this point in the history
A previous commit I made broke layer dragging since the hole_index
was always being computed with respect to the top of the layer list
widget, however we were now drawing layers from the bottom. When
you didn't have enough layers to fill up the full height, dragging
them around would be weird.

This patch computes the hole index correctly using the same offset
we start drawing from, and fixes the behavior.
  • Loading branch information
mustafaquraish authored and awesomekling committed Sep 6, 2021
1 parent fd895c7 commit 285a888
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
12 changes: 7 additions & 5 deletions Userland/Applications/PixelPaint/LayerListWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,9 @@ size_t LayerListWidget::hole_index_during_move() const
VERIFY(is_moving_gadget());
auto& moving_gadget = m_gadgets[m_moving_gadget_index.value()];
int center_y_of_moving_gadget = moving_gadget.rect.translated(0, moving_gadget.movement_delta.y()).center().y();
return center_y_of_moving_gadget / vertical_step;

int top_of_gadgets = max(0, height() - m_total_gadget_height);
return (center_y_of_moving_gadget - top_of_gadgets) / vertical_step;
}

void LayerListWidget::select_bottom_layer()
Expand Down Expand Up @@ -316,8 +318,8 @@ void LayerListWidget::cycle_through_selection(int delta)

void LayerListWidget::relayout_gadgets()
{
auto total_gadget_height = static_cast<int>(m_gadgets.size()) * vertical_step + 6;
int y = max(0, height() - total_gadget_height);
m_total_gadget_height = static_cast<int>(m_gadgets.size()) * vertical_step + 6;
int y = max(0, height() - m_total_gadget_height);

Optional<size_t> hole_index;
if (is_moving_gadget())
Expand All @@ -334,8 +336,8 @@ void LayerListWidget::relayout_gadgets()
++index;
}

set_content_size({ widget_inner_rect().width(), total_gadget_height });
vertical_scrollbar().set_range(0, max(total_gadget_height - height(), 0));
set_content_size({ widget_inner_rect().width(), m_total_gadget_height });
vertical_scrollbar().set_range(0, max(m_total_gadget_height - height(), 0));
update();
}

Expand Down
1 change: 1 addition & 0 deletions Userland/Applications/PixelPaint/LayerListWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ class LayerListWidget final
Gfx::IntPoint m_moving_event_origin;

size_t m_selected_gadget_index { 0 };
int m_total_gadget_height { 0 };
};

}

0 comments on commit 285a888

Please sign in to comment.