mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-24 09:02:31 +00:00
Timeline: Redraw only marching ants on timer tick (fix #1537)
This commit is contained in:
parent
dd3ce20133
commit
147f36077b
@ -209,6 +209,7 @@ Timeline::Timeline()
|
|||||||
, m_confPopup(NULL)
|
, m_confPopup(NULL)
|
||||||
, m_clipboard_timer(100, this)
|
, m_clipboard_timer(100, this)
|
||||||
, m_offset_count(0)
|
, m_offset_count(0)
|
||||||
|
, m_redrawMarchingAntsOnly(false)
|
||||||
, m_scroll(false)
|
, m_scroll(false)
|
||||||
, m_fromTimeline(false)
|
, m_fromTimeline(false)
|
||||||
{
|
{
|
||||||
@ -518,18 +519,23 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
&clipboard_document,
|
&clipboard_document,
|
||||||
&clipboard_range);
|
&clipboard_range);
|
||||||
|
|
||||||
if (isVisible() && m_document && clipboard_document == m_document) {
|
if (isVisible() &&
|
||||||
|
m_document &&
|
||||||
|
m_document == clipboard_document) {
|
||||||
// Set offset to make selection-movement effect
|
// Set offset to make selection-movement effect
|
||||||
if (m_offset_count < 7)
|
if (m_offset_count < 7)
|
||||||
m_offset_count++;
|
m_offset_count++;
|
||||||
else
|
else
|
||||||
m_offset_count = 0;
|
m_offset_count = 0;
|
||||||
|
|
||||||
|
bool redrawOnlyMarchingAnts = getUpdateRegion().isEmpty();
|
||||||
|
invalidateRect(gfx::Rect(getRangeBounds(clipboard_range)).offset(origin()));
|
||||||
|
if (redrawOnlyMarchingAnts)
|
||||||
|
m_redrawMarchingAntsOnly = true;
|
||||||
}
|
}
|
||||||
else if (m_clipboard_timer.isRunning()) {
|
else if (m_clipboard_timer.isRunning()) {
|
||||||
m_clipboard_timer.stop();
|
m_clipboard_timer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1236,6 +1242,12 @@ bool Timeline::onProcessMessage(Message* msg)
|
|||||||
return Widget::onProcessMessage(msg);
|
return Widget::onProcessMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Timeline::onInvalidateRegion(const gfx::Region& region)
|
||||||
|
{
|
||||||
|
Widget::onInvalidateRegion(region);
|
||||||
|
m_redrawMarchingAntsOnly = false;
|
||||||
|
}
|
||||||
|
|
||||||
void Timeline::onSizeHint(SizeHintEvent& ev)
|
void Timeline::onSizeHint(SizeHintEvent& ev)
|
||||||
{
|
{
|
||||||
// This doesn't matter, the AniEditor'll use the entire screen anyway.
|
// This doesn't matter, the AniEditor'll use the entire screen anyway.
|
||||||
@ -1270,6 +1282,12 @@ void Timeline::onPaint(ui::PaintEvent& ev)
|
|||||||
// the background thread is making a backup.
|
// the background thread is making a backup.
|
||||||
const DocumentReader documentReader(m_document, 250);
|
const DocumentReader documentReader(m_document, 250);
|
||||||
|
|
||||||
|
if (m_redrawMarchingAntsOnly) {
|
||||||
|
drawClipboardRange(g);
|
||||||
|
m_redrawMarchingAntsOnly = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
layer_t layer, firstLayer, lastLayer;
|
layer_t layer, firstLayer, lastLayer;
|
||||||
frame_t frame, firstFrame, lastFrame;
|
frame_t frame, firstFrame, lastFrame;
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ namespace app {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool onProcessMessage(ui::Message* msg) override;
|
bool onProcessMessage(ui::Message* msg) override;
|
||||||
|
void onInvalidateRegion(const gfx::Region& region) override;
|
||||||
void onSizeHint(ui::SizeHintEvent& ev) override;
|
void onSizeHint(ui::SizeHintEvent& ev) override;
|
||||||
void onResize(ui::ResizeEvent& ev) override;
|
void onResize(ui::ResizeEvent& ev) override;
|
||||||
void onPaint(ui::PaintEvent& ev) override;
|
void onPaint(ui::PaintEvent& ev) override;
|
||||||
@ -352,6 +353,7 @@ namespace app {
|
|||||||
// TODO merge this with the marching ants of the sprite editor (ui::Editor)
|
// TODO merge this with the marching ants of the sprite editor (ui::Editor)
|
||||||
ui::Timer m_clipboard_timer;
|
ui::Timer m_clipboard_timer;
|
||||||
int m_offset_count;
|
int m_offset_count;
|
||||||
|
bool m_redrawMarchingAntsOnly;
|
||||||
|
|
||||||
bool m_scroll; // True if the drag-and-drop operation is a scroll operation.
|
bool m_scroll; // True if the drag-and-drop operation is a scroll operation.
|
||||||
bool m_copy; // True if the drag-and-drop operation is a copy.
|
bool m_copy; // True if the drag-and-drop operation is a copy.
|
||||||
|
@ -1044,6 +1044,8 @@ void Widget::setTransparent(bool transparent)
|
|||||||
|
|
||||||
void Widget::invalidate()
|
void Widget::invalidate()
|
||||||
{
|
{
|
||||||
|
// TODO we should use invalidateRect(bounds()) here.
|
||||||
|
|
||||||
if (isVisible()) {
|
if (isVisible()) {
|
||||||
m_updateRegion.clear();
|
m_updateRegion.clear();
|
||||||
getDrawableRegion(m_updateRegion, kCutTopWindows);
|
getDrawableRegion(m_updateRegion, kCutTopWindows);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user