From b59995f9732720e8c82e22f44c0c8cb3efe2c708 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 4 Aug 2025 18:10:36 +0200 Subject: changes to label visibility --- include/glamac_render.h | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'include/glamac_render.h') diff --git a/include/glamac_render.h b/include/glamac_render.h index 546bafe..a07e055 100644 --- a/include/glamac_render.h +++ b/include/glamac_render.h @@ -21,7 +21,7 @@ void draw_glass_properties(SDL_Renderer *renderer, TTF_Font *font, TTF_Font *tit void draw_help_window(SDL_Renderer *renderer, TTF_Font *font, TTF_Font *titleFont, const ViewState* view); // Main render function -void render(SDL_Renderer *renderer, TTF_Font *font, TTF_Font *titleFont, TTF_Font *labelFont, const ViewState* view, GlassCluster* clusters, i32 clusterCount); +void render(SDL_Renderer *renderer, TTF_Font *font, TTF_Font *titleFont, TTF_Font *labelFont, ViewState* view, GlassCluster* clusters, i32 clusterCount); // Font management typedef struct { @@ -40,8 +40,33 @@ b32 load_adaptive_fonts(FontSet *fonts, i32 windowWidth, i32 windowHeight, f32 d void free_fonts(FontSet *fonts); void clear_text_cache(void); -// Static label positioning -void calculate_static_label_positions(GlassCluster* clusters, i32 clusterCount, const ViewState* view); -void cleanup_static_label_positions(void); +// Simple collision detection structures +typedef struct { + i32 x, y; // Screen position + i32 width, height; // Label dimensions +} LabelRect; + +// Pre-calculated label positions (updated only on catalog changes) +typedef struct { + i32 glassIndex; // Which glass this label belongs to + i32 screenX, screenY; // Fixed screen position + b32 visible; // Whether to show this label + char text[64]; // Label text +} PreCalculatedLabel; + +// Global label positioning system +void recalculate_label_positions(const ViewState* view, GlassCluster* clusters, i32 clusterCount); +void draw_precalculated_labels(SDL_Renderer *renderer, TTF_Font *labelFont, const ViewState* view); +b32 needs_label_recalculation(ViewState* view); + +// Collision detection functions for debug mode +b32 rects_overlap(const LabelRect* a, const LabelRect* b); +b32 label_collides_with_point(const LabelRect* label, i32 pointX, i32 pointY, i32 pointRadius); + +// Advanced label visibility functions for testing +void calculate_smart_window_position(i32 glassX, i32 glassY, i32 windowWidth, i32 windowHeight, + const ViewState* view, i32* windowX, i32* windowY); +f32 calculate_label_priority(i32 glassIndex, const ViewState* view, GlassCluster* clusters, i32 clusterCount); +b32 should_show_label_advanced(i32 glassIndex, const ViewState* view, GlassCluster* clusters, i32 clusterCount); #endif /* GLAMAC_RENDER_H */ -- cgit v1.2.3