121 lines
3.0 KiB
C++
Executable File
121 lines
3.0 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#include "gui/core/guiControl.h"
|
|
#include "gui/shiny/guiTheoraCtrl.h"
|
|
#include "console/consoleTypes.h"
|
|
#include "dgl/dgl.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
//----------------------------------------------------------------------------
|
|
IMPLEMENT_CONOBJECT(GuiTheoraCtrl);
|
|
|
|
GuiTheoraCtrl::GuiTheoraCtrl()
|
|
{
|
|
mFilename = StringTable->insert("");
|
|
mDone = false;
|
|
mStopOnSleep = false;
|
|
mBackgroundColor.set(0,0,0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
GuiTheoraCtrl::~GuiTheoraCtrl()
|
|
{
|
|
}
|
|
|
|
void GuiTheoraCtrl::initPersistFields()
|
|
{
|
|
Parent::initPersistFields();
|
|
|
|
addGroup("Playback");
|
|
|
|
addField("theoraFile", TypeFilename, Offset(mFilename, GuiTheoraCtrl));
|
|
addField("done", TypeBool, Offset(mDone, GuiTheoraCtrl));
|
|
addField("stopOnSleep", TypeBool, Offset(mStopOnSleep, GuiTheoraCtrl));
|
|
addField("backgroundColor", TypeColorI,Offset(mBackgroundColor, GuiTheoraCtrl));
|
|
|
|
endGroup("Playback");
|
|
}
|
|
|
|
ConsoleMethod( GuiTheoraCtrl, setFile, void, 3, 3, "(string filename) Set an Ogg Theora file to play.")
|
|
{
|
|
object->setFile(argv[2]);
|
|
}
|
|
|
|
ConsoleMethod( GuiTheoraCtrl, stop, void, 2, 2, "() Stop playback.")
|
|
{
|
|
object->stop();
|
|
}
|
|
|
|
ConsoleMethod( GuiTheoraCtrl, getCurrentTime, F32, 2, 2, "() Return the time elapsed in playback, in seconds.")
|
|
{
|
|
return object->getCurrentTime();
|
|
}
|
|
|
|
void GuiTheoraCtrl::setFile(const char* szFilename)
|
|
{
|
|
mDone = false;
|
|
if(szFilename && szFilename[0])
|
|
mTheoraTexture.setFile(szFilename, true);
|
|
}
|
|
|
|
void GuiTheoraCtrl::stop()
|
|
{
|
|
mTheoraTexture.stop();
|
|
mDone = true;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool GuiTheoraCtrl::onWake()
|
|
{
|
|
if (!Parent::onWake()) return false;
|
|
|
|
if(mTheoraTexture.isReady())
|
|
return true;
|
|
|
|
setFile(mFilename);
|
|
|
|
return true;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void GuiTheoraCtrl::onSleep()
|
|
{
|
|
Parent::onSleep();
|
|
|
|
if(mStopOnSleep)
|
|
stop();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void GuiTheoraCtrl::onRender(Point2I offset, const RectI &updateRect)
|
|
{
|
|
const RectI rect(offset, mBounds.extent);
|
|
|
|
if(mTheoraTexture.isReady() && mTheoraTexture.isPlaying())
|
|
{
|
|
mTheoraTexture.refresh();
|
|
dglClearBitmapModulation();
|
|
dglDrawBitmapStretch(mTheoraTexture, rect);
|
|
}
|
|
else
|
|
{
|
|
if(mTheoraTexture.isReady())
|
|
mDone = true;
|
|
|
|
dglDrawRectFill(rect, mBackgroundColor); // black rect
|
|
}
|
|
|
|
renderChildControls(offset, updateRect);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void GuiTheoraCtrl::inspectPostApply()
|
|
{
|
|
stop();
|
|
setFile(mFilename);
|
|
}
|