void Timeline::Render(QPainter& painter) { std::vector<QImage*> onions; for (size_t i = 0; i < mLayers.size(); ++i) { Layer* layer = mLayers[i]; if (!layer->IsEnabled()) { continue; } if (layer->GetType() == LayerTypeRaster) { QImage* img = mLayers[i]->GetImage(mFrameIndex); if (img) { if (mEditor->IsOnionEnabled() && mLayerIndex == (int)i) { if (layer->GetType() == LayerTypeRaster && layer->IsOnionEnabled()) { RasterLayer* l = (RasterLayer*)mLayers[i]; QImage* prev = l->GetImage(l->GetPrevImageIndex(mFrameIndex)); if(prev && prev != img) { onions.push_back(prev); } QImage* next = l->GetImage(l->GetNextImageIndex(mFrameIndex)); if(next && next != img) { onions.push_back(next); } } } painter.setOpacity(layer->GetOpacity() / 255.0f); painter.drawImage(0, 0, *img); } } else if (layer->GetType() == LayerTypeTrace) { TraceLayer* tl = (TraceLayer*)layer; tl->Render(painter); } } painter.setOpacity(0.25f); for (size_t i = 0; i < onions.size(); ++i) { painter.drawImage(0, 0, *onions[i]); } }
void Timeline::UpdateCanvas() { std::vector<QImage*> layerImages; std::vector<QImage*> onions; QImage* editImage = NULL; for (size_t i = 0; i < mLayers.size(); ++i) { if (!mLayers[i]->IsEnabled()) { continue; } QImage* img = mLayers[i]->GetImage(mFrameIndex); if (img) { if (mLayerIndex == i) { if (mLayers[i]->GetType() == LayerTypeRaster) { RasterLayer* l = (RasterLayer*)mLayers[i]; QImage* prev = l->GetImage(l->GetPrevImageIndex(mFrameIndex)); if(prev && prev != img) { onions.push_back(prev); } QImage* next = l->GetImage(l->GetNextImageIndex(mFrameIndex)); if(next && next != img) { onions.push_back(next); } } editImage = img; } layerImages.push_back(img); } } mEditor->Load(editImage); update(); }