mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-06 03:39:51 +00:00
Don't scroll invalid areas in Widget::scrollRegion()
This commit is contained in:
parent
5074ef2d68
commit
199a3db278
@ -1041,17 +1041,25 @@ void Widget::scrollRegion(const Region& region, const Point& delta)
|
||||
if (delta.x == 0 && delta.y == 0)
|
||||
return;
|
||||
|
||||
Region reg2 = region;
|
||||
reg2.offset(delta);
|
||||
reg2.createIntersection(reg2, region);
|
||||
// The movable region includes the given region in the "region"
|
||||
// parameter without the invalid widget region (i.e. m_updateRegion,
|
||||
// as we cannot move invalid/non-updated screen areas), and
|
||||
// intersecting with the moved "region" area (so we don't overlap
|
||||
// regions outside the "region" parameters)
|
||||
Region movable = region;
|
||||
movable.createSubtraction(movable, m_updateRegion);
|
||||
movable.offset(delta);
|
||||
movable.createIntersection(movable, region);
|
||||
|
||||
// Now we invalidate the given "region" without the moved region
|
||||
// ("movable" variable).
|
||||
m_updateRegion.createUnion(m_updateRegion, region);
|
||||
m_updateRegion.createSubtraction(m_updateRegion, reg2);
|
||||
m_updateRegion.createSubtraction(m_updateRegion, movable);
|
||||
mark_dirty_flag(this);
|
||||
|
||||
// Move screen pixels
|
||||
reg2.offset(-delta);
|
||||
ui::move_region(manager(), reg2, delta.x, delta.y);
|
||||
movable.offset(-delta);
|
||||
ui::move_region(manager(), movable, delta.x, delta.y);
|
||||
|
||||
// Generate the kPaintMessage messages for the widget's m_updateRegion
|
||||
flushRedraw();
|
||||
|
Loading…
x
Reference in New Issue
Block a user