rendered paste body#include "PhotoBox.h"
#include "PhotoStrip.h"
PhotoStrip::PhotoStrip(PhotoBox *pBox)
{
mpBox = pBox;
mdxCurrPhoto = 0;
mNumPhotos = 0;
mpPhotoSurface = NULL;
Uint32 rmask, gmask, bmask, amask;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0x00ff0000;
gmask = 0x0000ff00;
bmask = 0xff000000;
amask = 0x000000ff;
#else
rmask = 0x00ff0000;
gmask = 0x0000ff00;
bmask = 0x000000ff;
amask = 0xff000000;
#endif
_mpTween = new Tween(0.0, 100.0, 700);
}
PhotoStrip::~PhotoStrip()
{
}
bool PhotoStrip::Init()
{
mNumPhotos = GetPhotosFromDir(".\\", mPhotos);
NextPhoto();
return (true);
}
int PhotoStrip::GetPhotosFromDir(std::string fromDir, std::vector<Photo> &resultList)
{
StringList list;
String tmp;
int n_found = 0;
File *p_file = new File(fromDir) ;
list = p_file->getFileList();
// Walk through the found files, and extract
// the .png images.
for (unsigned i = 0; i < list.size(); i++)
{
tmp = list[i];
File p_tmp_file = ".\\" +tmp;
if (p_tmp_file.getExtension() == "png")
{
struct Photo photo;
photo.mFileName = tmp;
photo.mX = 0;
photo.mY = 0;
photo.mWidth = 0;
photo.mHeight = 0;
resultList.push_back(photo);
n_found++;
}
}
return n_found;
}
/**
* Show the next photo in the photo strip.
*/
bool PhotoStrip::NextPhoto()
{
int dx_new = 0;
// No photos..
if (mPhotos.size() <= 0)
return (false);
// First photo
if (mdxCurrPhoto == 0)
dx_new = 0;
// Last photo
if ( mdxCurrPhoto == (mPhotos.size()-1) || mpPhotoSurface == NULL)
dx_new = 0;
else
dx_new = ++mdxCurrPhoto;
mdxCurrPhoto = dx_new;
mCurrPhoto = mPhotos[mdxCurrPhoto];
// Get the photo data (width / height) data is not used..
if (!mpBox->GetPNGImageSize(mCurrPhoto.mFileName.c_str(), &mCurrPhoto.mWidth, &mCurrPhoto.mHeight))
return (false);
if (!LoadCurrPhotoOntoSurface())
return (false);
_mpTween->SetBegin(0);
_mpTween->SetFinish(400);
_mpTween->SetStartTime(this->mpBox->mpTimer->GetTime());
return (true);
}
// Just load the current photo onto the photo surface.
bool PhotoStrip::LoadCurrPhotoOntoSurface()
{
// Here we set the current photo. We need to following DLL files:
// - jpeg.dll
// - libpng12.dll
// - libtiff.dll
// - zlib1.dll
SDL_RWops *rwop;
rwop = SDL_RWFromFile(mCurrPhoto.mFileName.c_str(), "rb");
mpPhotoSurface = IMG_LoadPNG_RW(rwop);
if (!mpPhotoSurface)
{
return (false);
}
return (true);
}
void PhotoStrip::RenderPhoto()
{
if (!mpBox->mpScreen) return ;
// Draw the image to the screen
SDL_Rect dstrect;
//mpPhotoSurface->pixels = mpPhotoPixels;
mCurrPhoto.mX += 2;
int x = mCurrPhoto.mX;
// show message
/*
String msg = "PhotoStrip::RenderPhoto() new x: ";
char buf[10];
itoa(x,buf, 10);
msg.append(buf);
mpBox->Debug(msg);
*/
String msg = "Timer: ";
int time = mpBox->mpTimer->GetTime();
struct TweenInfo ti = _mpTween->TweenLinear(this->mpBox->mpTimer->GetTime());
time = ti.mPos;
char buf[20];
itoa(time, buf, 10);
msg.append(buf);
mpBox->Debug(msg);
// tmp blit whole screen
SDL_Rect rect;
rect.x = 0;
rect.y = 0;
rect.w = 500;
rect.h = 500;
SDL_FillRect(mpBox->mpScreen,&rect, 0x00000000);
// end tmp blit screen.
//dstrect.x = (mpBox->mpScreen->w - mpPhotoSurface->w)/2 + ti.mPos;
dstrect.x = ti.mPos;
dstrect.y = (mpBox->mpScreen->h - mpPhotoSurface->h)/2;
dstrect.w = mpPhotoSurface->w;
dstrect.h = mpPhotoSurface->h;
if ( SDL_BlitSurface(mpPhotoSurface, NULL, mpBox->mpScreen, &dstrect) < 0 ) {
SDL_FreeSurface(mpPhotoSurface);
}
}