mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-11 09:40:42 +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)
|
if (delta.x == 0 && delta.y == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Region reg2 = region;
|
// The movable region includes the given region in the "region"
|
||||||
reg2.offset(delta);
|
// parameter without the invalid widget region (i.e. m_updateRegion,
|
||||||
reg2.createIntersection(reg2, region);
|
// 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.createUnion(m_updateRegion, region);
|
||||||
m_updateRegion.createSubtraction(m_updateRegion, reg2);
|
m_updateRegion.createSubtraction(m_updateRegion, movable);
|
||||||
mark_dirty_flag(this);
|
mark_dirty_flag(this);
|
||||||
|
|
||||||
// Move screen pixels
|
// Move screen pixels
|
||||||
reg2.offset(-delta);
|
movable.offset(-delta);
|
||||||
ui::move_region(manager(), reg2, delta.x, delta.y);
|
ui::move_region(manager(), movable, delta.x, delta.y);
|
||||||
|
|
||||||
// Generate the kPaintMessage messages for the widget's m_updateRegion
|
// Generate the kPaintMessage messages for the widget's m_updateRegion
|
||||||
flushRedraw();
|
flushRedraw();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user