From 007fe1ecb5e9f76539cdffd6a96afe22c8b2d214 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 11 Dec 2024 18:21:03 +0100
Subject: save

---
 src/crepe/facade/Font.cpp | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 src/crepe/facade/Font.cpp

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
new file mode 100644
index 0000000..2ad176a
--- /dev/null
+++ b/src/crepe/facade/Font.cpp
@@ -0,0 +1,24 @@
+#include "font.h"
+#include "../api/Config.h"
+using namespace std;
+using namespace crepe;
+
+void Font::load(unique_ptr<Asset> res){
+	const char* font_path = res->get_path();
+	int font_size = Config::get_instance().font.font_size;
+    this->font = std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)>(
+        TTF_OpenFont(font_path, font_size), &TTF_CloseFont); 
+
+    if (!font) {
+        throw std::runtime_error("Failed to load font: " + std::string(TTF_GetError()));
+    }
+}
+Font::Font(const char* src){
+	this->load(make_unique<Asset>(src));
+}
+Font::Font(std::unique_ptr<Asset> res){
+	this->load(std::move(res));
+}
+const TTF_Font& Font::get_font() const{
+	return this->font;
+}
-- 
cgit v1.2.3


From e75e355c3a59d53a1d64fd8fae3331b2234083e2 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Wed, 11 Dec 2024 22:17:43 +0100
Subject: text component pretty much finished

---
 src/crepe/api/CMakeLists.txt        |  2 ++
 src/crepe/api/Config.h              |  4 ++--
 src/crepe/api/Text.cpp              |  6 ++++++
 src/crepe/api/Text.h                |  8 ++++----
 src/crepe/facade/Font.cpp           | 10 +++++++---
 src/crepe/facade/Font.h             | 12 ++++++------
 src/crepe/facade/SDLFontContext.cpp | 11 +++++------
 src/crepe/facade/SDLFontContext.h   |  8 ++++++++
 src/example/loadfont.cpp            | 23 +++++++++++++++++------
 9 files changed, 57 insertions(+), 27 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/CMakeLists.txt b/src/crepe/api/CMakeLists.txt
index fb11c8d..90e4d1f 100644
--- a/src/crepe/api/CMakeLists.txt
+++ b/src/crepe/api/CMakeLists.txt
@@ -20,6 +20,7 @@ target_sources(crepe PUBLIC
 	Button.cpp
 	UIObject.cpp
 	AI.cpp
+	Text.cpp
 )
 
 target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -49,4 +50,5 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
 	Button.h
 	UIObject.h
 	AI.h
+	Text.h
 )
diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h
index def4c49..159be99 100644
--- a/src/crepe/api/Config.h
+++ b/src/crepe/api/Config.h
@@ -81,11 +81,11 @@ struct Config final {
 		/**
 		 * \brief Default font size
 		 *
-		 * using the SDL_ttf library the font size needs to be set when loading the font. 
+		 * Using the SDL_ttf library the font size needs to be set when loading the font. 
 		 * This config option is the font size at which all fonts will be loaded initially.
 		 * 
 		 */
-		int font_size = 16;
+		unsigned int size = 16;
 	} font;
 
 	//! Audio system settings
diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index e69de29..dd44dd9 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -0,0 +1,6 @@
+#include "Text.h"
+
+using namespace crepe;
+
+Text::Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset, const Asset & font) : UIObject(id,dimensions,offset),source(font){}
+
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index 9dd275b..d5f47fa 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -11,11 +11,11 @@
 namespace crepe{
 class Text : public UIObject{
 public:
-	Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset, const Asset & font, int font_size);
+	Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset, const Asset & font);
 
 	//! Label text.
 	std::string text;
-	//! Label text color
+	//! Label text color.
 	Color text_color = Color::BLACK;
 	/**
 	 *  \brief fontsize for text rendering
@@ -26,8 +26,8 @@ public:
 	 * The default font size that is loaded is set in the Config.
 	 * Instead this value is used to upscale the font texture which can cause blurring or distorted text when upscaling or downscaling too much.
 	 */
-	int font_size = 16;
-
+	unsigned int font_size = 16;
+	//! Font asset
 	const Asset source;
 private:
 };
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 2ad176a..b600b01 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -1,24 +1,28 @@
-#include "font.h"
 #include "../api/Config.h"
+
+#include "font.h"
+
 using namespace std;
 using namespace crepe;
 
 void Font::load(unique_ptr<Asset> res){
 	const char* font_path = res->get_path();
-	int font_size = Config::get_instance().font.font_size;
     this->font = std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)>(
-        TTF_OpenFont(font_path, font_size), &TTF_CloseFont); 
+        TTF_OpenFont(font_path, this->default_font_size), &TTF_CloseFont); 
 
     if (!font) {
         throw std::runtime_error("Failed to load font: " + std::string(TTF_GetError()));
     }
 }
+
 Font::Font(const char* src){
 	this->load(make_unique<Asset>(src));
 }
+
 Font::Font(std::unique_ptr<Asset> res){
 	this->load(std::move(res));
 }
+
 const TTF_Font& Font::get_font() const{
 	return this->font;
 }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index e34ac63..8bf9fc9 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -9,17 +9,17 @@
 namespace crepe {
 
 /**
- * \brief Font resource facade
+ * \brief Resource for managing font creation and destruction
  *
  * This class is a wrapper around an SDL_ttf font instance, encapsulating font loading and usage.
  */
 class Font : public Resource{
 public:
-    /**.
-	 * \param src Asset with texture data to load.
-	 * \param mediator use the SDLContext reference to load the image
+    /**
+	 * \param src Asset with font data to load.
+	 * \param mediator use the SDLContext reference to load text
 	 */
-    Font(const Asset & src, Mediator & mediator);
+    Font( src, Mediator & mediator);
 
 
     ~Font() = default
@@ -27,7 +27,7 @@ public:
 private:
 	//! The SDL_ttf font object with custom deleter.
     std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)> font;
-	int default_font_size = Config::get_instance().font.font_size;
+	unsigned int default_font_size = Config::get_instance().font.size;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLFontContext.cpp b/src/crepe/facade/SDLFontContext.cpp
index a4be143..d7a0bff 100644
--- a/src/crepe/facade/SDLFontContext.cpp
+++ b/src/crepe/facade/SDLFontContext.cpp
@@ -7,16 +7,16 @@ using namespace crepe;
 using namespace std;
 
 SDLFontContext::SDLFontContext(){
-	
+	if (!FcInit()) {
+            throw std::runtime_error("Failed to initialize Fontconfig.");
+    }
 }
 
 SDLFontContext::~SDLFontContext(){
-	
+		FcFini();
 }
 unique_ptr<Asset> SDLFontContext::get_font_asset(const std::string & font_family) {
-	if (!FcInit()) {
-            throw std::runtime_error("Failed to initialize Fontconfig.");
-    }
+	
     // Create a pattern to search for the font family
     FcPattern* pattern = FcNameParse(reinterpret_cast<const FcChar8*>(font_family.c_str()));
     if (!pattern) {
@@ -49,6 +49,5 @@ unique_ptr<Asset> SDLFontContext::get_font_asset(const std::string & font_family
     // Convert the file path to a std::string
     std::string font_file_path(reinterpret_cast<const char*>(file_path));
     FcPatternDestroy(matched_pattern);
-	FcFini();
     return std::move(make_unique<Asset>(font_file_path));
 }
diff --git a/src/crepe/facade/SDLFontContext.h b/src/crepe/facade/SDLFontContext.h
index cd91383..c890b2d 100644
--- a/src/crepe/facade/SDLFontContext.h
+++ b/src/crepe/facade/SDLFontContext.h
@@ -11,6 +11,14 @@ namespace crepe {
 	public:
 		SDLFontContext();
 		~SDLFontContext();
+		/**
+		 * 
+		 * \brief Facade function to convert a font_family into an asset.
+		 * 
+		 * This function uses the FontConfig library to convert a font family name (Arial, Inter, Helvetica) and converts it to the font source path.
+		 * 
+		 * \param font_family Name of the font family name.
+		 */
 		std::unique_ptr<Asset> get_font_asset(const std::string & font_family);
 	private:
 	};
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 8931ce3..0002026 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -1,13 +1,24 @@
 #include <iostream>
+#include <exception>
 #include <memory>
-
 #include <crepe/facade/SDLFontContext.h>
+#include <crepe/api/Text.h>
 
 using namespace crepe;
 
-int main(){
-	SDLFontContext font_facade;
-	std::unique_ptr<Asset> asset = font_facade.get_font_asset("OpenSymbol");
-	std::cout << "path: " << asset->get_path() << std::endl;
-	return 0;
+int main() {
+    SDLFontContext font_facade;
+
+    // Create a unique pointer to the font asset
+    std::unique_ptr<Asset> asset = font_facade.get_font_asset("OpenSymbol");
+    std::cout << "path: " << asset->get_path() << std::endl;
+	try{
+		  // Correct way to create a unique pointer for Text
+    std::unique_ptr<Text> label = std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), *asset);
+	}catch (const std::exception& e) {
+    std::cout << "Standard exception thrown: " << e.what() << std::endl;
+	}
+  
+
+    return 0;
 }
-- 
cgit v1.2.3


From 431d7cceb25db86f31a8c89440f3cdd2c7bf061f Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 20:45:49 +0100
Subject: load font almost working

---
 src/crepe/api/Text.cpp          |   2 +-
 src/crepe/api/Text.h            |  49 ++++++----
 src/crepe/facade/Font.cpp       |   4 +-
 src/crepe/facade/Font.h         |  15 +--
 src/crepe/facade/SDLContext.cpp | 202 ++++++++++++++++++++++++++--------------
 src/example/loadfont.cpp        |  13 +--
 6 files changed, 181 insertions(+), 104 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index dd44dd9..12d01f1 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -2,5 +2,5 @@
 
 using namespace crepe;
 
-Text::Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset, const Asset & font) : UIObject(id,dimensions,offset),source(font){}
+Text::Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset,std::string text,std::string font_family) : UIObject(id,dimensions,offset),text(text), font_family(font_family){}
 
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index d5f47fa..51bab98 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -9,27 +9,42 @@
 #include "UIObject.h"
 
 namespace crepe{
+
+/**
+ * \brief Text UIObject component for displaying text
+ * 
+ * This class can be used to display text on screen. By setting the font_family to a font already stored on the current device it will automatically be loaded in.
+ */
 class Text : public UIObject{
 public:
-	Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset, const Asset & font);
+	Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset,std::string text,std::string font_family);
+	//! Text data that does not have to be set in the constructor
+	struct Data {
+		//! Label text color.
+		Color text_color = Color::BLACK;
+		/**
+		 *  \brief fontsize for text rendering
+		 * 
+		 * \note this is not the actual font size that is loaded in.
+		 * 
+		 * Since SDL_TTF requires the font size when loading in the font it is not possible to switch the font size.
+		 * The default font size that is loaded is set in the Config.
+		 * Instead this value is used to upscale the font texture which can cause blurring or distorted text when upscaling or downscaling too much.
+		 */
+		unsigned int font_size = 16;
+		//! Layer sorting level of the text
+		const int sorting_in_layer = 0;
 
+		//! Order within the sorting text
+		const int order_in_layer = 0;
+	};
+public:
+	//! font family name such as (Arial,Helvetica,Inter)
+	std::string font_family = "";
 	//! Label text.
-	std::string text;
-	//! Label text color.
-	Color text_color = Color::BLACK;
-	/**
-	 *  \brief fontsize for text rendering
-	 * 
-	 * \note this is not the actual font size that is loaded in.
-	 * 
-	 * Since SDL_TTF requires the font size when loading in the font it is not possible to switch the font size.
-	 * The default font size that is loaded is set in the Config.
-	 * Instead this value is used to upscale the font texture which can cause blurring or distorted text when upscaling or downscaling too much.
-	 */
-	unsigned int font_size = 16;
-	//! Font asset
-	const Asset source;
-private:
+	std::string text = "";
+	// Data instance for data not gotten from constructor
+	Data data;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index b600b01..66835ee 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -23,6 +23,6 @@ Font::Font(std::unique_ptr<Asset> res){
 	this->load(std::move(res));
 }
 
-const TTF_Font& Font::get_font() const{
-	return this->font;
+TTF_Font* Font::get_font() const{
+	return this->font.get();
 }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index 8bf9fc9..dd1cebf 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -17,17 +17,20 @@ class Font : public Resource{
 public:
     /**
 	 * \param src Asset with font data to load.
-	 * \param mediator use the SDLContext reference to load text
+	 * \param mediator use the SDLContext reference to get_font()
 	 */
-    Font( src, Mediator & mediator);
+    Font(const Asset & src, Mediator & mediator);
 
-
-    ~Font() = default
-	const TTF_Font& get_font() const;
+	/**
+	 * \brief getter for TTF_Font
+	 * 
+	 * \param src Asset with font data to load.
+	 * \param mediator use the SDLContext reference to get_font()
+	 */
+	TTF_Font* get_font() const;
 private:
 	//! The SDL_ttf font object with custom deleter.
     std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)> font;
-	unsigned int default_font_size = Config::get_instance().font.size;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index d71a9c8..8f6c02c 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -18,18 +18,23 @@
 #include "../api/Color.h"
 #include "../api/Config.h"
 #include "../api/Sprite.h"
+#include "../api/Texture.h"
 #include "../util/Log.h"
-#include "manager/Mediator.h"
 
 #include "SDLContext.h"
-#include "Texture.h"
 #include "types.h"
 
 using namespace crepe;
 using namespace std;
 
-SDLContext::SDLContext(Mediator & mediator) {
+SDLContext & SDLContext::get_instance() {
+	static SDLContext instance;
+	return instance;
+}
+
+SDLContext::SDLContext() {
 	dbg_trace();
+
 	if (SDL_Init(SDL_INIT_VIDEO) != 0) {
 		throw runtime_error(format("SDLContext: SDL_Init error: {}", SDL_GetError()));
 	}
@@ -57,8 +62,6 @@ SDLContext::SDLContext(Mediator & mediator) {
 	if (!(IMG_Init(img_flags) & img_flags)) {
 		throw runtime_error("SDLContext: SDL_image could not initialize!");
 	}
-
-	mediator.sdl_context = *this;
 }
 
 SDLContext::~SDLContext() {
@@ -74,11 +77,12 @@ SDLContext::~SDLContext() {
 	SDL_Quit();
 }
 
-Keycode SDLContext::sdl_to_keycode(SDL_Keycode sdl_key) {
+Keycode SDLContext::sdl_to_keycode(SDL_Scancode sdl_key) {
 	static const std::array<Keycode, SDL_NUM_SCANCODES> LOOKUP_TABLE = [] {
 		std::array<Keycode, SDL_NUM_SCANCODES> table{};
 		table.fill(Keycode::NONE);
 
+		// Map all SDL scancodes to Keycodes
 		table[SDL_SCANCODE_SPACE] = Keycode::SPACE;
 		table[SDL_SCANCODE_APOSTROPHE] = Keycode::APOSTROPHE;
 		table[SDL_SCANCODE_COMMA] = Keycode::COMMA;
@@ -180,13 +184,27 @@ Keycode SDLContext::sdl_to_keycode(SDL_Keycode sdl_key) {
 
 		return table;
 	}();
-
 	if (sdl_key < 0 || sdl_key >= SDL_NUM_SCANCODES) {
 		return Keycode::NONE;
 	}
-
 	return LOOKUP_TABLE[sdl_key];
 }
+std::array<bool, Keycode::NUM_KEYCODES> SDLContext::get_keyboard_state() {
+	// Array to hold the key states (true if pressed, false if not)
+	std::array<bool, Keycode::NUM_KEYCODES> keyState{};
+	SDL_PumpEvents();
+	const Uint8 * current_state = SDL_GetKeyboardState(nullptr);
+
+	for (int i = 0; i < SDL_NUM_SCANCODES; ++i) {
+		Keycode key = sdl_to_keycode(static_cast<SDL_Scancode>(i));
+
+		if (key != Keycode::NONE) {
+			keyState[key] = current_state[i] != 0;
+		}
+	}
+
+	return keyState;
+}
 
 MouseButton SDLContext::sdl_to_mousebutton(Uint8 sdl_button) {
 	static const std::array<MouseButton, 5> MOUSE_BUTTON_LOOKUP_TABLE = [] {
@@ -218,19 +236,25 @@ void SDLContext::present_screen() {
 	SDL_RenderPresent(this->game_renderer.get());
 }
 
+SDL_Rect SDLContext::get_src_rect(const Sprite & sprite) const {
+	return SDL_Rect{
+		.x = sprite.mask.x,
+		.y = sprite.mask.y,
+		.w = sprite.mask.w,
+		.h = sprite.mask.h,
+	};
+}
+
 SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
 
 	const Sprite::Data & data = ctx.sprite.data;
 
-	float aspect_ratio
-		= (ctx.sprite.aspect_ratio == 0) ? ctx.texture.get_ratio() : ctx.sprite.aspect_ratio;
-
 	vec2 size = data.size;
 	if (data.size.x == 0 && data.size.y != 0) {
-		size.x = data.size.y * aspect_ratio;
+		size.x = data.size.y * ctx.sprite.aspect_ratio;
 	}
 	if (data.size.y == 0 && data.size.x != 0) {
-		size.y = data.size.x / aspect_ratio;
+		size.y = data.size.x / ctx.sprite.aspect_ratio;
 	}
 
 	const CameraValues & cam = ctx.cam;
@@ -251,24 +275,15 @@ SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
 }
 
 void SDLContext::draw(const RenderContext & ctx) {
+
 	const Sprite::Data & data = ctx.sprite.data;
 	SDL_RendererFlip render_flip
 		= (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * data.flip.flip_x)
 							  | (SDL_FLIP_VERTICAL * data.flip.flip_y));
 
-	SDL_Rect srcrect;
-	SDL_Rect * srcrect_ptr = NULL;
-	if (ctx.sprite.mask.w != 0 || ctx.sprite.mask.h != 0) {
-		srcrect.w = ctx.sprite.mask.w;
-		srcrect.h = ctx.sprite.mask.h;
-		srcrect.x = ctx.sprite.mask.x;
-		srcrect.y = ctx.sprite.mask.y;
-		srcrect_ptr = &srcrect;
-	}
-
+	SDL_Rect srcrect = this->get_src_rect(ctx.sprite);
 	SDL_FRect dstrect = this->get_dst_rect(SDLContext::DestinationRectangleData{
 		.sprite = ctx.sprite,
-		.texture = ctx.texture,
 		.cam = ctx.cam,
 		.pos = ctx.pos,
 		.img_scale = ctx.scale,
@@ -276,9 +291,9 @@ void SDLContext::draw(const RenderContext & ctx) {
 
 	double angle = ctx.angle + data.angle_offset;
 
-	this->set_color_texture(ctx.texture, ctx.sprite.data.color);
-	SDL_RenderCopyExF(this->game_renderer.get(), ctx.texture.get_img(), srcrect_ptr, &dstrect,
-					  angle, NULL, render_flip);
+	this->set_color_texture(ctx.sprite.texture, ctx.sprite.data.color);
+	SDL_RenderCopyExF(this->game_renderer.get(), ctx.sprite.texture.texture.get(), &srcrect,
+					  &dstrect, angle, NULL, render_flip);
 }
 
 SDLContext::CameraValues SDLContext::set_camera(const Camera & cam) {
@@ -340,6 +355,8 @@ SDLContext::CameraValues SDLContext::set_camera(const Camera & cam) {
 	return ret_cam;
 }
 
+uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); }
+
 std::unique_ptr<SDL_Texture, std::function<void(SDL_Texture *)>>
 SDLContext::texture_from_path(const std::string & path) {
 
@@ -366,71 +383,112 @@ SDLContext::texture_from_path(const std::string & path) {
 
 ivec2 SDLContext::get_size(const Texture & ctx) {
 	ivec2 size;
-	SDL_QueryTexture(ctx.get_img(), NULL, NULL, &size.x, &size.y);
+	SDL_QueryTexture(ctx.texture.get(), NULL, NULL, &size.x, &size.y);
 	return size;
 }
 
+void SDLContext::delay(int ms) const { SDL_Delay(ms); }
+
 std::vector<SDLContext::EventData> SDLContext::get_events() {
 	std::vector<SDLContext::EventData> event_list;
 	SDL_Event event;
+
+	// Handle general SDL events
 	while (SDL_PollEvent(&event)) {
 		switch (event.type) {
 			case SDL_QUIT:
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::SHUTDOWN,
-				});
+				event_list.push_back({SDLContext::EventType::SHUTDOWN, {}, {}, {}});
 				break;
 			case SDL_KEYDOWN:
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::KEYDOWN,
-					.key = sdl_to_keycode(event.key.keysym.scancode),
-					.key_repeat = (event.key.repeat != 0),
-				});
+				event_list.push_back(
+					{SDLContext::EventType::KEYDOWN,
+					 {sdl_to_keycode(event.key.keysym.scancode), event.key.repeat != 0},
+					 {},
+					 {}});
 				break;
 			case SDL_KEYUP:
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::KEYUP,
-					.key = sdl_to_keycode(event.key.keysym.scancode),
-				});
+				event_list.push_back({SDLContext::EventType::KEYUP,
+									  {sdl_to_keycode(event.key.keysym.scancode), false},
+									  {},
+									  {}});
 				break;
 			case SDL_MOUSEBUTTONDOWN:
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::MOUSEDOWN,
-					.mouse_button = sdl_to_mousebutton(event.button.button),
-					.mouse_position = {event.button.x, event.button.y},
-				});
+				event_list.push_back({SDLContext::EventType::MOUSEDOWN,
+									  {},
+									  {sdl_to_mousebutton(event.button.button),
+									   {event.button.x, event.button.y}},
+									  {}});
+				break;
+			case SDL_MOUSEBUTTONUP:
+				event_list.push_back({SDLContext::EventType::MOUSEUP,
+									  {},
+									  {sdl_to_mousebutton(event.button.button),
+									   {event.button.x, event.button.y}},
+									  {}});
+				break;
+			case SDL_MOUSEMOTION:
+				event_list.push_back({SDLContext::EventType::MOUSEMOVE,
+									  {},
+									  {{},
+									   {event.motion.x, event.motion.y},
+									   -1,
+									   INFINITY,
+									   {event.motion.xrel, event.motion.yrel}},
+									  {}});
 				break;
-			case SDL_MOUSEBUTTONUP: {
-				int x, y;
-				SDL_GetMouseState(&x, &y);
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::MOUSEUP,
-					.mouse_button = sdl_to_mousebutton(event.button.button),
-					.mouse_position = {event.button.x, event.button.y},
-				});
-			} break;
-
-			case SDL_MOUSEMOTION: {
+			case SDL_MOUSEWHEEL:
 				event_list.push_back(
-					EventData{.event_type = SDLContext::EventType::MOUSEMOVE,
-							  .mouse_position = {event.motion.x, event.motion.y},
-							  .rel_mouse_move = {event.motion.xrel, event.motion.yrel}});
-			} break;
-
-			case SDL_MOUSEWHEEL: {
-				event_list.push_back(EventData{
-					.event_type = SDLContext::EventType::MOUSEWHEEL,
-					.mouse_position = {event.motion.x, event.motion.y},
-					// TODO: why is this needed?
-					.scroll_direction = event.wheel.y < 0 ? -1 : 1,
-					.scroll_delta = event.wheel.preciseY,
-				});
-			} break;
+					{SDLContext::EventType::MOUSEWHEEL,
+					 {},
+					 {{}, {}, event.wheel.y < 0 ? -1 : 1, event.wheel.preciseY, {}},
+					 {}});
+				break;
+
+			// Forward window events for further processing
+			case SDL_WINDOWEVENT:
+				this->handle_window_event(event.window, event_list);
+				break;
 		}
 	}
+
 	return event_list;
 }
+
+// Separate function for SDL_WINDOWEVENT subtypes
+void SDLContext::handle_window_event(const SDL_WindowEvent & window_event,
+									 std::vector<SDLContext::EventData> & event_list) {
+	switch (window_event.event) {
+		case SDL_WINDOWEVENT_EXPOSED:
+			event_list.push_back({SDLContext::EventType::WINDOW_EXPOSE, {}, {}, {}});
+			break;
+		case SDL_WINDOWEVENT_RESIZED:
+			event_list.push_back({SDLContext::EventType::WINDOW_RESIZE,
+								  {},
+								  {},
+								  {{}, {window_event.data1, window_event.data2}}});
+			break;
+		case SDL_WINDOWEVENT_MOVED:
+			event_list.push_back({SDLContext::EventType::WINDOW_MOVE,
+								  {},
+								  {},
+								  {{window_event.data1, window_event.data2}, {}}});
+			break;
+		case SDL_WINDOWEVENT_MINIMIZED:
+			event_list.push_back({SDLContext::EventType::WINDOW_MINIMIZE, {}, {}, {}});
+			break;
+		case SDL_WINDOWEVENT_MAXIMIZED:
+			event_list.push_back({SDLContext::EventType::WINDOW_MAXIMIZE, {}, {}, {}});
+			break;
+		case SDL_WINDOWEVENT_FOCUS_GAINED:
+			event_list.push_back({SDLContext::EventType::WINDOW_FOCUS_GAIN, {}, {}, {}});
+			break;
+		case SDL_WINDOWEVENT_FOCUS_LOST:
+			event_list.push_back({SDLContext::EventType::WINDOW_FOCUS_LOST, {}, {}, {}});
+			break;
+	}
+}
+
 void SDLContext::set_color_texture(const Texture & texture, const Color & color) {
-	SDL_SetTextureColorMod(texture.get_img(), color.r, color.g, color.b);
-	SDL_SetTextureAlphaMod(texture.get_img(), color.a);
+	SDL_SetTextureColorMod(texture.texture.get(), color.r, color.g, color.b);
+	SDL_SetTextureAlphaMod(texture.texture.get(), color.a);
 }
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 0002026..fe5466f 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -3,18 +3,19 @@
 #include <memory>
 #include <crepe/facade/SDLFontContext.h>
 #include <crepe/api/Text.h>
-
+#include <crepe/facade/Font.h>
+#include <crepe/manager/Mediator.h>
 using namespace crepe;
 
 int main() {
     SDLFontContext font_facade;
-
-    // Create a unique pointer to the font asset
-    std::unique_ptr<Asset> asset = font_facade.get_font_asset("OpenSymbol");
-    std::cout << "path: " << asset->get_path() << std::endl;
+	Mediator mediator;
 	try{
 		  // Correct way to create a unique pointer for Text
-    std::unique_ptr<Text> label = std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), *asset);
+    std::unique_ptr<Text> label = std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test","OpenSymbol");
+	std::unique_ptr<Asset> asset = font_facade.get_font_asset(label->font_family);
+	std::cout << "path: " << asset->get_path() << std::endl;
+	std::unique_ptr<Font> font = make_unique<Font>(asset,mediator)
 	}catch (const std::exception& e) {
     std::cout << "Standard exception thrown: " << e.what() << std::endl;
 	}
-- 
cgit v1.2.3


From 3ed4e51e23b5093a44a166b2f11ff66164e5cff1 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 21:09:55 +0100
Subject: font working

---
 src/CMakeLists.txt              |   2 +
 src/crepe/facade/CMakeLists.txt |   2 +
 src/crepe/facade/Font.cpp       |  31 +++---
 src/crepe/facade/Font.h         |   2 +-
 src/crepe/facade/SDLContext.cpp | 206 +++++++++++++++-------------------------
 src/crepe/facade/SDLContext.h   |   1 +
 src/example/loadfont.cpp        |   6 +-
 7 files changed, 100 insertions(+), 150 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2b8873f..a525c74 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,6 +9,7 @@ project(crepe C CXX)
 
 find_package(SDL2 REQUIRED)
 find_package(SDL2_image REQUIRED)
+find_package(SDL2_ttf REQUIRED)
 find_package(SoLoud REQUIRED)
 find_package(GTest REQUIRED)
 find_package(whereami REQUIRED)
@@ -25,6 +26,7 @@ target_include_directories(crepe
 target_link_libraries(crepe
 	PRIVATE soloud
 	PUBLIC SDL2
+	PUBLIC SDL2_ttf
 	PUBLIC SDL2_image
 	PUBLIC ${BERKELEY_DB}
 	PUBLIC whereami
diff --git a/src/crepe/facade/CMakeLists.txt b/src/crepe/facade/CMakeLists.txt
index f4d71ff..e61b680 100644
--- a/src/crepe/facade/CMakeLists.txt
+++ b/src/crepe/facade/CMakeLists.txt
@@ -5,6 +5,7 @@ target_sources(crepe PUBLIC
 	SDLContext.cpp
 	DB.cpp
 	SDLFontContext.cpp
+	Font.cpp
 )
 
 target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -14,5 +15,6 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
 	SDLContext.h
 	DB.h
 	SDLFontContext.h
+	Font.h
 )
 
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 66835ee..37dee3a 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -1,28 +1,25 @@
 #include "../api/Config.h"
 
-#include "font.h"
+#include "Font.h"
 
 using namespace std;
 using namespace crepe;
 
-void Font::load(unique_ptr<Asset> res){
-	const char* font_path = res->get_path();
-    this->font = std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)>(
-        TTF_OpenFont(font_path, this->default_font_size), &TTF_CloseFont); 
+Font::Font(const Asset& src, Mediator& mediator) 
+    : Resource(src, mediator), font(nullptr, TTF_CloseFont) {
+    // Get the font file path from the Asset
+    const std::string font_path = src.get_path();
 
-    if (!font) {
-        throw std::runtime_error("Failed to load font: " + std::string(TTF_GetError()));
-    }
-}
+    // Attempt to load the font
+    this->font.reset(TTF_OpenFont(font_path.c_str(), Config::get_instance().font.size));
 
-Font::Font(const char* src){
-	this->load(make_unique<Asset>(src));
-}
-
-Font::Font(std::unique_ptr<Asset> res){
-	this->load(std::move(res));
+    // Check if font loading failed
+    if (!this->font) {
+        throw runtime_error(format("Failed to load font from path: {}" 
+                                 ". SDL_ttf error: {}",font_path, TTF_GetError()));
+    }
 }
 
-TTF_Font* Font::get_font() const{
-	return this->font.get();
+TTF_Font* Font::get_font() const {
+    return this->font.get();
 }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index dd1cebf..a27676b 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -5,7 +5,7 @@
 
 #include "../api/Asset.h"
 #include "../api/Config.h"
-
+#include "../Resource.h"
 namespace crepe {
 
 /**
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 8f6c02c..38d12f6 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -18,23 +18,21 @@
 #include "../api/Color.h"
 #include "../api/Config.h"
 #include "../api/Sprite.h"
-#include "../api/Texture.h"
 #include "../util/Log.h"
+#include "manager/Mediator.h"
 
 #include "SDLContext.h"
+#include "Texture.h"
 #include "types.h"
 
 using namespace crepe;
 using namespace std;
 
-SDLContext & SDLContext::get_instance() {
-	static SDLContext instance;
-	return instance;
-}
-
-SDLContext::SDLContext() {
+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()));
 	}
@@ -62,6 +60,8 @@ SDLContext::SDLContext() {
 	if (!(IMG_Init(img_flags) & img_flags)) {
 		throw runtime_error("SDLContext: SDL_image could not initialize!");
 	}
+
+	mediator.sdl_context = *this;
 }
 
 SDLContext::~SDLContext() {
@@ -75,14 +75,14 @@ SDLContext::~SDLContext() {
 	// before.
 	IMG_Quit();
 	SDL_Quit();
+	TTF_Quit();
 }
 
-Keycode SDLContext::sdl_to_keycode(SDL_Scancode sdl_key) {
+Keycode SDLContext::sdl_to_keycode(SDL_Keycode sdl_key) {
 	static const std::array<Keycode, SDL_NUM_SCANCODES> LOOKUP_TABLE = [] {
 		std::array<Keycode, SDL_NUM_SCANCODES> table{};
 		table.fill(Keycode::NONE);
 
-		// Map all SDL scancodes to Keycodes
 		table[SDL_SCANCODE_SPACE] = Keycode::SPACE;
 		table[SDL_SCANCODE_APOSTROPHE] = Keycode::APOSTROPHE;
 		table[SDL_SCANCODE_COMMA] = Keycode::COMMA;
@@ -184,26 +184,12 @@ Keycode SDLContext::sdl_to_keycode(SDL_Scancode sdl_key) {
 
 		return table;
 	}();
+
 	if (sdl_key < 0 || sdl_key >= SDL_NUM_SCANCODES) {
 		return Keycode::NONE;
 	}
-	return LOOKUP_TABLE[sdl_key];
-}
-std::array<bool, Keycode::NUM_KEYCODES> SDLContext::get_keyboard_state() {
-	// Array to hold the key states (true if pressed, false if not)
-	std::array<bool, Keycode::NUM_KEYCODES> keyState{};
-	SDL_PumpEvents();
-	const Uint8 * current_state = SDL_GetKeyboardState(nullptr);
 
-	for (int i = 0; i < SDL_NUM_SCANCODES; ++i) {
-		Keycode key = sdl_to_keycode(static_cast<SDL_Scancode>(i));
-
-		if (key != Keycode::NONE) {
-			keyState[key] = current_state[i] != 0;
-		}
-	}
-
-	return keyState;
+	return LOOKUP_TABLE[sdl_key];
 }
 
 MouseButton SDLContext::sdl_to_mousebutton(Uint8 sdl_button) {
@@ -236,25 +222,19 @@ void SDLContext::present_screen() {
 	SDL_RenderPresent(this->game_renderer.get());
 }
 
-SDL_Rect SDLContext::get_src_rect(const Sprite & sprite) const {
-	return SDL_Rect{
-		.x = sprite.mask.x,
-		.y = sprite.mask.y,
-		.w = sprite.mask.w,
-		.h = sprite.mask.h,
-	};
-}
-
 SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
 
 	const Sprite::Data & data = ctx.sprite.data;
 
+	float aspect_ratio
+		= (ctx.sprite.aspect_ratio == 0) ? ctx.texture.get_ratio() : ctx.sprite.aspect_ratio;
+
 	vec2 size = data.size;
 	if (data.size.x == 0 && data.size.y != 0) {
-		size.x = data.size.y * ctx.sprite.aspect_ratio;
+		size.x = data.size.y * aspect_ratio;
 	}
 	if (data.size.y == 0 && data.size.x != 0) {
-		size.y = data.size.x / ctx.sprite.aspect_ratio;
+		size.y = data.size.x / aspect_ratio;
 	}
 
 	const CameraValues & cam = ctx.cam;
@@ -275,15 +255,24 @@ SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
 }
 
 void SDLContext::draw(const RenderContext & ctx) {
-
 	const Sprite::Data & data = ctx.sprite.data;
 	SDL_RendererFlip render_flip
 		= (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * data.flip.flip_x)
 							  | (SDL_FLIP_VERTICAL * data.flip.flip_y));
 
-	SDL_Rect srcrect = this->get_src_rect(ctx.sprite);
+	SDL_Rect srcrect;
+	SDL_Rect * srcrect_ptr = NULL;
+	if (ctx.sprite.mask.w != 0 || ctx.sprite.mask.h != 0) {
+		srcrect.w = ctx.sprite.mask.w;
+		srcrect.h = ctx.sprite.mask.h;
+		srcrect.x = ctx.sprite.mask.x;
+		srcrect.y = ctx.sprite.mask.y;
+		srcrect_ptr = &srcrect;
+	}
+
 	SDL_FRect dstrect = this->get_dst_rect(SDLContext::DestinationRectangleData{
 		.sprite = ctx.sprite,
+		.texture = ctx.texture,
 		.cam = ctx.cam,
 		.pos = ctx.pos,
 		.img_scale = ctx.scale,
@@ -291,9 +280,9 @@ void SDLContext::draw(const RenderContext & ctx) {
 
 	double angle = ctx.angle + data.angle_offset;
 
-	this->set_color_texture(ctx.sprite.texture, ctx.sprite.data.color);
-	SDL_RenderCopyExF(this->game_renderer.get(), ctx.sprite.texture.texture.get(), &srcrect,
-					  &dstrect, angle, NULL, render_flip);
+	this->set_color_texture(ctx.texture, ctx.sprite.data.color);
+	SDL_RenderCopyExF(this->game_renderer.get(), ctx.texture.get_img(), srcrect_ptr, &dstrect,
+					  angle, NULL, render_flip);
 }
 
 SDLContext::CameraValues SDLContext::set_camera(const Camera & cam) {
@@ -355,8 +344,6 @@ SDLContext::CameraValues SDLContext::set_camera(const Camera & cam) {
 	return ret_cam;
 }
 
-uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); }
-
 std::unique_ptr<SDL_Texture, std::function<void(SDL_Texture *)>>
 SDLContext::texture_from_path(const std::string & path) {
 
@@ -383,112 +370,71 @@ SDLContext::texture_from_path(const std::string & path) {
 
 ivec2 SDLContext::get_size(const Texture & ctx) {
 	ivec2 size;
-	SDL_QueryTexture(ctx.texture.get(), NULL, NULL, &size.x, &size.y);
+	SDL_QueryTexture(ctx.get_img(), NULL, NULL, &size.x, &size.y);
 	return size;
 }
 
-void SDLContext::delay(int ms) const { SDL_Delay(ms); }
-
 std::vector<SDLContext::EventData> SDLContext::get_events() {
 	std::vector<SDLContext::EventData> event_list;
 	SDL_Event event;
-
-	// Handle general SDL events
 	while (SDL_PollEvent(&event)) {
 		switch (event.type) {
 			case SDL_QUIT:
-				event_list.push_back({SDLContext::EventType::SHUTDOWN, {}, {}, {}});
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::SHUTDOWN,
+				});
 				break;
 			case SDL_KEYDOWN:
-				event_list.push_back(
-					{SDLContext::EventType::KEYDOWN,
-					 {sdl_to_keycode(event.key.keysym.scancode), event.key.repeat != 0},
-					 {},
-					 {}});
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::KEYDOWN,
+					.key = sdl_to_keycode(event.key.keysym.scancode),
+					.key_repeat = (event.key.repeat != 0),
+				});
 				break;
 			case SDL_KEYUP:
-				event_list.push_back({SDLContext::EventType::KEYUP,
-									  {sdl_to_keycode(event.key.keysym.scancode), false},
-									  {},
-									  {}});
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::KEYUP,
+					.key = sdl_to_keycode(event.key.keysym.scancode),
+				});
 				break;
 			case SDL_MOUSEBUTTONDOWN:
-				event_list.push_back({SDLContext::EventType::MOUSEDOWN,
-									  {},
-									  {sdl_to_mousebutton(event.button.button),
-									   {event.button.x, event.button.y}},
-									  {}});
-				break;
-			case SDL_MOUSEBUTTONUP:
-				event_list.push_back({SDLContext::EventType::MOUSEUP,
-									  {},
-									  {sdl_to_mousebutton(event.button.button),
-									   {event.button.x, event.button.y}},
-									  {}});
-				break;
-			case SDL_MOUSEMOTION:
-				event_list.push_back({SDLContext::EventType::MOUSEMOVE,
-									  {},
-									  {{},
-									   {event.motion.x, event.motion.y},
-									   -1,
-									   INFINITY,
-									   {event.motion.xrel, event.motion.yrel}},
-									  {}});
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::MOUSEDOWN,
+					.mouse_button = sdl_to_mousebutton(event.button.button),
+					.mouse_position = {event.button.x, event.button.y},
+				});
 				break;
-			case SDL_MOUSEWHEEL:
+			case SDL_MOUSEBUTTONUP: {
+				int x, y;
+				SDL_GetMouseState(&x, &y);
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::MOUSEUP,
+					.mouse_button = sdl_to_mousebutton(event.button.button),
+					.mouse_position = {event.button.x, event.button.y},
+				});
+			} break;
+
+			case SDL_MOUSEMOTION: {
 				event_list.push_back(
-					{SDLContext::EventType::MOUSEWHEEL,
-					 {},
-					 {{}, {}, event.wheel.y < 0 ? -1 : 1, event.wheel.preciseY, {}},
-					 {}});
-				break;
-
-			// Forward window events for further processing
-			case SDL_WINDOWEVENT:
-				this->handle_window_event(event.window, event_list);
-				break;
+					EventData{.event_type = SDLContext::EventType::MOUSEMOVE,
+							  .mouse_position = {event.motion.x, event.motion.y},
+							  .rel_mouse_move = {event.motion.xrel, event.motion.yrel}});
+			} break;
+
+			case SDL_MOUSEWHEEL: {
+				event_list.push_back(EventData{
+					.event_type = SDLContext::EventType::MOUSEWHEEL,
+					.mouse_position = {event.motion.x, event.motion.y},
+					// TODO: why is this needed?
+					.scroll_direction = event.wheel.y < 0 ? -1 : 1,
+					.scroll_delta = event.wheel.preciseY,
+				});
+			} break;
 		}
 	}
-
 	return event_list;
 }
-
-// Separate function for SDL_WINDOWEVENT subtypes
-void SDLContext::handle_window_event(const SDL_WindowEvent & window_event,
-									 std::vector<SDLContext::EventData> & event_list) {
-	switch (window_event.event) {
-		case SDL_WINDOWEVENT_EXPOSED:
-			event_list.push_back({SDLContext::EventType::WINDOW_EXPOSE, {}, {}, {}});
-			break;
-		case SDL_WINDOWEVENT_RESIZED:
-			event_list.push_back({SDLContext::EventType::WINDOW_RESIZE,
-								  {},
-								  {},
-								  {{}, {window_event.data1, window_event.data2}}});
-			break;
-		case SDL_WINDOWEVENT_MOVED:
-			event_list.push_back({SDLContext::EventType::WINDOW_MOVE,
-								  {},
-								  {},
-								  {{window_event.data1, window_event.data2}, {}}});
-			break;
-		case SDL_WINDOWEVENT_MINIMIZED:
-			event_list.push_back({SDLContext::EventType::WINDOW_MINIMIZE, {}, {}, {}});
-			break;
-		case SDL_WINDOWEVENT_MAXIMIZED:
-			event_list.push_back({SDLContext::EventType::WINDOW_MAXIMIZE, {}, {}, {}});
-			break;
-		case SDL_WINDOWEVENT_FOCUS_GAINED:
-			event_list.push_back({SDLContext::EventType::WINDOW_FOCUS_GAIN, {}, {}, {}});
-			break;
-		case SDL_WINDOWEVENT_FOCUS_LOST:
-			event_list.push_back({SDLContext::EventType::WINDOW_FOCUS_LOST, {}, {}, {}});
-			break;
-	}
-}
-
 void SDLContext::set_color_texture(const Texture & texture, const Color & color) {
-	SDL_SetTextureColorMod(texture.texture.get(), color.r, color.g, color.b);
-	SDL_SetTextureAlphaMod(texture.texture.get(), color.a);
+	SDL_SetTextureColorMod(texture.get_img(), color.r, color.g, color.b);
+	SDL_SetTextureAlphaMod(texture.get_img(), color.a);
 }
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index 46b779f..6b725e3 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -5,6 +5,7 @@
 #include <SDL2/SDL_rect.h>
 #include <SDL2/SDL_render.h>
 #include <SDL2/SDL_video.h>
+#include <SDL2/SDL_ttf.h>
 #include <cmath>
 #include <functional>
 #include <memory>
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index fe5466f..52454a1 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -5,17 +5,19 @@
 #include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
 #include <crepe/manager/Mediator.h>
+#include <crepe/facade/SDLContext.h>
 using namespace crepe;
-
 int main() {
+	
     SDLFontContext font_facade;
 	Mediator mediator;
+	SDLContext sdl_context{mediator};
 	try{
 		  // Correct way to create a unique pointer for Text
     std::unique_ptr<Text> label = std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test","OpenSymbol");
 	std::unique_ptr<Asset> asset = font_facade.get_font_asset(label->font_family);
 	std::cout << "path: " << asset->get_path() << std::endl;
-	std::unique_ptr<Font> font = make_unique<Font>(asset,mediator)
+	std::unique_ptr<Font> font = std::make_unique<Font>(*asset,mediator);
 	}catch (const std::exception& e) {
     std::cout << "Standard exception thrown: " << e.what() << std::endl;
 	}
-- 
cgit v1.2.3


From 5ef7c56e44a864e580810952450c43c0f9a7b6e0 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 21:26:03 +0100
Subject: make format

---
 src/crepe/api/Text.cpp              |  7 +++-
 src/crepe/api/Text.h                |  8 ++--
 src/crepe/facade/Font.cpp           | 28 ++++++-------
 src/crepe/facade/Font.h             | 16 ++++----
 src/crepe/facade/SDLContext.cpp     |  4 +-
 src/crepe/facade/SDLContext.h       |  3 +-
 src/crepe/facade/SDLFontContext.cpp | 80 ++++++++++++++++++-------------------
 src/crepe/facade/SDLFontContext.h   | 21 +++++-----
 src/example/loadfont.cpp            | 34 ++++++++--------
 9 files changed, 102 insertions(+), 99 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index 12d01f1..b30ccf6 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -2,5 +2,8 @@
 
 using namespace crepe;
 
-Text::Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset,std::string text,std::string font_family) : UIObject(id,dimensions,offset),text(text), font_family(font_family){}
-
+Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, std::string text,
+		   std::string font_family)
+	: UIObject(id, dimensions, offset),
+	  text(text),
+	  font_family(font_family) {}
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index 8436611..ebf413b 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -8,16 +8,17 @@
 #include "Color.h"
 #include "UIObject.h"
 
-namespace crepe{
+namespace crepe {
 
 /**
  * \brief Text UIObject component for displaying text
  * 
  * This class can be used to display text on screen. By setting the font_family to a font already stored on the current device it will automatically be loaded in.
  */
-class Text : public UIObject{
+class Text : public UIObject {
 public:
-	Text(game_object_id_t id,const vec2 & dimensions, const vec2 & offset,std::string text,std::string font_family);
+	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, std::string text,
+		 std::string font_family);
 	//! Text data that does not have to be set in the constructor
 	struct Data {
 		/**
@@ -40,6 +41,7 @@ public:
 		//! Label text color.
 		Color text_color = Color::BLACK;
 	};
+
 public:
 	//! font family name such as (Arial,Helvetica,Inter)
 	std::string font_family = "";
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 37dee3a..85b0e13 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -5,21 +5,21 @@
 using namespace std;
 using namespace crepe;
 
-Font::Font(const Asset& src, Mediator& mediator) 
-    : Resource(src, mediator), font(nullptr, TTF_CloseFont) {
-    // Get the font file path from the Asset
-    const std::string font_path = src.get_path();
+Font::Font(const Asset & src, Mediator & mediator)
+	: Resource(src, mediator),
+	  font(nullptr, TTF_CloseFont) {
+	// Get the font file path from the Asset
+	const std::string font_path = src.get_path();
 
-    // Attempt to load the font
-    this->font.reset(TTF_OpenFont(font_path.c_str(), Config::get_instance().font.size));
+	// Attempt to load the font
+	this->font.reset(TTF_OpenFont(font_path.c_str(), Config::get_instance().font.size));
 
-    // Check if font loading failed
-    if (!this->font) {
-        throw runtime_error(format("Failed to load font from path: {}" 
-                                 ". SDL_ttf error: {}",font_path, TTF_GetError()));
-    }
+	// Check if font loading failed
+	if (!this->font) {
+		throw runtime_error(format("Failed to load font from path: {}"
+								   ". SDL_ttf error: {}",
+								   font_path, TTF_GetError()));
+	}
 }
 
-TTF_Font* Font::get_font() const {
-    return this->font.get();
-}
+TTF_Font * Font::get_font() const { return this->font.get(); }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index fbc1b8f..983ef31 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -2,9 +2,9 @@
 #include <SDL2/SDL_ttf.h>
 #include <memory>
 
+#include "../Resource.h"
 #include "../api/Asset.h"
 #include "../api/Config.h"
-#include "../Resource.h"
 
 namespace crepe {
 
@@ -15,15 +15,15 @@ namespace crepe {
  * It loads a font from an Asset and manages its lifecycle. The font is automatically unloaded
  * when this object is destroyed.
  */
-class Font : public Resource{
+class Font : public Resource {
 public:
-    /**
+	/**
      * \param src The Asset containing the font file path and metadata to load the font.
      * \param mediator The Mediator object used for managing the SDL context or related systems.
      */
-    Font(const Asset & src, Mediator & mediator);
+	Font(const Asset & src, Mediator & mediator);
 
-    /**
+	/**
      * \brief Gets the underlying TTF_Font resource.
      * 
      * This function returns the raw pointer to the SDL_ttf TTF_Font object that represents
@@ -31,11 +31,11 @@ public:
      * 
      * \return The raw TTF_Font object wrapped in a unique pointer.
      */
-    TTF_Font* get_font() const;
+	TTF_Font * get_font() const;
 
 private:
-    //! The SDL_ttf font object with custom deleter.
-    std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)> font;
+	//! The SDL_ttf font object with custom deleter.
+	std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)> font;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 274c14a..cbb0f3b 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -32,8 +32,8 @@ using namespace std;
 SDLContext::SDLContext(Mediator & mediator) {
 	dbg_trace();
 	if (TTF_Init() == -1) {
-        throw runtime_error(format("SDL_ttf initialization failed: {}", TTF_GetError()));
-    }
+		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()));
 	}
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index d7b8365..76cd99a 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -4,8 +4,8 @@
 #include <SDL2/SDL_keycode.h>
 #include <SDL2/SDL_rect.h>
 #include <SDL2/SDL_render.h>
-#include <SDL2/SDL_video.h>
 #include <SDL2/SDL_ttf.h>
+#include <SDL2/SDL_video.h>
 #include <cmath>
 #include <functional>
 #include <memory>
@@ -225,7 +225,6 @@ public:
 	void set_color_texture(const Texture & texture, const Color & color);
 
 private:
-
 	//! sdl Window
 	std::unique_ptr<SDL_Window, std::function<void(SDL_Window *)>> game_window;
 
diff --git a/src/crepe/facade/SDLFontContext.cpp b/src/crepe/facade/SDLFontContext.cpp
index 851016b..2bccac4 100644
--- a/src/crepe/facade/SDLFontContext.cpp
+++ b/src/crepe/facade/SDLFontContext.cpp
@@ -2,54 +2,52 @@
 
 #include "SDLFontContext.h"
 
-
 using namespace crepe;
 using namespace std;
 
-SDLFontContext::SDLFontContext(){
+SDLFontContext::SDLFontContext() {
 	if (!FcInit()) {
-            throw runtime_error("Failed to initialize Fontconfig.");
-    }
+		throw runtime_error("Failed to initialize Fontconfig.");
+	}
 }
 
-SDLFontContext::~SDLFontContext(){
-		FcFini();
-}
+SDLFontContext::~SDLFontContext() { FcFini(); }
 
 unique_ptr<Asset> SDLFontContext::get_font_asset(const string & font_family) {
-	
-    // Create a pattern to search for the font family
-    FcPattern* pattern = FcNameParse(reinterpret_cast<const FcChar8*>(font_family.c_str()));
-    if (!pattern) {
-        throw runtime_error("Failed to create font pattern.");
-    }
-
-    // Default configuration
-    FcConfig* config = FcConfigGetCurrent();
-    if (!config) {
-        FcPatternDestroy(pattern);
-        throw runtime_error("Failed to get current Fontconfig configuration.");
-    }
-
-    // Match the font pattern
-    FcResult result;
-    FcPattern* matched_pattern = FcFontMatch(config, pattern, &result);
-    FcPatternDestroy(pattern);
-
-    if (!matched_pattern) {
+
+	// Create a pattern to search for the font family
+	FcPattern * pattern = FcNameParse(reinterpret_cast<const FcChar8 *>(font_family.c_str()));
+	if (!pattern) {
+		throw runtime_error("Failed to create font pattern.");
+	}
+
+	// Default configuration
+	FcConfig * config = FcConfigGetCurrent();
+	if (!config) {
+		FcPatternDestroy(pattern);
+		throw runtime_error("Failed to get current Fontconfig configuration.");
+	}
+
+	// Match the font pattern
+	FcResult result;
+	FcPattern * matched_pattern = FcFontMatch(config, pattern, &result);
+	FcPatternDestroy(pattern);
+
+	if (!matched_pattern) {
 		FcPatternDestroy(matched_pattern);
-        throw runtime_error("No matching font found.");
-    }
-
-    // Extract the file path
-    FcChar8* file_path = nullptr;
-    if (FcPatternGetString(matched_pattern, FC_FILE, 0, &file_path) != FcResultMatch || !file_path) {
-        FcPatternDestroy(matched_pattern);
-        throw runtime_error("Failed to get font file path.");
-    }
-
-    // Convert the file path to a string
-    string font_file_path(reinterpret_cast<const char*>(file_path));
-    FcPatternDestroy(matched_pattern);
-    return move(make_unique<Asset>(font_file_path));
+		throw runtime_error("No matching font found.");
+	}
+
+	// Extract the file path
+	FcChar8 * file_path = nullptr;
+	if (FcPatternGetString(matched_pattern, FC_FILE, 0, &file_path) != FcResultMatch
+		|| !file_path) {
+		FcPatternDestroy(matched_pattern);
+		throw runtime_error("Failed to get font file path.");
+	}
+
+	// Convert the file path to a string
+	string font_file_path(reinterpret_cast<const char *>(file_path));
+	FcPatternDestroy(matched_pattern);
+	return move(make_unique<Asset>(font_file_path));
 }
diff --git a/src/crepe/facade/SDLFontContext.h b/src/crepe/facade/SDLFontContext.h
index c890b2d..b9e1f23 100644
--- a/src/crepe/facade/SDLFontContext.h
+++ b/src/crepe/facade/SDLFontContext.h
@@ -1,17 +1,17 @@
 #pragma once
 
-#include <memory>
 #include <SDL2/SDL_ttf.h>
 #include <fontconfig/fontconfig.h>
+#include <memory>
 
 #include "../api/Asset.h"
 
 namespace crepe {
-	class SDLFontContext{
-	public:
-		SDLFontContext();
-		~SDLFontContext();
-		/**
+class SDLFontContext {
+public:
+	SDLFontContext();
+	~SDLFontContext();
+	/**
 		 * 
 		 * \brief Facade function to convert a font_family into an asset.
 		 * 
@@ -19,8 +19,9 @@ namespace crepe {
 		 * 
 		 * \param font_family Name of the font family name.
 		 */
-		std::unique_ptr<Asset> get_font_asset(const std::string & font_family);
-	private:
-	};
+	std::unique_ptr<Asset> get_font_asset(const std::string & font_family);
+
+private:
+};
 
-}
+} // namespace crepe
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 52454a1..efd5a98 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -1,27 +1,27 @@
-#include <iostream>
-#include <exception>
-#include <memory>
-#include <crepe/facade/SDLFontContext.h>
 #include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
-#include <crepe/manager/Mediator.h>
 #include <crepe/facade/SDLContext.h>
+#include <crepe/facade/SDLFontContext.h>
+#include <crepe/manager/Mediator.h>
+#include <exception>
+#include <iostream>
+#include <memory>
 using namespace crepe;
 int main() {
-	
-    SDLFontContext font_facade;
+
+	SDLFontContext font_facade;
 	Mediator mediator;
 	SDLContext sdl_context{mediator};
-	try{
-		  // Correct way to create a unique pointer for Text
-    std::unique_ptr<Text> label = std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test","OpenSymbol");
-	std::unique_ptr<Asset> asset = font_facade.get_font_asset(label->font_family);
-	std::cout << "path: " << asset->get_path() << std::endl;
-	std::unique_ptr<Font> font = std::make_unique<Font>(*asset,mediator);
-	}catch (const std::exception& e) {
-    std::cout << "Standard exception thrown: " << e.what() << std::endl;
+	try {
+		// Correct way to create a unique pointer for Text
+		std::unique_ptr<Text> label
+			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol");
+		std::unique_ptr<Asset> asset = font_facade.get_font_asset(label->font_family);
+		std::cout << "path: " << asset->get_path() << std::endl;
+		std::unique_ptr<Font> font = std::make_unique<Font>(*asset, mediator);
+	} catch (const std::exception & e) {
+		std::cout << "Standard exception thrown: " << e.what() << std::endl;
 	}
-  
 
-    return 0;
+	return 0;
 }
-- 
cgit v1.2.3


From 86e3dcbc1e5b2fe07d89d6cde21f4b9e687962fa Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 21:49:39 +0100
Subject: fixed format

---
 src/crepe/facade/Font.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 85b0e13..a39af75 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -16,8 +16,7 @@ Font::Font(const Asset & src, Mediator & mediator)
 
 	// Check if font loading failed
 	if (!this->font) {
-		throw runtime_error(format("Failed to load font from path: {}"
-								   ". SDL_ttf error: {}",
+		throw runtime_error(format("Failed to load font from path: {}. SDL_ttf error: {}",
 								   font_path, TTF_GetError()));
 	}
 }
-- 
cgit v1.2.3


From aa1f1f9460fa713e00fd1830b08be743395110ce Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Sat, 14 Dec 2024 14:37:55 +0100
Subject: sdl_ttf to submodules + feedback changes

---
 .vscode/launch.json                 | 28 ++++++++++++++++++++++++++++
 mwe/events/include/event.h          |  2 +-
 readme.md                           |  1 +
 src/CMakeLists.txt                  |  4 ++--
 src/crepe/api/Text.cpp              |  3 ++-
 src/crepe/api/Text.h                |  4 ++--
 src/crepe/facade/Font.cpp           | 17 ++++++-----------
 src/crepe/facade/Font.h             |  2 +-
 src/crepe/facade/SDLFontContext.cpp |  4 ++--
 src/crepe/facade/SDLFontContext.h   |  6 +++++-
 src/example/loadfont.cpp            |  8 ++++----
 11 files changed, 54 insertions(+), 25 deletions(-)
 create mode 100644 .vscode/launch.json

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..07bd65f
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,28 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Debug test_main",
+            "type": "cppdbg",
+            "request": "launch",
+            "program": "${workspaceFolder}/src/build/test_main",  // Path to your executable
+            "args": [],  // Optional: add any arguments here if needed
+            "stopAtEntry": false,  // Set to true if you want to break at the entry point
+            "cwd": "${workspaceFolder}",  // Working directory for the program
+            "environment": [],
+            "externalConsole": false,  // Set to true to use an external console
+            "MIMode": "gdb",  // Use "lldb" if you're using LLDB instead of GDB
+            "setupCommands": [
+                {
+                    "description": "Enable pretty-printing for gdb",
+                    "text": "-enable-pretty-printing",
+                    "ignoreFailures": true
+                }
+            ],
+            "miDebuggerPath": "/usr/bin/gdb",  // Path to gdb, adjust based on your system
+            "preLaunchTask": "",  // Optional: specify a pre-launch task like building your project
+            "sourceFileMap": {},
+            "logging": { "moduleLoad": false, "engineLogging": false }
+        }
+    ]
+}
diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h
index ee1bf52..e1b220b 100644
--- a/mwe/events/include/event.h
+++ b/mwe/events/include/event.h
@@ -148,7 +148,7 @@ private:
 };
 class ShutDownEvent : public Event {
 public:
-	ShutDownEvent() : Event("ShutDownEvent") {};
+	ShutDownEvent() : Event("ShutDownEvent"){};
 
 	REGISTER_EVENT_TYPE(ShutDownEvent)
 
diff --git a/readme.md b/readme.md
index d309b30..984a368 100644
--- a/readme.md
+++ b/readme.md
@@ -60,6 +60,7 @@ Then, follow these steps for each library you want to install:
    $ cd lib/googletest
    $ cd lib/sdl2
    $ cd lib/soloud/contrib
+   $ cd lib/sdl_ttf
    $ cd lib/sdl_image
    $ cd lib/sdl_ttf
    $ cd lib/whereami
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a525c74..696856c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,7 +14,7 @@ find_package(SoLoud REQUIRED)
 find_package(GTest REQUIRED)
 find_package(whereami REQUIRED)
 find_library(BERKELEY_DB db)
-find_package(Fontconfig REQUIRED)
+find_library(FONTCONFIG_LIB fontconfig)
 
 add_library(crepe SHARED)
 add_executable(test_main EXCLUDE_FROM_ALL)
@@ -30,7 +30,7 @@ target_link_libraries(crepe
 	PUBLIC SDL2_image
 	PUBLIC ${BERKELEY_DB}
 	PUBLIC whereami
-	PUBLIC ${Fontconfig_LIBRARIES}
+	PUBLIC ${FONTCONFIG_LIB}
 )
 
 add_subdirectory(crepe)
diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index c072ee7..9de9038 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -3,7 +3,8 @@
 using namespace crepe;
 
 Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::string & text,
-		   const std::string & font_family)
+		   const std::string & font_family,const Data & data)
 	: UIObject(id, dimensions, offset),
 	  text(text),
+	  data(data),
 	  font_family(font_family) {}
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index 2ad1db3..96e1265 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -15,8 +15,6 @@ namespace crepe {
  */
 class Text : public UIObject {
 public:
-	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::string &,
-		 const std::string & font_family);
 	//! Text data that does not have to be set in the constructor
 	struct Data {
 		/**
@@ -41,6 +39,8 @@ public:
 	};
 
 public:
+	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::string &,
+		 const std::string & font_family, const Data& data);
 	//! font family name such as (Arial,Helvetica,Inter)
 	std::string font_family = "";
 	//! Label text.
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index a39af75..f111af9 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -8,17 +8,12 @@ using namespace crepe;
 Font::Font(const Asset & src, Mediator & mediator)
 	: Resource(src, mediator),
 	  font(nullptr, TTF_CloseFont) {
-	// Get the font file path from the Asset
-	const std::string font_path = src.get_path();
-
-	// Attempt to load the font
-	this->font.reset(TTF_OpenFont(font_path.c_str(), Config::get_instance().font.size));
-
-	// Check if font loading failed
-	if (!this->font) {
-		throw runtime_error(format("Failed to load font from path: {}. SDL_ttf error: {}",
-								   font_path, TTF_GetError()));
-	}
+	Config & config = Config::get_instance();
+	const std::string FONT_PATH = src.get_path();
+	TTF_Font * font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
+	if (font == NULL)
+		throw runtime_error(format("Font: {} (path: {})", TTF_GetError(), FONT_PATH));
+	this->font = { font, [] (TTF_Font * font) { TTF_CloseFont(font); } };
 }
 
 TTF_Font * Font::get_font() const { return this->font.get(); }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index 983ef31..f7d5b50 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -35,7 +35,7 @@ public:
 
 private:
 	//! The SDL_ttf font object with custom deleter.
-	std::unique_ptr<TTF_Font, decltype(&TTF_CloseFont)> font;
+	std::unique_ptr<TTF_Font, std::function<void(TTF_Font*)>> font;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLFontContext.cpp b/src/crepe/facade/SDLFontContext.cpp
index 1037ac4..5123b3b 100644
--- a/src/crepe/facade/SDLFontContext.cpp
+++ b/src/crepe/facade/SDLFontContext.cpp
@@ -13,7 +13,7 @@ SDLFontContext::SDLFontContext() {
 
 SDLFontContext::~SDLFontContext() { FcFini(); }
 
-unique_ptr<Asset> SDLFontContext::get_font_asset(const string font_family) {
+Asset SDLFontContext::get_font_asset(const string font_family) {
 
 	// Create a pattern to search for the font family
 	FcPattern * pattern = FcNameParse(reinterpret_cast<const FcChar8 *>(font_family.c_str()));
@@ -49,5 +49,5 @@ unique_ptr<Asset> SDLFontContext::get_font_asset(const string font_family) {
 	// Convert the file path to a string
 	string font_file_path(reinterpret_cast<const char *>(file_path));
 	FcPatternDestroy(matched_pattern);
-	return move(make_unique<Asset>(font_file_path));
+	return Asset(font_file_path);
 }
diff --git a/src/crepe/facade/SDLFontContext.h b/src/crepe/facade/SDLFontContext.h
index efeaa33..cb3ca9d 100644
--- a/src/crepe/facade/SDLFontContext.h
+++ b/src/crepe/facade/SDLFontContext.h
@@ -11,6 +11,10 @@ class SDLFontContext {
 public:
 	SDLFontContext();
 	~SDLFontContext();
+	SDLFontContext(const SDLFontContext &) = delete;
+	SDLFontContext(SDLFontContext &&) = delete;
+	SDLFontContext & operator=(const SDLFontContext &) = delete;
+	SDLFontContext & operator=(SDLFontContext &&) = delete;
 	/**
 		 * 
 		 * \brief Facade function to convert a font_family into an asset.
@@ -19,7 +23,7 @@ public:
 		 * 
 		 * \param font_family Name of the font family name.
 		 */
-	std::unique_ptr<Asset> get_font_asset(const std::string font_family);
+	Asset get_font_asset(const std::string font_family);
 
 private:
 };
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 3cbe559..a52e7f0 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -15,10 +15,10 @@ int main() {
 	try {
 		// Correct way to create a unique pointer for Text
 		std::unique_ptr<Text> label
-			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol");
-		std::unique_ptr<Asset> asset = font_facade.get_font_asset(label->font_family);
-		std::cout << "path: " << asset->get_path() << std::endl;
-		std::unique_ptr<Font> font = std::make_unique<Font>(*asset, mediator);
+			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol",Text::Data{});
+		Asset asset = font_facade.get_font_asset(label->font_family);
+		std::cout << "path: " << asset.get_path() << std::endl;
+		std::unique_ptr<Font> font = std::make_unique<Font>(asset, mediator);
 		// Get the TTF_Font from the Font object
 		TTF_Font* ttf_font = font->get_font();
 
-- 
cgit v1.2.3


From 9579f2a385de42cf74d50038c79a58c14eb0d980 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Sat, 14 Dec 2024 14:45:28 +0100
Subject: make format

---
 src/crepe/api/Text.cpp          | 4 ++--
 src/crepe/api/Text.h            | 4 ++--
 src/crepe/facade/Font.cpp       | 2 +-
 src/crepe/facade/Font.h         | 2 +-
 src/crepe/facade/SDLContext.cpp | 2 +-
 src/example/loadfont.cpp        | 6 +++---
 6 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index 9de9038..568af7f 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -2,8 +2,8 @@
 
 using namespace crepe;
 
-Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::string & text,
-		   const std::string & font_family,const Data & data)
+Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
+		   const std::string & text, const std::string & font_family, const Data & data)
 	: UIObject(id, dimensions, offset),
 	  text(text),
 	  data(data),
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index 96e1265..64b2008 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -39,8 +39,8 @@ public:
 	};
 
 public:
-	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::string &,
-		 const std::string & font_family, const Data& data);
+	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
+		 const std::string &, const std::string & font_family, const Data & data);
 	//! font family name such as (Arial,Helvetica,Inter)
 	std::string font_family = "";
 	//! Label text.
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index f111af9..1ee3de1 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -13,7 +13,7 @@ Font::Font(const Asset & src, Mediator & mediator)
 	TTF_Font * font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
 	if (font == NULL)
 		throw runtime_error(format("Font: {} (path: {})", TTF_GetError(), FONT_PATH));
-	this->font = { font, [] (TTF_Font * font) { TTF_CloseFont(font); } };
+	this->font = {font, [](TTF_Font * font) { TTF_CloseFont(font); }};
 }
 
 TTF_Font * Font::get_font() const { return this->font.get(); }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index f7d5b50..e93bfe9 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -35,7 +35,7 @@ public:
 
 private:
 	//! The SDL_ttf font object with custom deleter.
-	std::unique_ptr<TTF_Font, std::function<void(TTF_Font*)>> font;
+	std::unique_ptr<TTF_Font, std::function<void(TTF_Font *)>> font;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 47dda81..d1d109c 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -6,8 +6,8 @@
 #include <SDL2/SDL_rect.h>
 #include <SDL2/SDL_render.h>
 #include <SDL2/SDL_surface.h>
-#include <SDL2/SDL_video.h>
 #include <SDL2/SDL_ttf.h>
+#include <SDL2/SDL_video.h>
 #include <array>
 #include <cmath>
 #include <cstddef>
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 6020908..dae64bc 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -14,13 +14,13 @@ int main() {
 	SDLContext sdl_context{mediator};
 	try {
 		// Correct way to create a unique pointer for Text
-		std::unique_ptr<Text> label
-			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol",Text::Data{});
+		std::unique_ptr<Text> label = std::make_unique<Text>(
+			1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol", Text::Data{});
 		Asset asset = font_facade.get_font_asset(label->font_family);
 		std::cout << "path: " << asset.get_path() << std::endl;
 		std::unique_ptr<Font> font = std::make_unique<Font>(asset, mediator);
 		// Get the TTF_Font from the Font object
-		TTF_Font* ttf_font = font->get_font();
+		TTF_Font * ttf_font = font->get_font();
 		//example if the asset is not correct for font
 		//std::unique_ptr<Font> fontThrow = std::make_unique<Font>(Asset("../help.txt"), mediator);
 		// Check if the font is loaded properly
-- 
cgit v1.2.3


From d33dbdff59693377d06d83225b0fe78c3168c464 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Mon, 16 Dec 2024 22:56:42 +0100
Subject: segmentation fault fixed

---
 src/crepe/facade/Font.cpp   |  7 ++++---
 src/example/FontExample.cpp | 17 +++++++++++------
 2 files changed, 15 insertions(+), 9 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 1ee3de1..333e500 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -10,10 +10,11 @@ Font::Font(const Asset & src, Mediator & mediator)
 	  font(nullptr, TTF_CloseFont) {
 	Config & config = Config::get_instance();
 	const std::string FONT_PATH = src.get_path();
-	TTF_Font * font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
-	if (font == NULL)
+	TTF_Font * loaded_font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
+	if (loaded_font == NULL) {
 		throw runtime_error(format("Font: {} (path: {})", TTF_GetError(), FONT_PATH));
-	this->font = {font, [](TTF_Font * font) { TTF_CloseFont(font); }};
+	}
+	this->font = {loaded_font, [](TTF_Font * font) { TTF_CloseFont(font); }};
 }
 
 TTF_Font * Font::get_font() const { return this->font.get(); }
diff --git a/src/example/FontExample.cpp b/src/example/FontExample.cpp
index 620cf8e..c2f21c4 100644
--- a/src/example/FontExample.cpp
+++ b/src/example/FontExample.cpp
@@ -7,7 +7,9 @@
 #include <crepe/manager/EventManager.h>
 #include <crepe/api/Scene.h>
 #include <crepe/api/Script.h>
+#include <crepe/api/LoopManager.h>
 #include <crepe/api/GameObject.h>
+#include <crepe/api/Camera.h>
 #include <exception>
 #include <iostream>
 #include <memory>
@@ -25,7 +27,7 @@ class TestScript : public Script{
 		auto now = steady_clock::now();
         auto elapsed = duration_cast<seconds>(now - start_time).count();
 
-        if (elapsed >= 1) {
+        if (elapsed >= 5) {
 			Mediator& med = mediator;
             EventManager& event_mgr = med.event_manager;
 			event_mgr.trigger_event<ShutDownEvent>();
@@ -37,15 +39,18 @@ class TestScene : public Scene{
 	void load_scene() override{
 		GameObject text_object = this->new_object("test","test",vec2{0,0},0,1);
 		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "test test",
-									 "OpenSymbol", Text::Data{});
-		text_object.add_component<BehaviorScript>();
+									 "Noto Sans", Text::Data{});
+		text_object.add_component<BehaviorScript>().set_script<TestScript>();
+		text_object.add_component<Camera>(ivec2{300,300},vec2{100,100},Camera::Data{
+		});
 
 	}
-	std::string get_name(){ return "hey";}
+	std::string get_name() const override { return "hey"; }
 };
 int main() {
-
-
+	LoopManager engine;
+	engine.add_scene<TestScene>();
+	engine.start();
 
 	return 0;
 }
-- 
cgit v1.2.3


From fce10251d772af129531896965a908dc6d881c4b Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Mon, 16 Dec 2024 23:00:13 +0100
Subject: small changes

---
 src/crepe/facade/Font.cpp       | 1 +
 src/crepe/facade/Font.h         | 4 +++-
 src/crepe/facade/FontFacade.cpp | 1 -
 3 files changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 333e500..74dfe18 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -1,4 +1,5 @@
 #include "../api/Config.h"
+#include "../api/Asset.h"
 
 #include "Font.h"
 
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index e93bfe9..3ff156f 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -1,13 +1,14 @@
 #pragma once
+
 #include <SDL2/SDL_ttf.h>
 #include <memory>
 
 #include "../Resource.h"
-#include "../api/Asset.h"
 #include "../api/Config.h"
 
 namespace crepe {
 
+class Asset;
 /**
  * \brief Resource for managing font creation and destruction
  *
@@ -16,6 +17,7 @@ namespace crepe {
  * when this object is destroyed.
  */
 class Font : public Resource {
+
 public:
 	/**
      * \param src The Asset containing the font file path and metadata to load the font.
diff --git a/src/crepe/facade/FontFacade.cpp b/src/crepe/facade/FontFacade.cpp
index a63b022..4a991c6 100644
--- a/src/crepe/facade/FontFacade.cpp
+++ b/src/crepe/facade/FontFacade.cpp
@@ -1,4 +1,3 @@
-#include <SDL2/SDL_ttf.h>
 #include <fontconfig/fontconfig.h>
 #include <stdexcept>
 
-- 
cgit v1.2.3


From d63eb7302d05fbe9b4c044ece3444e8ac4e56e02 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Mon, 16 Dec 2024 23:00:33 +0100
Subject: make format

---
 src/crepe/api/Script.h          |  2 +-
 src/crepe/facade/Font.cpp       |  2 +-
 src/crepe/facade/FontFacade.cpp |  2 +-
 src/example/FontExample.cpp     | 52 +++++++++++++++++++----------------------
 src/example/loadfont.cpp        | 18 +++++++-------
 5 files changed, 36 insertions(+), 40 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index ee45b8d..a24e32e 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -191,7 +191,7 @@ private:
 	//! Reference to parent component
 	OptionalRef<bool> active;
 	//! Mediator reference
-	
+
 	//! \}
 
 private:
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 74dfe18..d419974 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -1,5 +1,5 @@
-#include "../api/Config.h"
 #include "../api/Asset.h"
+#include "../api/Config.h"
 
 #include "Font.h"
 
diff --git a/src/crepe/facade/FontFacade.cpp b/src/crepe/facade/FontFacade.cpp
index 4a991c6..aa9d00c 100644
--- a/src/crepe/facade/FontFacade.cpp
+++ b/src/crepe/facade/FontFacade.cpp
@@ -15,7 +15,7 @@ Asset FontFacade::get_font_asset(const string font_family) {
 	if (pattern == NULL) {
 		throw runtime_error("Failed to create font pattern.");
 	}
-	
+
 	// Default configuration
 	FcConfig * config = FcConfigGetCurrent();
 	if (config == NULL) {
diff --git a/src/example/FontExample.cpp b/src/example/FontExample.cpp
index c2f21c4..3f5af48 100644
--- a/src/example/FontExample.cpp
+++ b/src/example/FontExample.cpp
@@ -1,49 +1,45 @@
-#include <crepe/api/Text.h>
 #include <SDL2/SDL_ttf.h>
+#include <chrono>
+#include <crepe/api/Camera.h>
+#include <crepe/api/GameObject.h>
+#include <crepe/api/LoopManager.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Script.h>
+#include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
 #include <crepe/facade/SDLContext.h>
+#include <crepe/manager/EventManager.h>
 #include <crepe/manager/Mediator.h>
 #include <crepe/manager/ResourceManager.h>
-#include <crepe/manager/EventManager.h>
-#include <crepe/api/Scene.h>
-#include <crepe/api/Script.h>
-#include <crepe/api/LoopManager.h>
-#include <crepe/api/GameObject.h>
-#include <crepe/api/Camera.h>
 #include <exception>
 #include <iostream>
 #include <memory>
-#include <chrono>
 using namespace crepe;
 using namespace std;
 using namespace std::chrono;
-class TestScript : public Script{
-	public:
+class TestScript : public Script {
+public:
 	steady_clock::time_point start_time;
-	virtual void init() override{
-		start_time = steady_clock::now();
-	}
-	virtual void update() override{
+	virtual void init() override { start_time = steady_clock::now(); }
+	virtual void update() override {
 		auto now = steady_clock::now();
-        auto elapsed = duration_cast<seconds>(now - start_time).count();
+		auto elapsed = duration_cast<seconds>(now - start_time).count();
 
-        if (elapsed >= 5) {
-			Mediator& med = mediator;
-            EventManager& event_mgr = med.event_manager;
+		if (elapsed >= 5) {
+			Mediator & med = mediator;
+			EventManager & event_mgr = med.event_manager;
 			event_mgr.trigger_event<ShutDownEvent>();
-        }
+		}
 	}
 };
-class TestScene : public Scene{
-	public:
-	void load_scene() override{
-		GameObject text_object = this->new_object("test","test",vec2{0,0},0,1);
-		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "test test",
-									 "Noto Sans", Text::Data{});
+class TestScene : public Scene {
+public:
+	void load_scene() override {
+		GameObject text_object = this->new_object("test", "test", vec2{0, 0}, 0, 1);
+		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "test test", "Noto Sans",
+										Text::Data{});
 		text_object.add_component<BehaviorScript>().set_script<TestScript>();
-		text_object.add_component<Camera>(ivec2{300,300},vec2{100,100},Camera::Data{
-		});
-
+		text_object.add_component<Camera>(ivec2{300, 300}, vec2{100, 100}, Camera::Data{});
 	}
 	std::string get_name() const override { return "hey"; }
 };
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index f863053..ce287b4 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -1,5 +1,5 @@
-#include <crepe/api/Text.h>
 #include <SDL2/SDL_ttf.h>
+#include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
 #include <crepe/facade/SDLContext.h>
 #include <crepe/manager/Mediator.h>
@@ -25,14 +25,14 @@ int main() {
 			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test",
 									 "fsaafdafsdafsdafsdasfdds", Text::Data{});
 		std::cout << "Path: " << label2->font.get_path() << std::endl;
-	ResourceManager & resource_mgr = mediator.resource_manager;
-	const Font & res = resource_manager.get<Font>(label->font);
-	TTF_Font * test_font = res.get_font();
-	if(test_font == NULL){
-		std::cout << "error with font" << std::endl;
-	}else{
-		std::cout << "correct font retrieved" << std::endl;
-	}
+		ResourceManager & resource_mgr = mediator.resource_manager;
+		const Font & res = resource_manager.get<Font>(label->font);
+		TTF_Font * test_font = res.get_font();
+		if (test_font == NULL) {
+			std::cout << "error with font" << std::endl;
+		} else {
+			std::cout << "correct font retrieved" << std::endl;
+		}
 	} catch (const std::exception & e) {
 		std::cout << "Standard exception thrown: " << e.what() << std::endl;
 	}
-- 
cgit v1.2.3


From 3b5b5258b0f46a3492a7fd777908dfb01e15417b Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Tue, 17 Dec 2024 10:48:43 +0100
Subject: code not working

---
 src/crepe/facade/Font.cpp         |  4 +++-
 src/crepe/facade/Font.h           |  7 +++++++
 src/crepe/facade/FontFacade.cpp   |  6 +++---
 src/crepe/facade/FontFacade.h     |  2 +-
 src/crepe/system/RenderSystem.cpp | 10 ++++++++++
 5 files changed, 24 insertions(+), 5 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index d419974..5af943d 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -1,3 +1,5 @@
+#include <SDL2/SDL_ttf.h>
+
 #include "../api/Asset.h"
 #include "../api/Config.h"
 
@@ -15,7 +17,7 @@ Font::Font(const Asset & src, Mediator & mediator)
 	if (loaded_font == NULL) {
 		throw runtime_error(format("Font: {} (path: {})", TTF_GetError(), FONT_PATH));
 	}
-	this->font = {loaded_font, [](TTF_Font * font) { TTF_CloseFont(font); }};
+	this->font = {loaded_font, [](TTF_Font * close_font) { TTF_CloseFont(close_font); }};
 }
 
 TTF_Font * Font::get_font() const { return this->font.get(); }
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index 3ff156f..16f8cb6 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -24,7 +24,14 @@ public:
      * \param mediator The Mediator object used for managing the SDL context or related systems.
      */
 	Font(const Asset & src, Mediator & mediator);
+    	Font(const Font &) = delete;
+    	Font &operator=(const Font &) = delete;
 
+   	// Default move constructor and move assignment operator
+    	Font(Font &&) noexcept = delete;
+    	Font &operator=(Font &&) noexcept = delete;
+
+    ~Font() = default;
 	/**
      * \brief Gets the underlying TTF_Font resource.
      * 
diff --git a/src/crepe/facade/FontFacade.cpp b/src/crepe/facade/FontFacade.cpp
index aa9d00c..d447b6d 100644
--- a/src/crepe/facade/FontFacade.cpp
+++ b/src/crepe/facade/FontFacade.cpp
@@ -6,7 +6,7 @@
 using namespace crepe;
 using namespace std;
 
-Asset FontFacade::get_font_asset(const string font_family) {
+Asset FontFacade::get_font_asset(const string& font_family) {
 	if (!FcInit()) {
 		throw runtime_error("Failed to initialize Fontconfig.");
 	}
@@ -19,7 +19,7 @@ Asset FontFacade::get_font_asset(const string font_family) {
 	// Default configuration
 	FcConfig * config = FcConfigGetCurrent();
 	if (config == NULL) {
-		FcPatternDestroy(pattern);
+		// FcPatternDestroy(pattern);
 		throw runtime_error("Failed to get current Fontconfig configuration.");
 	}
 
@@ -37,7 +37,7 @@ Asset FontFacade::get_font_asset(const string font_family) {
 	FcChar8 * file_path = nullptr;
 	if (FcPatternGetString(matched_pattern, FC_FILE, 0, &file_path) != FcResultMatch
 		|| file_path == NULL) {
-		FcPatternDestroy(matched_pattern);
+		// FcPatternDestroy(matched_pattern);
 		throw runtime_error("Failed to get font file path.");
 	}
 
diff --git a/src/crepe/facade/FontFacade.h b/src/crepe/facade/FontFacade.h
index 0e6b7da..fc200d6 100644
--- a/src/crepe/facade/FontFacade.h
+++ b/src/crepe/facade/FontFacade.h
@@ -22,7 +22,7 @@ public:
 	 * \param font_family Name of the font family name.
 	 * \return Asset with filepath to the font.
 	 */
-	static Asset get_font_asset(const std::string font_family);
+	static Asset get_font_asset(const std::string& font_family);
 };
 
 } // namespace crepe
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index afd9548..5aa00b5 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -8,6 +8,8 @@
 #include "../api/Camera.h"
 #include "../api/ParticleEmitter.h"
 #include "../api/Sprite.h"
+#include "../api/Text.h"
+#include "../facade/Font.h"
 #include "../api/Transform.h"
 #include "../facade/SDLContext.h"
 #include "../facade/Texture.h"
@@ -120,8 +122,13 @@ void RenderSystem::render() {
 	this->update_camera();
 
 	RefVector<Sprite> sprites = mgr.get_components_by_type<Sprite>();
+	ResourceManager & resource_manager = this->mediator.resource_manager;
 	RefVector<Sprite> sorted_sprites = this->sort(sprites);
+	RefVector<Text> texts =  mgr.get_components_by_type<Text>();
+	for(const Text& text : texts){
+		const Font & res = resource_manager.get<Font>(text.font);
 
+	}
 	for (const Sprite & sprite : sorted_sprites) {
 		if (!sprite.active) continue;
 		const Transform & transform
@@ -132,5 +139,8 @@ void RenderSystem::render() {
 		if (rendered_particles) continue;
 
 		this->render_normal(sprite, transform);
+		
+	
+		
 	}
 }
-- 
cgit v1.2.3


From b99f5fc0f52fdd4ec96be844e643060503a8860b Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Tue, 17 Dec 2024 13:22:34 +0100
Subject: text now working with optional

---
 src/crepe/api/Asset.h             |  2 +-
 src/crepe/api/LoopManager.h       |  7 ++++---
 src/crepe/api/Script.h            |  5 +++--
 src/crepe/api/Text.cpp            |  8 +++++---
 src/crepe/api/Text.h              | 15 +++++++++++----
 src/crepe/facade/Font.cpp         |  3 +--
 src/crepe/facade/Font.h           | 10 +---------
 src/crepe/facade/FontFacade.cpp   | 11 ++++++++---
 src/crepe/facade/FontFacade.h     | 12 +++++++++---
 src/crepe/facade/SDLContext.cpp   |  5 +++++
 src/crepe/facade/SDLContext.h     | 15 +++++++++++++++
 src/crepe/system/RenderSystem.cpp | 28 +++++++++++++++++++++++++---
 src/crepe/system/RenderSystem.h   | 10 ++++++++--
 src/example/FontExample.cpp       |  6 ++++--
 src/example/loadfont.cpp          | 31 ++++++++++++++++++-------------
 15 files changed, 118 insertions(+), 50 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Asset.h b/src/crepe/api/Asset.h
index bfd0ac7..b367a92 100644
--- a/src/crepe/api/Asset.h
+++ b/src/crepe/api/Asset.h
@@ -37,7 +37,7 @@ public:
 
 private:
 	//! path to asset
-	const std::string src;
+	std::string src;
 
 private:
 	/**
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index 40e6b38..1725810 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -71,7 +71,9 @@ private:
 private:
 	//! Global context
 	Mediator mediator;
-
+	
+	//! SDLContext instance
+	SDLContext sdl_context{mediator};
 	//! Component manager instance
 	ComponentManager component_manager{mediator};
 	//! Scene manager instance
@@ -84,8 +86,7 @@ private:
 	ResourceManager resource_manager{mediator};
 	//! Save manager instance
 	SaveManager save_manager{mediator};
-	//! SDLContext instance
-	SDLContext sdl_context{mediator};
+	
 
 private:
 	/**
diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index a24e32e..4503525 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -156,7 +156,7 @@ private:
 	void subscribe_internal(const EventHandler<EventType> & callback, event_channel_t channel);
 
 protected:
-	OptionalRef<Mediator> mediator;
+	
 	// NOTE: This must be the only constructor on Script, see "Late references" below
 	Script() = default;
 	//! Only \c BehaviorScript instantiates Script
@@ -186,12 +186,13 @@ private:
 	 *
 	 * \{
 	 */
+
 	//! Game object ID of game object parent BehaviorScript is attached to
 	game_object_id_t game_object_id;
 	//! Reference to parent component
 	OptionalRef<bool> active;
 	//! Mediator reference
-
+	OptionalRef<Mediator> mediator;
 	//! \}
 
 private:
diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index 5b2befe..0624c98 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -4,9 +4,11 @@
 
 using namespace crepe;
 
-Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
-		   const std::string & text, const std::string & font_family, const Data & data)
+Text::Text(game_object_id_t id, const vec2 & dimensions,const vec2 & offset, const std::string & font_family,
+	const Data & data, const std::string & text, std::optional<Asset> font)
 	: UIObject(id, dimensions, offset),
 	  text(text),
 	  data(data),
-	  font(FontFacade::get_font_asset(font_family)) {}
+	  font_family(font_family),
+	  font(font) {
+}
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index ec0bf74..ab72bc0 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <string>
+#include <optional> 
 
 #include "../Component.h"
 
@@ -47,15 +48,21 @@ public:
 	 * \param text The text to be displayed.
 	 * \param font_family The font style name to be displayed.
 	 * \param data Data struct containing extra text parameters.
+	 * \param font Optional font asset that can be passed or left empty.
 	 */
-	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
-		 const std::string & text, const std::string & font_family, const Data & data);
+	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, 
+     const std::string & font_family, const Data & data, 
+     const std::string & text = "", std::optional<Asset> font = std::nullopt);
+	
 	//! Label text.
 	std::string text = "";
-	//! Font asset variable
-	const Asset font;
+	//! font family name
+	std::string font_family = "";
+	//! Font asset variable if this is not set, it will use the font_family to create an asset.
+	std::optional<Asset> font;
 	//! Data instance
 	Data data;
+	
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 5af943d..558641f 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -9,8 +9,7 @@ using namespace std;
 using namespace crepe;
 
 Font::Font(const Asset & src, Mediator & mediator)
-	: Resource(src, mediator),
-	  font(nullptr, TTF_CloseFont) {
+	: Resource(src, mediator){
 	Config & config = Config::get_instance();
 	const std::string FONT_PATH = src.get_path();
 	TTF_Font * loaded_font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
diff --git a/src/crepe/facade/Font.h b/src/crepe/facade/Font.h
index 16f8cb6..b208d96 100644
--- a/src/crepe/facade/Font.h
+++ b/src/crepe/facade/Font.h
@@ -24,14 +24,6 @@ public:
      * \param mediator The Mediator object used for managing the SDL context or related systems.
      */
 	Font(const Asset & src, Mediator & mediator);
-    	Font(const Font &) = delete;
-    	Font &operator=(const Font &) = delete;
-
-   	// Default move constructor and move assignment operator
-    	Font(Font &&) noexcept = delete;
-    	Font &operator=(Font &&) noexcept = delete;
-
-    ~Font() = default;
 	/**
      * \brief Gets the underlying TTF_Font resource.
      * 
@@ -44,7 +36,7 @@ public:
 
 private:
 	//! The SDL_ttf font object with custom deleter.
-	std::unique_ptr<TTF_Font, std::function<void(TTF_Font *)>> font;
+	std::unique_ptr<TTF_Font, std::function<void(TTF_Font *)>> font = nullptr;
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/FontFacade.cpp b/src/crepe/facade/FontFacade.cpp
index d447b6d..0a8ba5f 100644
--- a/src/crepe/facade/FontFacade.cpp
+++ b/src/crepe/facade/FontFacade.cpp
@@ -1,4 +1,5 @@
 #include <fontconfig/fontconfig.h>
+#include <iostream>
 #include <stdexcept>
 
 #include "FontFacade.h"
@@ -6,10 +7,16 @@
 using namespace crepe;
 using namespace std;
 
-Asset FontFacade::get_font_asset(const string& font_family) {
+FontFacade::FontFacade(){
 	if (!FcInit()) {
 		throw runtime_error("Failed to initialize Fontconfig.");
 	}
+}
+FontFacade::~FontFacade(){
+	FcFini();
+}
+Asset FontFacade::get_font_asset(const string& font_family) {
+	
 	// Create a pattern to search for the font family
 	FcPattern * pattern = FcNameParse(reinterpret_cast<const FcChar8 *>(font_family.c_str()));
 	if (pattern == NULL) {
@@ -32,7 +39,6 @@ Asset FontFacade::get_font_asset(const string& font_family) {
 		FcPatternDestroy(matched_pattern);
 		throw runtime_error("No matching font found.");
 	}
-
 	// Extract the file path
 	FcChar8 * file_path = nullptr;
 	if (FcPatternGetString(matched_pattern, FC_FILE, 0, &file_path) != FcResultMatch
@@ -44,6 +50,5 @@ Asset FontFacade::get_font_asset(const string& font_family) {
 	// Convert the file path to a string
 	string font_file_path = reinterpret_cast<const char *>(file_path);
 	FcPatternDestroy(matched_pattern);
-	FcFini();
 	return Asset(font_file_path);
 }
diff --git a/src/crepe/facade/FontFacade.h b/src/crepe/facade/FontFacade.h
index fc200d6..2e08f3f 100644
--- a/src/crepe/facade/FontFacade.h
+++ b/src/crepe/facade/FontFacade.h
@@ -13,16 +13,22 @@ namespace crepe {
  */
 class FontFacade {
 public:
+	FontFacade();
+	~FontFacade();
+    FontFacade(const FontFacade & other) = delete;
+    FontFacade & operator=(const FontFacade & other) = delete;
+    FontFacade(FontFacade && other) noexcept = delete;
+    FontFacade & operator=(FontFacade && other) noexcept = delete;
 	/**
 	 * 
 	 * \brief Facade function to convert a font_family into an asset.
 	 * 
 	 * This function uses the FontConfig library to convert a font family name (Arial, Inter, Helvetica) and converts it to the font source path.
-	 * This function is static so the member function can be used without create a FontFacade object. This way it can be used in a constructor as FontFacade::get_font_asset().
+	 * This function returns a default font path if the font_family name doesnt exist or cant be found
 	 * \param font_family Name of the font family name.
-	 * \return Asset with filepath to the font.
+	 * \return Asset with filepath to the corresponding font.
 	 */
-	static Asset get_font_asset(const std::string& font_family);
+	Asset get_font_asset(const std::string& font_family);
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index d1d109c..8ffaad9 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -434,7 +434,12 @@ std::vector<SDLContext::EventData> SDLContext::get_events() {
 	}
 	return event_list;
 }
+
 void SDLContext::set_color_texture(const Texture & texture, const Color & color) {
 	SDL_SetTextureColorMod(texture.get_img(), color.r, color.g, color.b);
 	SDL_SetTextureAlphaMod(texture.get_img(), color.a);
 }
+
+Asset SDLContext::get_font_from_name(const std::string& font_family){
+	return this->font_facade.get_font_asset(font_family);
+}
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index efdd6fe..ffa3cc0 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -17,6 +17,7 @@
 #include "api/Transform.h"
 #include "types.h"
 
+#include "FontFacade.h"
 namespace crepe {
 
 class Texture;
@@ -239,6 +240,20 @@ private:
 	 * - this is defined in this class because get_events() needs this information aswell
 	 */
 	CameraAuxiliaryData cam_aux_data;
+private: 
+	//! instance of the font_facade
+	FontFacade font_facade{};
+public:
+	/**
+	 * \brief Function to Get asset from font_family
+	 * 
+	 * This function uses the FontFacade function to convert a font_family to an asset.
+	 * 
+	 * \param font_family name of the font style that needs to be used (will return an asset with default font path of the font_family doesnt exist)
+	 * 
+	 * \return asset with the font style absolute path
+	 */
+	Asset get_font_from_name(const std::string& font_family);
 };
 
 } // namespace crepe
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index 5aa00b5..18f6393 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -2,6 +2,7 @@
 #include <cassert>
 #include <cmath>
 #include <functional>
+#include <optional>
 #include <stdexcept>
 #include <vector>
 
@@ -22,6 +23,7 @@
 using namespace crepe;
 using namespace std;
 
+
 void RenderSystem::clear_screen() {
 	SDLContext & ctx = this->mediator.sdl_context;
 	ctx.clear_screen();
@@ -124,9 +126,11 @@ void RenderSystem::render() {
 	RefVector<Sprite> sprites = mgr.get_components_by_type<Sprite>();
 	ResourceManager & resource_manager = this->mediator.resource_manager;
 	RefVector<Sprite> sorted_sprites = this->sort(sprites);
-	RefVector<Text> texts =  mgr.get_components_by_type<Text>();
-	for(const Text& text : texts){
-		const Font & res = resource_manager.get<Font>(text.font);
+	RefVector<Text> text_components =  mgr.get_components_by_type<Text>();
+	for(Text& text : text_components){
+		const Transform & transform
+			= mgr.get_components_by_id<Transform>(text.game_object_id).front().get();
+		this->render_text(text,transform);
 
 	}
 	for (const Sprite & sprite : sorted_sprites) {
@@ -143,4 +147,22 @@ void RenderSystem::render() {
 	
 		
 	}
+	
 }
+void RenderSystem::render_text(Text & text, const Transform & tm) {
+    SDLContext & ctx = this->mediator.sdl_context;
+
+    // Check if font is available in text
+    if (!text.font.has_value()) {
+    }
+
+    ResourceManager & resource_manager = this->mediator.resource_manager;
+
+    if (text.font.has_value()) {
+        const Asset& font_asset = text.font.value();
+        const Font & res = resource_manager.get<Font>(font_asset); 
+	}
+}
+
+
+
diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h
index fc7b46e..56a0553 100644
--- a/src/crepe/system/RenderSystem.h
+++ b/src/crepe/system/RenderSystem.h
@@ -10,7 +10,7 @@ namespace crepe {
 class Camera;
 class Sprite;
 class Transform;
-
+class Text;
 /**
  * \brief Manages rendering operations for all game objects.
  *
@@ -50,7 +50,13 @@ private:
 	 * \return true if particles have been rendered
 	 */
 	bool render_particle(const Sprite & sprite, const double & scale);
-
+	/**
+	 * \brief Renders all Text components
+	 *
+	 * \param text The text component to be rendered.
+	 * \param tm the Transform component that holds the position,rotation and scale
+	 */
+	void render_text(Text & text, const Transform & tm);
 	/**
 	 * \brief renders a sprite with a Transform component on the screen
 	 *
diff --git a/src/example/FontExample.cpp b/src/example/FontExample.cpp
index 3f5af48..7b2dadb 100644
--- a/src/example/FontExample.cpp
+++ b/src/example/FontExample.cpp
@@ -11,6 +11,7 @@
 #include <crepe/manager/EventManager.h>
 #include <crepe/manager/Mediator.h>
 #include <crepe/manager/ResourceManager.h>
+#include <crepe/api/Config.h>
 #include <exception>
 #include <iostream>
 #include <memory>
@@ -36,14 +37,15 @@ class TestScene : public Scene {
 public:
 	void load_scene() override {
 		GameObject text_object = this->new_object("test", "test", vec2{0, 0}, 0, 1);
-		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "test test", "Noto Sans",
-										Text::Data{});
+		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{});
 		text_object.add_component<BehaviorScript>().set_script<TestScript>();
 		text_object.add_component<Camera>(ivec2{300, 300}, vec2{100, 100}, Camera::Data{});
 	}
 	std::string get_name() const override { return "hey"; }
 };
 int main() {
+	// Config& config = Config::get_instance();
+	// config.log.level = Log::Level::TRACE;
 	LoopManager engine;
 	engine.add_scene<TestScene>();
 	engine.start();
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index ce287b4..9d59afc 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -2,10 +2,12 @@
 #include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
 #include <crepe/facade/SDLContext.h>
+#include <crepe/api/Asset.h>
 #include <crepe/manager/Mediator.h>
 #include <crepe/manager/ResourceManager.h>
 #include <exception>
 #include <iostream>
+#include <optional>
 #include <memory>
 using namespace crepe;
 int main() {
@@ -18,21 +20,24 @@ int main() {
 	try {
 		// Correct way to create a unique pointer for Text
 		std::unique_ptr<Text> label = std::make_unique<Text>(
-			1, vec2(100, 100), vec2(0, 0), "test test", "OpenSymbol", Text::Data{});
-		std::cout << "Path: " << label->font.get_path() << std::endl;
+			1, vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{},"test text", Asset(""));
+		// std::cout << "Path: " << label->font.get_path() << std::endl;
 
 		std::unique_ptr<Text> label2
-			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0), "test test",
-									 "fsaafdafsdafsdafsdasfdds", Text::Data{});
-		std::cout << "Path: " << label2->font.get_path() << std::endl;
-		ResourceManager & resource_mgr = mediator.resource_manager;
-		const Font & res = resource_manager.get<Font>(label->font);
-		TTF_Font * test_font = res.get_font();
-		if (test_font == NULL) {
-			std::cout << "error with font" << std::endl;
-		} else {
-			std::cout << "correct font retrieved" << std::endl;
-		}
+			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0),"fsaafdafsdafsdafsdasfdds", Text::Data{});
+		Asset asset = Asset("test test");
+		label->font = std::make_optional(asset);
+		std::cout << label->font.value().get_path() << std::endl;
+		// label2->font = std::make_optional(asset);
+		// std::cout << "Path: " << label2->font.get_path() << std::endl;
+		// ResourceManager & resource_mgr = mediator.resource_manager;
+		// const Font & res = resource_manager.get<Font>(label->font);
+		// TTF_Font * test_font = res.get_font();
+		// if (test_font == NULL) {
+		// 	std::cout << "error with font" << std::endl;
+		// } else {
+		// 	std::cout << "correct font retrieved" << std::endl;
+		// }
 	} catch (const std::exception & e) {
 		std::cout << "Standard exception thrown: " << e.what() << std::endl;
 	}
-- 
cgit v1.2.3


From 69ca7fdd738fd4ed98aefc07bab5a43486a55619 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Tue, 17 Dec 2024 13:34:19 +0100
Subject: final changes

---
 src/crepe/api/LoopManager.h       |  3 +--
 src/crepe/api/Script.h            |  1 -
 src/crepe/api/Text.cpp            |  8 ++++----
 src/crepe/api/Text.h              | 11 +++++------
 src/crepe/facade/Font.cpp         |  3 +--
 src/crepe/facade/FontFacade.cpp   | 10 ++++------
 src/crepe/facade/FontFacade.h     | 10 +++++-----
 src/crepe/facade/SDLContext.cpp   |  2 +-
 src/crepe/facade/SDLContext.h     |  6 ++++--
 src/crepe/system/RenderSystem.cpp | 35 ++++++++++++++---------------------
 src/example/FontExample.cpp       |  5 +++--
 src/example/loadfont.cpp          | 10 +++++-----
 12 files changed, 47 insertions(+), 57 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index 1725810..1d23cbf 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -71,7 +71,7 @@ private:
 private:
 	//! Global context
 	Mediator mediator;
-	
+
 	//! SDLContext instance
 	SDLContext sdl_context{mediator};
 	//! Component manager instance
@@ -86,7 +86,6 @@ private:
 	ResourceManager resource_manager{mediator};
 	//! Save manager instance
 	SaveManager save_manager{mediator};
-	
 
 private:
 	/**
diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index 4503525..8bca38a 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -156,7 +156,6 @@ private:
 	void subscribe_internal(const EventHandler<EventType> & callback, event_channel_t channel);
 
 protected:
-	
 	// NOTE: This must be the only constructor on Script, see "Late references" below
 	Script() = default;
 	//! Only \c BehaviorScript instantiates Script
diff --git a/src/crepe/api/Text.cpp b/src/crepe/api/Text.cpp
index 0624c98..58dc6c6 100644
--- a/src/crepe/api/Text.cpp
+++ b/src/crepe/api/Text.cpp
@@ -4,11 +4,11 @@
 
 using namespace crepe;
 
-Text::Text(game_object_id_t id, const vec2 & dimensions,const vec2 & offset, const std::string & font_family,
-	const Data & data, const std::string & text, std::optional<Asset> font)
+Text::Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
+		   const std::string & font_family, const Data & data, const std::string & text,
+		   std::optional<Asset> font)
 	: UIObject(id, dimensions, offset),
 	  text(text),
 	  data(data),
 	  font_family(font_family),
-	  font(font) {
-}
+	  font(font) {}
diff --git a/src/crepe/api/Text.h b/src/crepe/api/Text.h
index ab72bc0..92cca18 100644
--- a/src/crepe/api/Text.h
+++ b/src/crepe/api/Text.h
@@ -1,7 +1,7 @@
 #pragma once
 
+#include <optional>
 #include <string>
-#include <optional> 
 
 #include "../Component.h"
 
@@ -50,10 +50,10 @@ public:
 	 * \param data Data struct containing extra text parameters.
 	 * \param font Optional font asset that can be passed or left empty.
 	 */
-	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, 
-     const std::string & font_family, const Data & data, 
-     const std::string & text = "", std::optional<Asset> font = std::nullopt);
-	
+	Text(game_object_id_t id, const vec2 & dimensions, const vec2 & offset,
+		 const std::string & font_family, const Data & data, const std::string & text = "",
+		 std::optional<Asset> font = std::nullopt);
+
 	//! Label text.
 	std::string text = "";
 	//! font family name
@@ -62,7 +62,6 @@ public:
 	std::optional<Asset> font;
 	//! Data instance
 	Data data;
-	
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index 558641f..f202c05 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -8,8 +8,7 @@
 using namespace std;
 using namespace crepe;
 
-Font::Font(const Asset & src, Mediator & mediator)
-	: Resource(src, mediator){
+Font::Font(const Asset & src, Mediator & mediator) : Resource(src, mediator) {
 	Config & config = Config::get_instance();
 	const std::string FONT_PATH = src.get_path();
 	TTF_Font * loaded_font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
diff --git a/src/crepe/facade/FontFacade.cpp b/src/crepe/facade/FontFacade.cpp
index 08ff31c..7edfeb8 100644
--- a/src/crepe/facade/FontFacade.cpp
+++ b/src/crepe/facade/FontFacade.cpp
@@ -6,16 +6,14 @@
 using namespace crepe;
 using namespace std;
 
-FontFacade::FontFacade(){
+FontFacade::FontFacade() {
 	if (!FcInit()) {
 		throw runtime_error("Failed to initialize Fontconfig.");
 	}
 }
-FontFacade::~FontFacade(){
-	FcFini();
-}
-Asset FontFacade::get_font_asset(const string& font_family) {
-	
+FontFacade::~FontFacade() { FcFini(); }
+Asset FontFacade::get_font_asset(const string & font_family) {
+
 	// Create a pattern to search for the font family
 	FcPattern * pattern = FcNameParse(reinterpret_cast<const FcChar8 *>(font_family.c_str()));
 	if (pattern == NULL) {
diff --git a/src/crepe/facade/FontFacade.h b/src/crepe/facade/FontFacade.h
index 2e08f3f..9761070 100644
--- a/src/crepe/facade/FontFacade.h
+++ b/src/crepe/facade/FontFacade.h
@@ -15,10 +15,10 @@ class FontFacade {
 public:
 	FontFacade();
 	~FontFacade();
-    FontFacade(const FontFacade & other) = delete;
-    FontFacade & operator=(const FontFacade & other) = delete;
-    FontFacade(FontFacade && other) noexcept = delete;
-    FontFacade & operator=(FontFacade && other) noexcept = delete;
+	FontFacade(const FontFacade & other) = delete;
+	FontFacade & operator=(const FontFacade & other) = delete;
+	FontFacade(FontFacade && other) noexcept = delete;
+	FontFacade & operator=(FontFacade && other) noexcept = delete;
 	/**
 	 * 
 	 * \brief Facade function to convert a font_family into an asset.
@@ -28,7 +28,7 @@ public:
 	 * \param font_family Name of the font family name.
 	 * \return Asset with filepath to the corresponding font.
 	 */
-	Asset get_font_asset(const std::string& font_family);
+	Asset get_font_asset(const std::string & font_family);
 };
 
 } // namespace crepe
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 8ffaad9..c88687e 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -440,6 +440,6 @@ void SDLContext::set_color_texture(const Texture & texture, const Color & color)
 	SDL_SetTextureAlphaMod(texture.get_img(), color.a);
 }
 
-Asset SDLContext::get_font_from_name(const std::string& font_family){
+Asset SDLContext::get_font_from_name(const std::string & font_family) {
 	return this->font_facade.get_font_asset(font_family);
 }
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index e348ff6..6f6eddb 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -241,9 +241,11 @@ private:
 	 * - this is defined in this class because get_events() needs this information aswell
 	 */
 	CameraAuxiliaryData cam_aux_data;
-private: 
+
+private:
 	//! instance of the font_facade
 	FontFacade font_facade{};
+
 public:
 	/**
 	 * \brief Function to Get asset from font_family
@@ -254,7 +256,7 @@ public:
 	 * 
 	 * \return asset with the font style absolute path
 	 */
-	Asset get_font_from_name(const std::string& font_family);
+	Asset get_font_from_name(const std::string & font_family);
 };
 
 } // namespace crepe
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index 5fc98a9..a03c636 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -10,8 +10,8 @@
 #include "../api/ParticleEmitter.h"
 #include "../api/Sprite.h"
 #include "../api/Text.h"
-#include "../facade/Font.h"
 #include "../api/Transform.h"
+#include "../facade/Font.h"
 #include "../facade/SDLContext.h"
 #include "../facade/Texture.h"
 #include "../manager/ComponentManager.h"
@@ -23,7 +23,6 @@
 using namespace crepe;
 using namespace std;
 
-
 void RenderSystem::clear_screen() {
 	SDLContext & ctx = this->mediator.sdl_context;
 	ctx.clear_screen();
@@ -126,12 +125,11 @@ void RenderSystem::render() {
 	RefVector<Sprite> sprites = mgr.get_components_by_type<Sprite>();
 	ResourceManager & resource_manager = this->mediator.resource_manager;
 	RefVector<Sprite> sorted_sprites = this->sort(sprites);
-	RefVector<Text> text_components =  mgr.get_components_by_type<Text>();
-	for(Text& text : text_components){
+	RefVector<Text> text_components = mgr.get_components_by_type<Text>();
+	for (Text & text : text_components) {
 		const Transform & transform
 			= mgr.get_components_by_id<Transform>(text.game_object_id).front().get();
-		this->render_text(text,transform);
-
+		this->render_text(text, transform);
 	}
 	for (const Sprite & sprite : sorted_sprites) {
 		if (!sprite.active) continue;
@@ -143,25 +141,20 @@ void RenderSystem::render() {
 		if (rendered_particles) continue;
 
 		this->render_normal(sprite, transform);
-		
-	
-		
 	}
-	
 }
 void RenderSystem::render_text(Text & text, const Transform & tm) {
-    SDLContext & ctx = this->mediator.sdl_context;
+	SDLContext & ctx = this->mediator.sdl_context;
 
-    if (!text.font.has_value()) {
-        text.font = ctx.get_font_from_name(text.font_family);
-    }
+	if (!text.font.has_value()) {
+		text.font = ctx.get_font_from_name(text.font_family);
+	}
 
-    ResourceManager & resource_manager = this->mediator.resource_manager;
+	ResourceManager & resource_manager = this->mediator.resource_manager;
 
-    if (!text.font.has_value()) {return;}
-        const Asset& font_asset = text.font.value();
-        const Font & res = resource_manager.get<Font>(font_asset); 
+	if (!text.font.has_value()) {
+		return;
+	}
+	const Asset & font_asset = text.font.value();
+	const Font & res = resource_manager.get<Font>(font_asset);
 }
-
-
-
diff --git a/src/example/FontExample.cpp b/src/example/FontExample.cpp
index 7b2dadb..6a334b1 100644
--- a/src/example/FontExample.cpp
+++ b/src/example/FontExample.cpp
@@ -1,6 +1,7 @@
 #include <SDL2/SDL_ttf.h>
 #include <chrono>
 #include <crepe/api/Camera.h>
+#include <crepe/api/Config.h>
 #include <crepe/api/GameObject.h>
 #include <crepe/api/LoopManager.h>
 #include <crepe/api/Scene.h>
@@ -11,7 +12,6 @@
 #include <crepe/manager/EventManager.h>
 #include <crepe/manager/Mediator.h>
 #include <crepe/manager/ResourceManager.h>
-#include <crepe/api/Config.h>
 #include <exception>
 #include <iostream>
 #include <memory>
@@ -37,7 +37,8 @@ class TestScene : public Scene {
 public:
 	void load_scene() override {
 		GameObject text_object = this->new_object("test", "test", vec2{0, 0}, 0, 1);
-		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{});
+		text_object.add_component<Text>(vec2(100, 100), vec2(0, 0), "OpenSymbol",
+										Text::Data{});
 		text_object.add_component<BehaviorScript>().set_script<TestScript>();
 		text_object.add_component<Camera>(ivec2{300, 300}, vec2{100, 100}, Camera::Data{});
 	}
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 36d00dd..ed67ffa 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -1,14 +1,14 @@
 #include <SDL2/SDL_ttf.h>
+#include <crepe/api/Asset.h>
 #include <crepe/api/Text.h>
 #include <crepe/facade/Font.h>
 #include <crepe/facade/SDLContext.h>
-#include <crepe/api/Asset.h>
 #include <crepe/manager/Mediator.h>
 #include <crepe/manager/ResourceManager.h>
 #include <exception>
 #include <iostream>
-#include <optional>
 #include <memory>
+#include <optional>
 using namespace crepe;
 int main() {
 
@@ -20,11 +20,11 @@ int main() {
 	try {
 		// Correct way to create a unique pointer for Text
 		std::unique_ptr<Text> label = std::make_unique<Text>(
-			1, vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{},"test text", Asset(""));
+			1, vec2(100, 100), vec2(0, 0), "OpenSymbol", Text::Data{}, "test text", Asset(""));
 		// std::cout << "Path: " << label->font.get_path() << std::endl;
 
-		std::unique_ptr<Text> label2
-			= std::make_unique<Text>(1, vec2(100, 100), vec2(0, 0),"fsaafdafsdafsdafsdasfdds", Text::Data{});
+		std::unique_ptr<Text> label2 = std::make_unique<Text>(
+			1, vec2(100, 100), vec2(0, 0), "fsaafdafsdafsdafsdasfdds", Text::Data{});
 		Asset asset = Asset("test test");
 		label->font = asset;
 		std::cout << label->font.value().get_path() << std::endl;
-- 
cgit v1.2.3


From 4080a2eec207b35b36f7d0ceae7c2afcfcdfd977 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Tue, 17 Dec 2024 14:44:48 +0100
Subject: small changes

---
 src/crepe/api/Script.h    | 1 -
 src/crepe/facade/Font.cpp | 2 +-
 src/example/loadfont.cpp  | 4 ++--
 3 files changed, 3 insertions(+), 4 deletions(-)

(limited to 'src/crepe/facade/Font.cpp')

diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h
index 8bca38a..668e5d1 100644
--- a/src/crepe/api/Script.h
+++ b/src/crepe/api/Script.h
@@ -185,7 +185,6 @@ private:
 	 *
 	 * \{
 	 */
-
 	//! Game object ID of game object parent BehaviorScript is attached to
 	game_object_id_t game_object_id;
 	//! Reference to parent component
diff --git a/src/crepe/facade/Font.cpp b/src/crepe/facade/Font.cpp
index f202c05..771002f 100644
--- a/src/crepe/facade/Font.cpp
+++ b/src/crepe/facade/Font.cpp
@@ -9,7 +9,7 @@ using namespace std;
 using namespace crepe;
 
 Font::Font(const Asset & src, Mediator & mediator) : Resource(src, mediator) {
-	Config & config = Config::get_instance();
+	const Config & config = Config::get_instance();
 	const std::string FONT_PATH = src.get_path();
 	TTF_Font * loaded_font = TTF_OpenFont(FONT_PATH.c_str(), config.font.size);
 	if (loaded_font == NULL) {
diff --git a/src/example/loadfont.cpp b/src/example/loadfont.cpp
index 6fb9760..78b3adb 100644
--- a/src/example/loadfont.cpp
+++ b/src/example/loadfont.cpp
@@ -30,8 +30,8 @@ int main() {
 		std::cout << label->font.value().get_path() << std::endl;
 		// label2->font = std::make_optional(asset);
 		// std::cout << "Path: " << label2->font.get_path() << std::endl;
-		// ResourceManager & resource_mgr = mediator.resource_manager;
-		// const Font & res = resource_manager.get<Font>(label->font);
+		ResourceManager & resource_mgr = mediator.resource_manager;
+		const Font & res = resource_manager.get<Font>(label->font.value());
 		// TTF_Font * test_font = res.get_font();
 		// if (test_font == NULL) {
 		// 	std::cout << "error with font" << std::endl;
-- 
cgit v1.2.3