diff --git a/src/main.c b/src/main.c index a2da402..a89542b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,5 @@ #include +#include #include #include "renderer/clay_renderer_SDL3.h" @@ -22,6 +23,8 @@ #include #include +constexpr SDL_InitFlags sdlInitFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIGH_PIXEL_DENSITY; + SDL_Window *window = nullptr; SDL_Renderer *renderer = nullptr; int screenWidth = 1920, screenHeight = 1080; @@ -58,6 +61,22 @@ void HandleClayErrors(Clay_ErrorData data) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "%s", data.errorText.chars); } +static inline void InitFonts() { + fonts[FONT_DEFAULT] = TTF_OpenFont("assets/AdwaitaSans-Regular.ttf", baseFontSize * 5); + if (fonts[FONT_DEFAULT] == nullptr) { + SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_OpenFont failed: Failed to load adwaita sans: %s", SDL_GetError()); + exit(6); + } + TTF_SetFontHinting(fonts[FONT_DEFAULT], TTF_HINTING_LIGHT_SUBPIXEL); + fonts[FONT_BOLD] = TTF_OpenFont("assets/AdwaitaSans-Regular.ttf", baseFontSize * 5); + if (fonts[FONT_BOLD] == nullptr) { + SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_OpenFont failed: Failed to load adwaita sans bold: %s", SDL_GetError()); + exit(7); + } + TTF_SetFontHinting(fonts[FONT_BOLD], TTF_HINTING_LIGHT_SUBPIXEL); + TTF_SetFontStyle(fonts[FONT_BOLD], TTF_STYLE_BOLD); +} + static inline void InitSDL() { SDL_SetHint(SDL_HINT_RENDER_LINE_METHOD, "3"); @@ -65,11 +84,11 @@ void InitSDL() { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL_Init failed: %s", SDL_GetError()); exit(1); } - if ((window = SDL_CreateWindow("Window", screenWidth, screenHeight, SDL_WINDOW_RESIZABLE)) == nullptr) { + if ((window = SDL_CreateWindow("Window", screenWidth, screenHeight, sdlInitFlags)) == nullptr) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL_CreateWindow failed: %s", SDL_GetError()); exit(2); } - if((renderer = SDL_CreateRenderer(window, NULL)) == nullptr) { + if ((renderer = SDL_CreateRenderer(window, NULL)) == nullptr) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL_CreateRenderer failed: %s", SDL_GetError()); exit(3); } @@ -77,22 +96,15 @@ void InitSDL() { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_Init failed: %s", SDL_GetError()); exit(4); } - if((textEngine = TTF_CreateRendererTextEngine(renderer)) == nullptr) { + if ((textEngine = TTF_CreateRendererTextEngine(renderer)) == nullptr) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_CreateRendererTextEngine failed: %s", SDL_GetError()); exit(5); } - fonts[FONT_DEFAULT] = TTF_OpenFont("assets/AdwaitaSans-Regular.ttf", baseFontSize * 5); - if (fonts[FONT_DEFAULT] == nullptr) { - SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_OpenFont failed: Failed to load adwaita sans: %s", SDL_GetError()); - exit(6); - } - fonts[FONT_BOLD] = TTF_OpenFont("assets/AdwaitaSans-Regular.ttf", baseFontSize * 5); - if (fonts[FONT_BOLD] == nullptr) { - SDL_LogError(SDL_LOG_CATEGORY_ERROR, "TTF_OpenFont failed: Failed to load adwaita sans bold: %s", SDL_GetError()); - exit(6); - } else { - TTF_SetFontStyle(fonts[FONT_BOLD], TTF_STYLE_BOLD); - } + SDL_SetRenderScale(renderer, 1.0/renderScale, 1.0/renderScale); + InitFonts(); + int w, h; + SDL_GetCurrentRenderOutputSize(renderer, &w, &h); + SDL_Log("output size: %i, %d", w, h); } static @@ -125,8 +137,8 @@ int main(int argc, char *argv[]) { break; case SDL_EVENT_WINDOW_RESIZED: Clay_SetLayoutDimensions((Clay_Dimensions){ - event.window.data1, - event.window.data2 + event.window.data1 * (double)renderScale, + event.window.data2 * (double)renderScale }); break; case SDL_EVENT_MOUSE_WHEEL: diff --git a/src/style.h b/src/style.h index d290fa0..25d846f 100644 --- a/src/style.h +++ b/src/style.h @@ -5,14 +5,16 @@ #include #include +constexpr int renderScale = 1; + //////////////////////////////////// // CONTAINER STYLE //////////////////////////////////// -constexpr uint16_t containerGap = 5; +constexpr uint16_t containerGap = 5 * renderScale; constexpr Clay_Padding containerPadding = { - 32, 32, - 16, 16 + 32 * renderScale, 32 * renderScale, + 16 * renderScale, 16 * renderScale }; constexpr Clay_Color containerColors[] = { { 255*0.25, 255*0.25, 255*0.25, 255 }, @@ -25,7 +27,7 @@ constexpr Clay_Sizing layoutExpand = { .height = CLAY_SIZING_GROW(0) }; -constexpr float defaultRadius = 5.f; +constexpr double defaultRadius = 5.0 * renderScale; constexpr Clay_CornerRadius defaultRadiusAll = { defaultRadius, defaultRadius, defaultRadius, defaultRadius @@ -40,7 +42,7 @@ backgroundColor = containerColors[depth_],\ // WINDOW STYLE //////////////////////////////////// -constexpr float windowPadding = 5; +constexpr uint16_t windowPadding = containerGap; constexpr Clay_Color windowBackground = { 255*0.35, 255*0.35, 255*0.35, 255 }; @@ -58,8 +60,8 @@ constexpr Clay_ElementDeclaration windowStyle = { // TEXT STYLE //////////////////////////////////// -constexpr float paragraphGap = 10; -constexpr uint16_t baseFontSize = 16; +constexpr float paragraphGap = 10 * renderScale; +constexpr uint16_t baseFontSize = 16 * renderScale; constexpr Clay_Color textColors[] = { { 250, 250, 250, 255 }, @@ -68,7 +70,8 @@ constexpr Clay_Color textColors[] = { }; constexpr uint16_t headerSizes[] = { - 64, 32, 28, 16 + 64 * renderScale, 32 * renderScale, + 28 * renderScale, 16 * renderScale }; #define TEXT_STYLE(color_)\