mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-18 07:21:09 +00:00
Update Timeline::onPaint() with master branch
This commit is contained in:
parent
49ace2b493
commit
1f0570c81c
@ -1586,93 +1586,88 @@ void Timeline::onPaint(ui::PaintEvent& ev)
|
|||||||
|
|
||||||
// Draw each visible layer.
|
// Draw each visible layer.
|
||||||
DrawCelData data;
|
DrawCelData data;
|
||||||
if (layer >= lastLayer &&
|
for (layer=lastLayer; layer>=firstLayer; --layer) {
|
||||||
layer >= firstLayer) {
|
{
|
||||||
for (layer=lastLayer; layer>=firstLayer; --layer) {
|
IntersectClip clip(g, getLayerHeadersBounds());
|
||||||
ASSERT(layer >= 0 && layer < int(m_rows.size()));
|
if (clip)
|
||||||
|
drawLayer(g, layer);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
IntersectClip clip(g, getCelsBounds());
|
||||||
IntersectClip clip(g, getLayerHeadersBounds());
|
if (!clip)
|
||||||
if (clip)
|
continue;
|
||||||
drawLayer(g, layer);
|
|
||||||
|
Layer* layerPtr = m_rows[layer].layer();
|
||||||
|
if (!layerPtr->isImage()) {
|
||||||
|
// Draw empty cels
|
||||||
|
for (frame=firstFrame; frame<=lastFrame; ++frame) {
|
||||||
|
drawCel(g, layer, frame, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
IntersectClip clip(g, getCelsBounds());
|
// Get the first CelIterator to be drawn (it is the first cel with cel->frame >= first_frame)
|
||||||
if (!clip)
|
LayerImage* layerImagePtr = static_cast<LayerImage*>(layerPtr);
|
||||||
continue;
|
data.begin = layerImagePtr->getCelBegin();
|
||||||
|
data.end = layerImagePtr->getCelEnd();
|
||||||
|
data.it = layerImagePtr->findFirstCelIteratorAfter(firstFrame-1);
|
||||||
|
if (firstFrame > 0 && data.it != data.begin)
|
||||||
|
data.prevIt = data.it-1;
|
||||||
|
else
|
||||||
|
data.prevIt = data.end;
|
||||||
|
data.nextIt = (data.it != data.end ? data.it+1: data.end);
|
||||||
|
|
||||||
Layer* layerPtr = m_rows[layer].layer();
|
// Calculate link range for the active cel
|
||||||
if (!layerPtr->isImage()) {
|
data.firstLink = data.end;
|
||||||
// Draw empty cels
|
data.lastLink = data.end;
|
||||||
for (frame=firstFrame; frame<=lastFrame; ++frame) {
|
|
||||||
drawCel(g, layer, frame, nullptr, nullptr);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the first CelIterator to be drawn (it is the first cel with cel->frame >= first_frame)
|
if (layerPtr == m_layer) {
|
||||||
LayerImage* layerImagePtr = static_cast<LayerImage*>(layerPtr);
|
data.activeIt = layerImagePtr->findCelIterator(m_frame);
|
||||||
data.begin = layerImagePtr->getCelBegin();
|
if (data.activeIt != data.end) {
|
||||||
data.end = layerImagePtr->getCelEnd();
|
data.firstLink = data.activeIt;
|
||||||
data.it = layerImagePtr->findFirstCelIteratorAfter(firstFrame-1);
|
data.lastLink = data.activeIt;
|
||||||
if (firstFrame > 0 && data.it != data.begin)
|
|
||||||
data.prevIt = data.it-1;
|
|
||||||
else
|
|
||||||
data.prevIt = data.end;
|
|
||||||
data.nextIt = (data.it != data.end ? data.it+1: data.end);
|
|
||||||
|
|
||||||
// Calculate link range for the active cel
|
ObjectId imageId = (*data.activeIt)->image()->id();
|
||||||
data.firstLink = data.end;
|
|
||||||
data.lastLink = data.end;
|
|
||||||
|
|
||||||
if (layerPtr == m_layer) {
|
auto it2 = data.activeIt;
|
||||||
data.activeIt = layerImagePtr->findCelIterator(m_frame);
|
if (it2 != data.begin) {
|
||||||
if (data.activeIt != data.end) {
|
do {
|
||||||
data.firstLink = data.activeIt;
|
--it2;
|
||||||
data.lastLink = data.activeIt;
|
|
||||||
|
|
||||||
ObjectId imageId = (*data.activeIt)->image()->id();
|
|
||||||
|
|
||||||
auto it2 = data.activeIt;
|
|
||||||
if (it2 != data.begin) {
|
|
||||||
do {
|
|
||||||
--it2;
|
|
||||||
if ((*it2)->image()->id() == imageId) {
|
|
||||||
data.firstLink = it2;
|
|
||||||
if ((*data.firstLink)->frame() < firstFrame)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (it2 != data.begin);
|
|
||||||
}
|
|
||||||
|
|
||||||
it2 = data.activeIt;
|
|
||||||
while (it2 != data.end) {
|
|
||||||
if ((*it2)->image()->id() == imageId) {
|
if ((*it2)->image()->id() == imageId) {
|
||||||
data.lastLink = it2;
|
data.firstLink = it2;
|
||||||
if ((*data.lastLink)->frame() > lastFrame)
|
if ((*data.firstLink)->frame() < firstFrame)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++it2;
|
} while (it2 != data.begin);
|
||||||
|
}
|
||||||
|
|
||||||
|
it2 = data.activeIt;
|
||||||
|
while (it2 != data.end) {
|
||||||
|
if ((*it2)->image()->id() == imageId) {
|
||||||
|
data.lastLink = it2;
|
||||||
|
if ((*data.lastLink)->frame() > lastFrame)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
++it2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
data.activeIt = data.end;
|
else
|
||||||
|
data.activeIt = data.end;
|
||||||
|
|
||||||
// Draw every visible cel for each layer.
|
// Draw every visible cel for each layer.
|
||||||
for (frame=firstFrame; frame<=lastFrame; ++frame) {
|
for (frame=firstFrame; frame<=lastFrame; ++frame) {
|
||||||
Cel* cel =
|
Cel* cel =
|
||||||
(data.it != data.end &&
|
(data.it != data.end &&
|
||||||
(*data.it)->frame() == frame ? *data.it: nullptr);
|
(*data.it)->frame() == frame ? *data.it: nullptr);
|
||||||
|
|
||||||
drawCel(g, layer, frame, cel, &data);
|
drawCel(g, layer, frame, cel, &data);
|
||||||
|
|
||||||
if (cel) {
|
if (cel) {
|
||||||
data.prevIt = data.it;
|
data.prevIt = data.it;
|
||||||
data.it = data.nextIt; // Point to next cel
|
data.it = data.nextIt; // Point to next cel
|
||||||
if (data.nextIt != data.end)
|
if (data.nextIt != data.end)
|
||||||
++data.nextIt;
|
++data.nextIt;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user