qt/AnimationBuilder/Animation.cpp
2013-01-19 20:12:40 +00:00

164 lines
3.3 KiB
C++

#include "Animation.h"
#include "mainwindow.h"
TAnimation::TAnimation(QObject *parent)
: QObject(parent)
{
}
void TAnimation::SetMainWindow(MainWindow* window)
{
Window = window;
}
void TAnimation::AddFrame(const TFrame& frame)
{
FrameList.push_back(frame);
}
TFrame& TAnimation::GetFrame(int i)
{
return FrameList[i];
}
size_t TAnimation::GetFrameCount()
{
return FrameList.size();
}
int TAnimation::GetMaxWidth()
{
int r = FrameList[0].Pixmap->width() + FrameList[0].ShiftX;
for (size_t i = 1; i < FrameList.size(); i++)
{
if (r < FrameList[i].Pixmap->width() + FrameList[i].ShiftX)
{
r = FrameList[i].Pixmap->width() + FrameList[i].ShiftX;
}
}
return r;
}
int TAnimation::GetMaxHeight()
{
int r = FrameList[0].Pixmap->height() + FrameList[0].ShiftY;
for (size_t i = 1; i < FrameList.size(); i++)
{
if (r < FrameList[i].Pixmap->height() + FrameList[i].ShiftY)
{
r = FrameList[i].Pixmap->height() + FrameList[i].ShiftY;
}
}
return r;
}
void TAnimation::FillSheet(boost::shared_ptr<QPixmap> sheetPixmap, std::vector<TFrameData>& frameDataArr)
{
int maxFrameWidth = GetMaxWidth();
int maxFrameHeight = GetMaxHeight();
int cursorX = 0;
int cursorY = 0;
QPainter p;
p.begin(&(*sheetPixmap));
for (size_t i=0; i<FrameList.size(); i++)
{
int shiftX = FrameList[i].ShiftX;
int shiftY = FrameList[i].ShiftY;
TFrameData frameData;
frameData.TexCoordFromX = static_cast<float>(cursorX) / sheetPixmap->width();
frameData.TexCoordFromY = 1.f - static_cast<float>(cursorY + maxFrameHeight) / sheetPixmap->height();
frameData.TexCoordToX = static_cast<float>(cursorX + maxFrameWidth) / sheetPixmap->width();
frameData.TexCoordToY = 1.f - static_cast<float>(cursorY) / sheetPixmap->height();
frameData.TimeToPlay = FrameList[i].TimeToPlay;
frameDataArr.push_back(frameData);
QPixmap& pixmapToDraw = *(FrameList[i].Pixmap);
p.drawPixmap(cursorX + shiftX, cursorY + shiftY, pixmapToDraw);
cursorX += maxFrameWidth;
if (cursorX + maxFrameWidth >= sheetPixmap->width())
{
cursorX = 0;
cursorY += maxFrameHeight;
}
}
p.end();
}
void TAnimation::LoadFrame()
{
QFileDialog dialog(Window);
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setNameFilter("PNG images (*.png)");
if (dialog.exec())
{
QStringList fileNames = dialog.selectedFiles();
for (int i = 0; i < fileNames.count(); i++)
{
boost::shared_ptr<QPixmap> pixmap(new QPixmap(fileNames[i], "PNG"));
QFileInfo q;
q.setFile(fileNames[i]);
QString fn = q.fileName();
std::string fileName = fn.toUtf8().constData();
AddFrame(TFrame(pixmap, 0, fileName));
Window->LoadFrame(fileName);
}
//FontFileName = (dialog.selectedFiles())[0];
//emit SetFontNameTextSignal(FontFileName);
//LoadFontFile();
}
}