#include "janela.h"
Janela::Janela(int fps, int flags, std::string titulo, int largura, int altura, int bpp, bool telacheia)
{
espera = 1000/fps;
this->flags = flags;
aberta = false;
capturarmouse = true;
capturarteclado = true;
if(SDL_Init(flags) == -1)
{
this->erro = SDL_GetError();
throw (Erro("Não foi possível inicializar os subsistemas da SDL."));
}
this->largura = largura;
this->altura = altura;
this->bpp = bpp;
this->telacheia = telacheia;
///Configurando as flags para criar a janela
int f = SDL_HWPALETTE;
if(telacheia)
f |= SDL_FULLSCREEN;
const SDL_VideoInfo* video = SDL_GetVideoInfo();
if(video->hw_available)
f |= SDL_HWSURFACE;
else
f |= SDL_SWSURFACE;
if(video->blit_hw)
f |= SDL_HWACCEL;
///
janela = SDL_SetVideoMode(largura, altura, bpp, f);
if(janela == NULL)
{
erro = SDL_GetError();
throw (Erro("Não foi possível criar a janela."));
}
SDL_WM_SetCaption(titulo.c_str(), NULL);
aberta = true;
}
void Janela::Iniciar()
{
this->AoIniciar();
int atraso=0;//tempo de atraso a cada quadro
///Loop Principal que mantém a janela aberta
while(aberta)
{
int t_inicial = SDL_GetTicks();
while(atraso > espera)
{
Logica();
atraso -= espera;
}
Logica();
Desenhar();
int t_final = SDL_GetTicks();
int t_total = t_final - t_inicial;
if(t_total <= espera)
SDL_Delay(espera - t_total);
else
atraso += t_total - espera;
}
}
void Janela::CapturarMouse(bool ativar)
{
capturarmouse = ativar;
}
void Janela::CapturarTeclado(bool ativar)
{
capturarteclado = ativar;
}
std::string Janela::UltimoErro()
{
return erro;
}
void Janela::Eventos()
{
SDL_Event eventos;
if(SDL_PollEvent(&eventos))
{
switch(eventos.type)
{
case SDL_QUIT:
AoSair();
break;
case SDL_KEYDOWN:
if(capturarteclado)
AoPressionarTecla(eventos.key.keysym.sym);
break;
case SDL_KEYUP:
if(capturarteclado)
AoLiberarTecla(eventos.key.keysym.sym);
break;
case SDL_MOUSEBUTTONDOWN:
if(capturarmouse)
AoUsarMouse(eventos.button);
break;
case SDL_MOUSEBUTTONUP:
if(capturarmouse)
AoLiberarMouse(eventos.button);
break;
}
}
}
Janela::~Janela()
{
SDL_FreeSurface(janela);
}