Code refactored into different files.

This commit is contained in:
King_DuckZ 2014-02-08 23:11:26 +01:00
parent 26c50fe1d0
commit 2429229a95
8 changed files with 217 additions and 46 deletions

74
src/sdlmain.cpp Normal file
View file

@ -0,0 +1,74 @@
#include "sdlmain.hpp"
#include <SDL2/SDL.h>
namespace cloonel {
struct SDLMain::LocalData {
SDL_Window* window;
SDL_Renderer* renderer;
bool initialized;
};
///------------------------------------------------------------------------
///------------------------------------------------------------------------
SDLMain::SDLMain (const char* parGameName, int parWidth, int parHeight) :
m_gameName(parGameName),
m_defWidth(parWidth),
m_defHeight(parHeight)
{
}
///------------------------------------------------------------------------
///------------------------------------------------------------------------
SDLMain::~SDLMain() noexcept {
ClearIFN(*m_localData);
}
///------------------------------------------------------------------------
///------------------------------------------------------------------------
void SDLMain::Init() {
if (not m_localData->initialized)
InitSDL(*m_localData);
}
///------------------------------------------------------------------------
///------------------------------------------------------------------------
void SDLMain::InitSDL (LocalData& parInitSDL) {
parInitSDL.window = nullptr;
parInitSDL.renderer = nullptr;
parInitSDL.initialized = false;
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
throw std::runtime_error(SDL_GetError());
parInitSDL.initialized = true;
SDL_Window* const win = SDL_CreateWindow(m_gameName.c_str(), 100, 100, m_defWidth, m_defHeight, SDL_WINDOW_SHOWN);
if (!win)
throw std::runtime_error(SDL_GetError());
parInitSDL.window = win;
SDL_Renderer* const renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!renderer)
throw std::runtime_error(SDL_GetError());
parInitSDL.renderer = renderer;
}
///------------------------------------------------------------------------
///------------------------------------------------------------------------
void SDLMain::ClearIFN (LocalData& parInitSDL) noexcept {
if (parInitSDL.renderer)
SDL_DestroyRenderer(parInitSDL.renderer);
if (parInitSDL.window)
SDL_DestroyWindow(parInitSDL.window);
if (parInitSDL.initialized)
SDL_Quit();
}
///------------------------------------------------------------------------
///------------------------------------------------------------------------
SDL_Renderer* SDLMain::GetRenderer() {
if (m_localData->initialized)
return m_localData->renderer;
else
return nullptr;
}
} //namespace cloonel