#ifndef SDL_HELPERS_H_ #define SDL_HELPERS_H_ #include #include #include #include "json.hpp" extern std::string default_font_name; enum HorizontalAlign { HALIGN_LEFT, HALIGN_CENTER, HALIGN_RIGHT }; NLOHMANN_JSON_SERIALIZE_ENUM(HorizontalAlign, { {HALIGN_LEFT, "left"}, {HALIGN_CENTER, "center"}, {HALIGN_RIGHT, "right"}, }) enum VerticalAlign { VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM }; NLOHMANN_JSON_SERIALIZE_ENUM(VerticalAlign, { {VALIGN_TOP, "top"}, {VALIGN_CENTER, "center"}, {VALIGN_BOTTOM, "bottom"}, }) enum TextFit { FIT_NONE, FIT_SHRINK, FIT_AUTO }; NLOHMANN_JSON_SERIALIZE_ENUM(TextFit, { {FIT_NONE, "none"}, {FIT_SHRINK, "shrink"}, {FIT_AUTO, "auto"}, }) enum ImageResize { RESIZE_NONE, RESIZE_FIT, RESIZE_STRETCH }; NLOHMANN_JSON_SERIALIZE_ENUM(ImageResize, { {RESIZE_NONE, "none"}, {RESIZE_FIT, "fit"}, {RESIZE_STRETCH, "stretch"}, }) // Call this before everything // Prints its messages bool init_sdl(); // Call this at the end only if init has passed void clean_sdl(); // A simple way to get a font pointer to use // Can return NULL TTF_Font* get_font(int size, const std::string& filename = default_font_name); // Returns a rect to use during bliting of 2 surfaces // base - surface on which the other is applied to // applied - the surface which will be applied to the other // hint - rect to hint visible area from applied - can be NULL SDL_Rect surface_align(const SDL_Surface* base, const SDL_Surface* applied, HorizontalAlign halign, VerticalAlign valign, const SDL_Rect* hint = nullptr); // Reads the file and tries to parse a JSON file with comments // cfg - output json struct // filename - filepath to open and read // log - output errors to this ostream, silent if NULL bool read_config_json(nlohmann::json& cfg, const std::string& filename, std::ostream* log = &std::cout); // JSON Extractors - They do not override already set values if key is not present void json_extract(const nlohmann::json& j, const std::string& key, std::string& out); void json_extract(const nlohmann::json& j, const std::string& key, int& out); void json_extract(const nlohmann::json& j, const std::string& key, bool& out); void json_extract(const nlohmann::json& j, const std::string& key, HorizontalAlign& out); void json_extract(const nlohmann::json& j, const std::string& key, VerticalAlign& out); void json_extract(const nlohmann::json& j, const std::string& key, TextFit& out); void json_extract(const nlohmann::json& j, const std::string& key, SDL_Color& out); void json_extract(const nlohmann::json& j, const std::string& key, Uint8& out); void json_extract(const nlohmann::json& j, const std::string& key, ImageResize& out); #endif // SDL_HELPERS_H_