refactor(mac): adapt `LITE_USE_SDL_RENDERER` scaling to new windowing system
This commit is contained in:
parent
adb64e6784
commit
9dd4b81b39
|
@ -3,6 +3,9 @@
|
|||
#include "api.h"
|
||||
#include "../renderer.h"
|
||||
#include "../rencache.h"
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
#include "../renwindow.h"
|
||||
#endif
|
||||
#include "lua.h"
|
||||
|
||||
RenWindow *active_window_renderer = NULL;
|
||||
|
@ -116,7 +119,7 @@ static bool font_retrieve(lua_State* L, RenFont** fonts, int idx) {
|
|||
}
|
||||
}
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
update_font_scale(window_renderer, fonts);
|
||||
update_font_scale(active_window_renderer, fonts);
|
||||
#endif
|
||||
return is_table;
|
||||
}
|
||||
|
@ -226,7 +229,13 @@ static int f_font_get_size(lua_State *L) {
|
|||
static int f_font_set_size(lua_State *L) {
|
||||
RenFont* fonts[FONT_FALLBACK_MAX]; font_retrieve(L, fonts, 1);
|
||||
float size = luaL_checknumber(L, 2);
|
||||
ren_font_group_set_size(fonts, size);
|
||||
int scale = 1;
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
if (active_window_renderer != NULL) {
|
||||
scale = renwin_get_surface(active_window_renderer).scale;
|
||||
}
|
||||
#endif
|
||||
ren_font_group_set_size(fonts, size, scale);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,10 +68,11 @@ typedef struct RenFont {
|
|||
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
void update_font_scale(RenWindow *window_renderer, RenFont **fonts) {
|
||||
if (window_renderer == NULL) return;
|
||||
const int surface_scale = renwin_get_surface(window_renderer).scale;
|
||||
for (int i = 0; i < FONT_FALLBACK_MAX && fonts[i]; ++i) {
|
||||
if (fonts[i]->scale != surface_scale) {
|
||||
ren_font_group_set_size(window_renderer, fonts, fonts[0]->size);
|
||||
ren_font_group_set_size(fonts, fonts[0]->size, surface_scale);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -274,6 +275,9 @@ RenFont* ren_font_load(const char* path, float size, ERenFontAntialiasing antial
|
|||
strcpy(font->path, path);
|
||||
font->face = face;
|
||||
font->size = size;
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
font->scale = 1;
|
||||
#endif
|
||||
font->height = (short)((face->height / (float)face->units_per_EM) * font->size);
|
||||
font->baseline = (short)((face->ascender / (float)face->units_per_EM) * font->size);
|
||||
font->antialiasing = antialiasing;
|
||||
|
@ -344,11 +348,11 @@ float ren_font_group_get_size(RenFont **fonts) {
|
|||
return fonts[0]->size;
|
||||
}
|
||||
|
||||
void ren_font_group_set_size(RenFont **fonts, float size) {
|
||||
void ren_font_group_set_size(RenFont **fonts, float size, int surface_scale) {
|
||||
for (int i = 0; i < FONT_FALLBACK_MAX && fonts[i]; ++i) {
|
||||
font_clear_glyph_cache(fonts[i]);
|
||||
FT_Face face = fonts[i]->face;
|
||||
FT_Set_Pixel_Sizes(face, 0, (int)(size));
|
||||
FT_Set_Pixel_Sizes(face, 0, (int)(size*surface_scale));
|
||||
fonts[i]->size = size;
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
fonts[i]->scale = surface_scale;
|
||||
|
@ -385,7 +389,11 @@ double ren_font_group_get_width(RenFont **fonts, const char *text, size_t len, i
|
|||
if (!set_x_offset) {
|
||||
*x_offset = 0;
|
||||
}
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
return width / fonts[0]->scale;
|
||||
#else
|
||||
return width;
|
||||
#endif
|
||||
}
|
||||
|
||||
double ren_draw_text(RenSurface *rs, RenFont **fonts, const char *text, size_t len, float x, int y, RenColor color) {
|
||||
|
@ -597,6 +605,10 @@ void ren_get_size(RenWindow *window_renderer, int *x, int *y) {
|
|||
RenSurface rs = renwin_get_surface(window_renderer);
|
||||
*x = rs.surface->w;
|
||||
*y = rs.surface->h;
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
*x /= rs.scale;
|
||||
*y /= rs.scale;
|
||||
#endif
|
||||
}
|
||||
|
||||
size_t ren_get_window_list(RenWindow ***window_list_dest) {
|
||||
|
|
|
@ -31,7 +31,7 @@ void ren_font_free(RenFont *font);
|
|||
int ren_font_group_get_tab_size(RenFont **font);
|
||||
int ren_font_group_get_height(RenFont **font);
|
||||
float ren_font_group_get_size(RenFont **font);
|
||||
void ren_font_group_set_size(RenFont **font, float size);
|
||||
void ren_font_group_set_size(RenFont **font, float size, int surface_scale);
|
||||
#ifdef LITE_USE_SDL_RENDERER
|
||||
void update_font_scale(RenWindow *window_renderer, RenFont **fonts);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue