Files
Aerofoil/PortabilityLayer/QDManager.cpp

101 lines
1.9 KiB
C++
Raw Permalink Normal View History

#include "QDManager.h"
#include "MemoryManager.h"
#include "PLCore.h"
#include "PLQDOffscreen.h"
#include "QDGraf.h"
#include "QDState.h"
#include <assert.h>
namespace PortabilityLayer
{
class QDManagerImpl final : public QDManager
{
public:
QDManagerImpl();
void Init() override;
2019-12-27 18:05:32 -05:00
QDPort *GetPort() const override;
void SetPort(QDPort *gw) override;
2019-12-30 20:53:11 -05:00
PLError_t NewGWorld(DrawSurface **gw, GpPixelFormat_t pixelFormat, const Rect &bounds, ColorTable **colorTable) override;
void DisposeGWorld(DrawSurface *gw) override;
QDState *GetState() override;
static QDManagerImpl *GetInstance();
private:
QDPort *m_port;
static QDManagerImpl ms_instance;
};
QDManagerImpl::QDManagerImpl()
: m_port(nullptr)
{
}
void QDManagerImpl::Init()
{
}
2019-12-27 18:05:32 -05:00
QDPort *QDManagerImpl::GetPort() const
{
2019-12-27 18:05:32 -05:00
return m_port;
}
2019-12-27 18:05:32 -05:00
void QDManagerImpl::SetPort(QDPort *gw)
{
#if GP_DEBUG_CONFIG
if (gw)
gw->CheckPortSentinel();
#endif
m_port = gw;
}
2019-12-30 20:53:11 -05:00
PLError_t QDManagerImpl::NewGWorld(DrawSurface **gw, GpPixelFormat_t pixelFormat, const Rect &bounds, ColorTable **colorTable)
{
2019-12-30 20:53:11 -05:00
void *grafStorage = MemoryManager::GetInstance()->Alloc(sizeof(DrawSurface));
if (!grafStorage)
2019-12-29 06:38:18 -05:00
return PLErrors::kOutOfMemory;
if (!bounds.IsValid())
2019-12-29 06:38:18 -05:00
return PLErrors::kInvalidParameter;
2019-12-30 20:53:11 -05:00
DrawSurface *graf = new (grafStorage) DrawSurface();
2019-12-29 06:38:18 -05:00
PLError_t initError = graf->Init(bounds, pixelFormat);
if (initError)
{
DisposeGWorld(graf);
return initError;
}
*gw = graf;
2019-12-29 06:38:18 -05:00
return PLErrors::kNone;
}
2019-12-30 20:53:11 -05:00
void QDManagerImpl::DisposeGWorld(DrawSurface *gw)
2019-12-24 02:35:24 -05:00
{
2019-12-30 20:53:11 -05:00
gw->~DrawSurface();
2019-12-24 02:35:24 -05:00
MemoryManager::GetInstance()->Release(gw);
}
QDState *QDManagerImpl::GetState()
{
return m_port->GetState();
}
QDManagerImpl *QDManagerImpl::GetInstance()
{
return &ms_instance;
}
QDManagerImpl QDManagerImpl::ms_instance;
QDManager *QDManager::GetInstance()
{
return QDManagerImpl::GetInstance();
}
}