void AnimePlayer::run() { vector<IImageProvider*>::iterator i; IImageProvider* provider; ISurface* surface; if (anime != NULL) { while (running) { i = anime->begin(); while (i != anime->end()) { provider = *i; surface = prepareSurface(provider); if (win != NULL) { win->renderFrom(surface); } delete surface; surface = NULL; ::usleep(dur); ++i; if (!running) { unlockConditionSatisfied(); return; } } } } unlockConditionSatisfied(); }
//todo draw only rectangle void Panel::draw(SDL_Surface *dst){ prepareSurface(); guiPtr->blit(surf, surfMerged, 0, 0); list<Widget>::iterator i; for ( i = wlist.begin(); i != wlist.end(); i++ ) (*i).draw(surfMerged); guiPtr->blit(surfMerged, dst, 0, 0); }
// get transformed image for specified slide // if it does not exist, create it and place it in the cache QImage* PictureFlowPrivate::surface(int slideIndex) { if(slideIndex < 0) return 0; if(slideIndex >= slideImages.count()) return 0; if(surfaceCache.contains(slideIndex)) return surfaceCache[slideIndex]; QImage img = widget->slide(slideIndex); if(img.isNull()) { if(blankSurface.isNull()) { blankSurface = QImage(slideWidth, slideHeight, QImage::Format_RGB32); QPainter painter(&blankSurface); QPoint p1(slideWidth*4/10, 0); QPoint p2(slideWidth*6/10, slideHeight); QLinearGradient linearGrad(p1, p2); linearGrad.setColorAt(0, Qt::black); linearGrad.setColorAt(1, Qt::white); painter.setBrush(linearGrad); painter.fillRect(0, 0, slideWidth, slideHeight, QBrush(linearGrad)); painter.setPen(QPen(QColor(64,64,64), 4)); painter.setBrush(QBrush()); painter.drawRect(2, 2, slideWidth-3, slideHeight-3); painter.end(); blankSurface = prepareSurface(blankSurface, slideWidth, slideHeight); } return &blankSurface; } surfaceCache.insert(slideIndex, new QImage(prepareSurface(img, slideWidth, slideHeight))); return surfaceCache[slideIndex]; }
void FlashPlayerWidget::resizeEvent( QResizeEvent* event ) { prepareSurface(); }