From c111b4a7f0bc931e006cf0a625e68648b572864e Mon Sep 17 00:00:00 2001 From: M4xw Date: Fri, 11 Jan 2019 23:48:52 +0100 Subject: [PATCH] Fix double semicolon and format line endings --- gfx/drivers/switch_nx_gfx.c | 4 +- gfx/drivers_font/switch_font.c | 708 ++++++++++++++++----------------- 2 files changed, 356 insertions(+), 356 deletions(-) diff --git a/gfx/drivers/switch_nx_gfx.c b/gfx/drivers/switch_nx_gfx.c index 93d1d7b86d..46fd5a6345 100644 --- a/gfx/drivers/switch_nx_gfx.c +++ b/gfx/drivers/switch_nx_gfx.c @@ -448,7 +448,7 @@ static bool switch_frame(void *data, const void *frame, if (sw->in_menu && !video_info->menu_is_alive && sw->smooth) { - memset(out_buffer, 0, stride * sw->vp.full_height);; + memset(out_buffer, 0, stride * sw->vp.full_height); nwindowSetDimensions(sw->win, sw->hw_scale.width, sw->hw_scale.height); } sw->in_menu = video_info->menu_is_alive; @@ -462,7 +462,7 @@ static bool switch_frame(void *data, const void *frame, #ifdef HAVE_NXRGUI gfx_cpy_dsp_buf(out_buffer, nx_backgroundImage, sw->vp.full_width, sw->vp.full_height, stride, false); #else - memset(out_buffer, 0, stride * sw->vp.full_height);; + memset(out_buffer, 0, stride * sw->vp.full_height); #endif scaler_ctx_scale(&sw->menu_texture.scaler, sw->tmp_image + ((sw->vp.full_height - sw->menu_texture.tgth) / 2) * sw->vp.full_width + ((sw->vp.full_width - sw->menu_texture.tgtw) / 2), sw->menu_texture.pixels); gfx_cpy_dsp_buf(out_buffer, sw->tmp_image, sw->vp.full_width, sw->vp.full_height, stride, true); diff --git a/gfx/drivers_font/switch_font.c b/gfx/drivers_font/switch_font.c index e9489bdb1d..d5f3a46897 100644 --- a/gfx/drivers_font/switch_font.c +++ b/gfx/drivers_font/switch_font.c @@ -1,354 +1,354 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2018 - lifajucejo - * Copyright (C) 2018 - m4xw - * Copyright (C) 2018 - natinusala - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include -#include -#include -#include -#include - -#include - -#include "../font_driver.h" -#include "../video_driver.h" - -#include "../../verbosity.h" - -#include "../common/switch_common.h" - -typedef struct -{ - struct font_atlas *atlas; - - const font_renderer_driver_t *font_driver; - void *font_data; -} switch_font_t; - -static void *switch_font_init_font(void *data, const char *font_path, - float font_size, bool is_threaded) -{ - switch_font_t *font = (switch_font_t *)calloc(1, sizeof(switch_font_t)); - - if (!font) - return NULL; - - if (!font_renderer_create_default((const void **)&font->font_driver, - &font->font_data, font_path, font_size)) - { - RARCH_WARN("Couldn't initialize font renderer.\n"); - free(font); - return NULL; - } - - font->atlas = font->font_driver->get_atlas(font->font_data); - - RARCH_LOG("Switch font driver initialized with backend %s\n", font->font_driver->ident); - - return font; -} - -static void switch_font_free_font(void *data, bool is_threaded) -{ - switch_font_t *font = (switch_font_t *)data; - - if (!font) - return; - - if (font->font_driver && font->font_data) - font->font_driver->free(font->font_data); - - free(font); -} - -static int switch_font_get_message_width(void *data, const char *msg, - unsigned msg_len, float scale) -{ - switch_font_t *font = (switch_font_t *)data; - - unsigned i; - int delta_x = 0; - - if (!font) - return 0; - - for (i = 0; i < msg_len; i++) - { - const char *msg_tmp = &msg[i]; - unsigned code = utf8_walk(&msg_tmp); - unsigned skip = msg_tmp - &msg[i]; - - if (skip > 1) - i += skip - 1; - - const struct font_glyph *glyph = - font->font_driver->get_glyph(font->font_data, code); - - if (!glyph) /* Do something smarter here ... */ - glyph = font->font_driver->get_glyph(font->font_data, '?'); - - if (!glyph) - continue; - - delta_x += glyph->advance_x; - } - - return delta_x * scale; -} - -static void switch_font_render_line( - video_frame_info_t *video_info, - switch_font_t *font, const char *msg, unsigned msg_len, - float scale, const unsigned int color, float pos_x, - float pos_y, unsigned text_align) -{ - switch_video_t* sw = (switch_video_t*)video_info->userdata; - - if(!sw) - return; - - int delta_x = 0; - int delta_y = 0; - - unsigned fbWidth = sw->vp.full_width; - unsigned fbHeight = sw->vp.full_height; - - if (sw->out_buffer) { - - int x = roundf(pos_x * fbWidth); - int y = roundf((1.0f - pos_y) * fbHeight); - - switch (text_align) - { - case TEXT_ALIGN_RIGHT: - x -= switch_font_get_message_width(font, msg, msg_len, scale); - break; - case TEXT_ALIGN_CENTER: - x -= switch_font_get_message_width(font, msg, msg_len, scale) / 2; - break; - } - - for (int i = 0; i < msg_len; i++) - { - int off_x, off_y, tex_x, tex_y, width, height; - const char *msg_tmp = &msg[i]; - unsigned code = utf8_walk(&msg_tmp); - unsigned skip = msg_tmp - &msg[i]; - - if (skip > 1) - i += skip - 1; - - const struct font_glyph *glyph = - font->font_driver->get_glyph(font->font_data, code); - - if (!glyph) /* Do something smarter here ... */ - glyph = font->font_driver->get_glyph(font->font_data, '?'); - - if (!glyph) - continue; - - off_x = x + glyph->draw_offset_x + delta_x; - off_y = y + glyph->draw_offset_y + delta_y; - width = glyph->width; - height = glyph->height; - - tex_x = glyph->atlas_offset_x; - tex_y = glyph->atlas_offset_y; - - for (int y = tex_y; y < tex_y + height; y++) - { - uint8_t *row = &font->atlas->buffer[y * font->atlas->width]; - for (int x = tex_x; x < tex_x + width; x++) - { - if (!row[x]) - continue; - int x1 = off_x + (x - tex_x); - int y1 = off_y + (y - tex_y); - if (x1 < fbWidth && y1 < fbHeight) - sw->out_buffer[y1 * sw->stride / sizeof(uint32_t) + x1] = color; - } - } - - delta_x += glyph->advance_x; - delta_y += glyph->advance_y; - } - } -} - -#define AVG_GLPYH_LIMIT 140 -static void switch_font_render_message( - video_frame_info_t *video_info, - switch_font_t *font, const char *msg, float scale, - const unsigned int color, float pos_x, float pos_y, - unsigned text_align) -{ - int lines = 0; - float line_height; - - if (!msg || !*msg) - return; - - /* If the font height is not supported just draw as usual */ - if (!font->font_driver->get_line_height) - { - int msgLen = strlen(msg); - if (msgLen <= AVG_GLPYH_LIMIT) - { - switch_font_render_line(video_info, font, msg, strlen(msg), - scale, color, pos_x, pos_y, text_align); - } - return; - } - line_height = scale / font->font_driver->get_line_height(font->font_data); - - for (;;) - { - const char *delim = strchr(msg, '\n'); - - /* Draw the line */ - if (delim) - { - unsigned msg_len = delim - msg; - if (msg_len <= AVG_GLPYH_LIMIT) - { - switch_font_render_line(video_info, font, msg, msg_len, - scale, color, pos_x, pos_y - (float)lines * line_height, - text_align); - } - msg += msg_len + 1; - lines++; - } - else - { - unsigned msg_len = strlen(msg); - if (msg_len <= AVG_GLPYH_LIMIT) - { - switch_font_render_line(video_info, font, msg, msg_len, - scale, color, pos_x, pos_y - (float)lines * line_height, - text_align); - } - break; - } - } -} - -static void switch_font_render_msg( - video_frame_info_t *video_info, - void *data, const char *msg, - const struct font_params *params) -{ - float x, y, scale, drop_mod, drop_alpha; - int drop_x, drop_y; - unsigned max_glyphs; - enum text_alignment text_align; - unsigned color, color_dark, r, g, b, - alpha, r_dark, g_dark, b_dark, alpha_dark; - switch_font_t *font = (switch_font_t *)data; - unsigned width = video_info->width; - unsigned height = video_info->height; - - if (!font || !msg || msg && !*msg) - return; - - if (params) - { - x = params->x; - y = params->y; - scale = params->scale; - text_align = params->text_align; - drop_x = params->drop_x; - drop_y = params->drop_y; - drop_mod = params->drop_mod; - drop_alpha = params->drop_alpha; - - r = FONT_COLOR_GET_RED(params->color); - g = FONT_COLOR_GET_GREEN(params->color); - b = FONT_COLOR_GET_BLUE(params->color); - alpha = FONT_COLOR_GET_ALPHA(params->color); - - color = params->color; - } - else - { - x = 0.0f; - y = 0.0f; - scale = 1.0f; - text_align = TEXT_ALIGN_LEFT; - - r = (video_info->font_msg_color_r * 255); - g = (video_info->font_msg_color_g * 255); - b = (video_info->font_msg_color_b * 255); - alpha = 255; - color = COLOR_ABGR(r, g, b, alpha); - - drop_x = -2; - drop_y = -2; - drop_mod = 0.3f; - drop_alpha = 1.0f; - } - - max_glyphs = strlen(msg); - - /*if (drop_x || drop_y) - max_glyphs *= 2; - - if (drop_x || drop_y) - { - r_dark = r * drop_mod; - g_dark = g * drop_mod; - b_dark = b * drop_mod; - alpha_dark = alpha * drop_alpha; - color_dark = COLOR_ABGR(r_dark, g_dark, b_dark, alpha_dark); - - switch_font_render_message(video_info, font, msg, scale, color_dark, - x + scale * drop_x / width, y + - scale * drop_y / height, text_align); - }*/ - - switch_font_render_message(video_info, font, msg, scale, - color, x, y, text_align); -} - -static const struct font_glyph *switch_font_get_glyph( - void *data, uint32_t code) -{ - switch_font_t *font = (switch_font_t *)data; - - if (!font || !font->font_driver) - return NULL; - - if (!font->font_driver->ident) - return NULL; - - return font->font_driver->get_glyph((void *)font->font_driver, code); -} - -static void switch_font_bind_block(void *data, void *userdata) -{ - (void)data; -} - -font_renderer_t switch_font = - { - switch_font_init_font, - switch_font_free_font, - switch_font_render_msg, - "switchfont", - switch_font_get_glyph, - switch_font_bind_block, - NULL, /* flush_block */ - switch_font_get_message_width, -}; +/* RetroArch - A frontend for libretro. + * Copyright (C) 2018 - lifajucejo + * Copyright (C) 2018 - m4xw + * Copyright (C) 2018 - natinusala + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include + +#include + +#include "../font_driver.h" +#include "../video_driver.h" + +#include "../../verbosity.h" + +#include "../common/switch_common.h" + +typedef struct +{ + struct font_atlas *atlas; + + const font_renderer_driver_t *font_driver; + void *font_data; +} switch_font_t; + +static void *switch_font_init_font(void *data, const char *font_path, + float font_size, bool is_threaded) +{ + switch_font_t *font = (switch_font_t *)calloc(1, sizeof(switch_font_t)); + + if (!font) + return NULL; + + if (!font_renderer_create_default((const void **)&font->font_driver, + &font->font_data, font_path, font_size)) + { + RARCH_WARN("Couldn't initialize font renderer.\n"); + free(font); + return NULL; + } + + font->atlas = font->font_driver->get_atlas(font->font_data); + + RARCH_LOG("Switch font driver initialized with backend %s\n", font->font_driver->ident); + + return font; +} + +static void switch_font_free_font(void *data, bool is_threaded) +{ + switch_font_t *font = (switch_font_t *)data; + + if (!font) + return; + + if (font->font_driver && font->font_data) + font->font_driver->free(font->font_data); + + free(font); +} + +static int switch_font_get_message_width(void *data, const char *msg, + unsigned msg_len, float scale) +{ + switch_font_t *font = (switch_font_t *)data; + + unsigned i; + int delta_x = 0; + + if (!font) + return 0; + + for (i = 0; i < msg_len; i++) + { + const char *msg_tmp = &msg[i]; + unsigned code = utf8_walk(&msg_tmp); + unsigned skip = msg_tmp - &msg[i]; + + if (skip > 1) + i += skip - 1; + + const struct font_glyph *glyph = + font->font_driver->get_glyph(font->font_data, code); + + if (!glyph) /* Do something smarter here ... */ + glyph = font->font_driver->get_glyph(font->font_data, '?'); + + if (!glyph) + continue; + + delta_x += glyph->advance_x; + } + + return delta_x * scale; +} + +static void switch_font_render_line( + video_frame_info_t *video_info, + switch_font_t *font, const char *msg, unsigned msg_len, + float scale, const unsigned int color, float pos_x, + float pos_y, unsigned text_align) +{ + switch_video_t* sw = (switch_video_t*)video_info->userdata; + + if(!sw) + return; + + int delta_x = 0; + int delta_y = 0; + + unsigned fbWidth = sw->vp.full_width; + unsigned fbHeight = sw->vp.full_height; + + if (sw->out_buffer) { + + int x = roundf(pos_x * fbWidth); + int y = roundf((1.0f - pos_y) * fbHeight); + + switch (text_align) + { + case TEXT_ALIGN_RIGHT: + x -= switch_font_get_message_width(font, msg, msg_len, scale); + break; + case TEXT_ALIGN_CENTER: + x -= switch_font_get_message_width(font, msg, msg_len, scale) / 2; + break; + } + + for (int i = 0; i < msg_len; i++) + { + int off_x, off_y, tex_x, tex_y, width, height; + const char *msg_tmp = &msg[i]; + unsigned code = utf8_walk(&msg_tmp); + unsigned skip = msg_tmp - &msg[i]; + + if (skip > 1) + i += skip - 1; + + const struct font_glyph *glyph = + font->font_driver->get_glyph(font->font_data, code); + + if (!glyph) /* Do something smarter here ... */ + glyph = font->font_driver->get_glyph(font->font_data, '?'); + + if (!glyph) + continue; + + off_x = x + glyph->draw_offset_x + delta_x; + off_y = y + glyph->draw_offset_y + delta_y; + width = glyph->width; + height = glyph->height; + + tex_x = glyph->atlas_offset_x; + tex_y = glyph->atlas_offset_y; + + for (int y = tex_y; y < tex_y + height; y++) + { + uint8_t *row = &font->atlas->buffer[y * font->atlas->width]; + for (int x = tex_x; x < tex_x + width; x++) + { + if (!row[x]) + continue; + int x1 = off_x + (x - tex_x); + int y1 = off_y + (y - tex_y); + if (x1 < fbWidth && y1 < fbHeight) + sw->out_buffer[y1 * sw->stride / sizeof(uint32_t) + x1] = color; + } + } + + delta_x += glyph->advance_x; + delta_y += glyph->advance_y; + } + } +} + +#define AVG_GLPYH_LIMIT 140 +static void switch_font_render_message( + video_frame_info_t *video_info, + switch_font_t *font, const char *msg, float scale, + const unsigned int color, float pos_x, float pos_y, + unsigned text_align) +{ + int lines = 0; + float line_height; + + if (!msg || !*msg) + return; + + /* If the font height is not supported just draw as usual */ + if (!font->font_driver->get_line_height) + { + int msgLen = strlen(msg); + if (msgLen <= AVG_GLPYH_LIMIT) + { + switch_font_render_line(video_info, font, msg, strlen(msg), + scale, color, pos_x, pos_y, text_align); + } + return; + } + line_height = scale / font->font_driver->get_line_height(font->font_data); + + for (;;) + { + const char *delim = strchr(msg, '\n'); + + /* Draw the line */ + if (delim) + { + unsigned msg_len = delim - msg; + if (msg_len <= AVG_GLPYH_LIMIT) + { + switch_font_render_line(video_info, font, msg, msg_len, + scale, color, pos_x, pos_y - (float)lines * line_height, + text_align); + } + msg += msg_len + 1; + lines++; + } + else + { + unsigned msg_len = strlen(msg); + if (msg_len <= AVG_GLPYH_LIMIT) + { + switch_font_render_line(video_info, font, msg, msg_len, + scale, color, pos_x, pos_y - (float)lines * line_height, + text_align); + } + break; + } + } +} + +static void switch_font_render_msg( + video_frame_info_t *video_info, + void *data, const char *msg, + const struct font_params *params) +{ + float x, y, scale, drop_mod, drop_alpha; + int drop_x, drop_y; + unsigned max_glyphs; + enum text_alignment text_align; + unsigned color, color_dark, r, g, b, + alpha, r_dark, g_dark, b_dark, alpha_dark; + switch_font_t *font = (switch_font_t *)data; + unsigned width = video_info->width; + unsigned height = video_info->height; + + if (!font || !msg || msg && !*msg) + return; + + if (params) + { + x = params->x; + y = params->y; + scale = params->scale; + text_align = params->text_align; + drop_x = params->drop_x; + drop_y = params->drop_y; + drop_mod = params->drop_mod; + drop_alpha = params->drop_alpha; + + r = FONT_COLOR_GET_RED(params->color); + g = FONT_COLOR_GET_GREEN(params->color); + b = FONT_COLOR_GET_BLUE(params->color); + alpha = FONT_COLOR_GET_ALPHA(params->color); + + color = params->color; + } + else + { + x = 0.0f; + y = 0.0f; + scale = 1.0f; + text_align = TEXT_ALIGN_LEFT; + + r = (video_info->font_msg_color_r * 255); + g = (video_info->font_msg_color_g * 255); + b = (video_info->font_msg_color_b * 255); + alpha = 255; + color = COLOR_ABGR(r, g, b, alpha); + + drop_x = -2; + drop_y = -2; + drop_mod = 0.3f; + drop_alpha = 1.0f; + } + + max_glyphs = strlen(msg); + + /*if (drop_x || drop_y) + max_glyphs *= 2; + + if (drop_x || drop_y) + { + r_dark = r * drop_mod; + g_dark = g * drop_mod; + b_dark = b * drop_mod; + alpha_dark = alpha * drop_alpha; + color_dark = COLOR_ABGR(r_dark, g_dark, b_dark, alpha_dark); + + switch_font_render_message(video_info, font, msg, scale, color_dark, + x + scale * drop_x / width, y + + scale * drop_y / height, text_align); + }*/ + + switch_font_render_message(video_info, font, msg, scale, + color, x, y, text_align); +} + +static const struct font_glyph *switch_font_get_glyph( + void *data, uint32_t code) +{ + switch_font_t *font = (switch_font_t *)data; + + if (!font || !font->font_driver) + return NULL; + + if (!font->font_driver->ident) + return NULL; + + return font->font_driver->get_glyph((void *)font->font_driver, code); +} + +static void switch_font_bind_block(void *data, void *userdata) +{ + (void)data; +} + +font_renderer_t switch_font = + { + switch_font_init_font, + switch_font_free_font, + switch_font_render_msg, + "switchfont", + switch_font_get_glyph, + switch_font_bind_block, + NULL, /* flush_block */ + switch_font_get_message_width, +};