#include "sdlpp_common.hpp" #ifdef _WIN32 #include "SDL2/SDL_image.h" #else #include #endif #include int SDLPP::hex2num( char c ) { if ( c <= '9' ) return c - '0'; switch ( c ) { case 'a': case 'A': return 10; case 'b': case 'B': return 11; case 'c': case 'C': return 12; case 'd': case 'D': return 13; case 'e': case 'E': return 14; default: return 15; } } bool SDLPP::init() { if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl; return false; } if ( IMG_Init( IMG_INIT_PNG ) != IMG_INIT_PNG ) { std::cerr << "SDL_image could not initialize! SDL_image Error: " << IMG_GetError() << std::endl; return false; } if ( TTF_Init() == -1 ) { std::cerr << "SDL_ttf could not initialize! SDL_ttf Error: " << TTF_GetError() << std::endl; return false; } return true; } bool SDLPP::init( uint32_t SDL_OPTIONS ) { if ( SDL_Init( SDL_OPTIONS ) < 0 ) { std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl; return false; } if ( IMG_Init( IMG_INIT_PNG ) != IMG_INIT_PNG ) { std::cerr << "SDL_image could not initialize! SDL_image Error: " << IMG_GetError() << std::endl; return false; } return true; } bool SDLPP::init( uint32_t SDL_OPTIONS, int IMAGE_OPTIONS ) { if ( SDL_Init( SDL_OPTIONS ) < 0 ) { std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl; return false; } if ( IMG_Init( IMAGE_OPTIONS ) != IMAGE_OPTIONS ) { std::cerr << "SDL_image could not initialize! SDL_image Error: " << IMG_GetError() << std::endl; return false; } return true; } std::tuple< int, int, int, int > SDLPP::getColorsHEX( const std::string &color ) { int red = 0, green = 0, blue = 0, alpha = 255; const char *color_ptr = color.c_str(); if ( color_ptr[0] == '#' ) color_ptr++; red = hex2num( color_ptr[0] ) * 16 + hex2num( color_ptr[1] ); green = hex2num( color_ptr[2] ) * 16 + hex2num( color_ptr[3] ); blue = hex2num( color_ptr[4] ) * 16 + hex2num( color_ptr[5] ); if ( color_ptr[6] != '\0' ) alpha = hex2num( color_ptr[6] ) * 16 + hex2num( color_ptr[7] ); return { red, green, blue, alpha }; } SDL_Color SDLPP::getSDLColorTuple( const std::tuple< int, int, int, int > &tuple ) { SDL_Color ret_color{}; ret_color.r = std::get< 0 >( tuple ); ret_color.g = std::get< 1 >( tuple ); ret_color.b = std::get< 2 >( tuple ); ret_color.a = std::get< 3 >( tuple ); return ret_color; } SDL_Color SDLPP::getSDLColorHEX( const std::string &color ) { auto color_tuple = SDLPP::getColorsHEX( color ); return getSDLColorTuple( color_tuple ); } std::tuple< int, int, int, int > SDLPP::getColorsSDLColor( const SDL_Color &color ) { return { color.r, color.g, color.b, color.a }; } bool SDLPP::getSDLEvent( SDL_Event &e ) { if ( SDL_PeepEvents( &e, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT ) == 1 ) { SDL_PeepEvents( &e, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT ); return true; } return false; }