aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/facade/SDLContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/facade/SDLContext.cpp')
-rw-r--r--src/crepe/facade/SDLContext.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index c88687e..a5ccdae 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -21,6 +21,8 @@
#include "../api/Config.h"
#include "../api/Sprite.h"
#include "../util/Log.h"
+#include "api/Text.h"
+#include "facade/Font.h"
#include "manager/Mediator.h"
#include "SDLContext.h"
@@ -32,9 +34,6 @@ using namespace std;
SDLContext::SDLContext(Mediator & mediator) {
dbg_trace();
- if (TTF_Init() == -1) {
- throw runtime_error(format("SDL_ttf initialization failed: {}", TTF_GetError()));
- }
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
throw runtime_error(format("SDLContext: SDL_Init error: {}", SDL_GetError()));
}
@@ -63,6 +62,10 @@ SDLContext::SDLContext(Mediator & mediator) {
throw runtime_error("SDLContext: SDL_image could not initialize!");
}
+ if (TTF_Init() == -1) {
+ throw runtime_error(format("SDL_ttf initialization failed: {}", TTF_GetError()));
+ }
+
mediator.sdl_context = *this;
}
@@ -75,8 +78,8 @@ SDLContext::~SDLContext() {
// TODO: how are we going to ensure that these are called from the same
// thread that SDL_Init() was called on? This has caused problems for me
// before.
- IMG_Quit();
TTF_Quit();
+ IMG_Quit();
SDL_Quit();
}
@@ -283,6 +286,30 @@ void SDLContext::draw(const RenderContext & ctx) {
angle, NULL, render_flip);
}
+
+void SDLContext::draw_text(const Text & text, const Font & font){
+ SDL_Color color {
+ .r = text.data.text_color.r,
+ .g = text.data.text_color.g,
+ .b = text.data.text_color.b,
+ .a = text.data.text_color.a,
+ };
+ SDL_Surface * font_surface = TTF_RenderText_Solid(font.get_font(), text.text.c_str(), color);
+ SDL_Texture * font_texture = SDL_CreateTextureFromSurface(this->game_renderer.get(), font_surface);
+ SDL_FreeSurface(font_surface);
+
+ SDL_Rect dstrect {
+ .x = (int)text.offset.x,
+ .y = (int)text.offset.y,
+ .w = (int)text.dimensions.x,
+ .h = (int)text.dimensions.y,
+ };
+
+ SDL_RenderCopy(this->game_renderer.get(), font_texture, NULL, NULL);
+ SDL_RenderCopyExF(this->game_renderer.get(), font_texture, NULL, NULL, 0 , NULL, SDL_FLIP_NONE);
+ SDL_DestroyTexture(font_texture);
+}
+
void SDLContext::update_camera_view(const Camera & cam, const vec2 & new_pos) {
const Camera::Data & cam_data = cam.data;