shithub: m8c

Download patch

ref: b7ca6e794ffc102046aa76e101484d3a4ddb30aa
parent: f40979e430491ad0c6fccaa961c57cf14b170c4f
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Sat Jun 15 15:33:19 EDT 2024

fix #148 support variable texture sizes in device disconnected screen

--- a/src/fx_cube.c
+++ b/src/fx_cube.c
@@ -1,20 +1,17 @@
 #include "SDL2_inprint.h"
 #include "SDL_pixels.h"
+#include "SDL_render.h"
 #include <SDL.h>
+#include <time.h>
 
-#define target_width 320
-#define target_height 240
 static SDL_Texture *texture_cube;
 static SDL_Texture *texture_text;
 static SDL_Renderer *fx_renderer;
 static SDL_Color line_color;
 
-const char *text_m8c = "M8C";
-const char *text_disconnected = "DEVICE DISCONNECTED";
+static unsigned int center_x = 320 / 2;
+static unsigned int center_y = 240 / 2;
 
-static const float center_x = (float)target_width / 2;
-static const float center_y = (float)target_height / 2;
-
 static const float default_nodes[8][3] = {{-1, -1, -1}, {-1, -1, 1}, {-1, 1, -1}, {-1, 1, 1},
                                           {1, -1, -1},  {1, -1, 1},  {1, 1, -1},  {1, 1, 1}};
 
@@ -51,24 +48,30 @@
   }
 }
 
-void fx_cube_init(SDL_Renderer *target_renderer, SDL_Color foreground_color) {
+void fx_cube_init(SDL_Renderer *target_renderer, SDL_Color foreground_color,
+                  unsigned int texture_width, unsigned int texture_height,
+                  unsigned int font_glyph_width) {
 
   fx_renderer = target_renderer;
   line_color = foreground_color;
+  SDL_Point texture_size;
 
+  SDL_Texture *og_target = SDL_GetRenderTarget(fx_renderer);
+
+  SDL_QueryTexture(og_target, NULL, NULL, &texture_size.x, &texture_size.y);
+
   texture_cube = SDL_CreateTexture(fx_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET,
-                                   target_width, target_height);
+                                   texture_size.x, texture_size.y);
   texture_text = SDL_CreateTexture(fx_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET,
-                                   target_width, target_height);
+                                   texture_size.x, texture_size.y);
 
-  SDL_Texture *og_target = SDL_GetRenderTarget(fx_renderer);
-
   SDL_SetRenderTarget(fx_renderer, texture_text);
   SDL_SetRenderDrawColor(fx_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
   SDL_RenderClear(fx_renderer);
 
-  inprint(fx_renderer, text_disconnected, 130, 228, 0xFFFFFF, 0x000000);
-  inprint(fx_renderer, text_m8c, 2, 2, 0xFFFFFF, 0x000000);
+  inprint(fx_renderer, "DEVICE DISCONNECTED", texture_width - font_glyph_width * 19 - 21,
+          texture_height - 12, 0xFFFFFF, 0x000000);
+  inprint(fx_renderer, "M8C", 2, 2, 0xFFFFFF, 0x000000);
 
   SDL_SetRenderTarget(fx_renderer, og_target);
 
@@ -80,6 +83,9 @@
 
   SDL_SetTextureBlendMode(texture_cube, SDL_BLENDMODE_BLEND);
   SDL_SetTextureBlendMode(texture_text, SDL_BLENDMODE_BLEND);
+
+  center_x = texture_size.x / 2.0;
+  center_y = texture_size.y / 2.0;
 }
 
 void fx_cube_destroy() {
--- a/src/fx_cube.h
+++ b/src/fx_cube.h
@@ -2,7 +2,9 @@
 #define FX_CUBE_H_
 
 #include "SDL_render.h"
-void fx_cube_init(SDL_Renderer *target_renderer, SDL_Color foreground_color);
+void fx_cube_init(SDL_Renderer *target_renderer, SDL_Color foreground_color,
+                  unsigned int texture_width, unsigned int texture_height,
+                  unsigned int font_glyph_width);
 void fx_cube_destroy();
 void fx_cube_update();
 #endif
\ No newline at end of file
--- a/src/render.c
+++ b/src/render.c
@@ -318,7 +318,8 @@
 
 void screensaver_init() {
   set_font_mode(1);
-  fx_cube_init(rend, (SDL_Color){255, 255, 255, 255});
+  fx_cube_init(rend, (SDL_Color){255, 255, 255, 255}, texture_width, texture_height,
+               fonts[font_mode]->glyph_x);
   SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "Screensaver initialized");
 }
 
--