/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #include #include "fastevents.h" #include "Backend.hh" #include "Error.hh" #include "Log.hh" namespace Mf { struct Impl { static Error error; static int retainCount; }; Error Impl::error(Error::UNINITIALIZED); int Impl::retainCount = 0; Backend::Backend() { if (Impl::retainCount++ == 0) { #if defined(_WIN32) if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) #else if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTTHREAD) != 0) #endif { const char* error = SDL_GetError(); Impl::error.init(Error::SDL_INIT, error); return; // fatal } else { char name[128]; SDL_VideoDriverName(name, sizeof(name)); logInfo << "initialized SDL; using video driver `" << name << "'" << std::endl; } if (FE_Init() != 0) { const char* error = FE_GetError(); Impl::error.init(Error::FASTEVENTS_INIT, error); return; // fatal } Impl::error.init(Error::NONE); } } Backend::Backend(const Backend& backend) { ++Impl::retainCount; } Backend::~Backend() { if (--Impl::retainCount == 0) { FE_Quit(); SDL_Quit(); Impl::error.reset(); } } bool Backend::isInitialized() { return Impl::error.code() == Error::NONE; } const Error& Backend::getError() { return Impl::error; } } // namespace Mf