Merge pull request #8245 from CidVonHighwind/master

Updated the ozone driver to use variables instead of hardcoded values
This commit is contained in:
Twinaphex 2019-02-12 13:07:41 +01:00 committed by GitHub
commit 694a3b1e2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 180 additions and 85 deletions

View File

@ -4,6 +4,7 @@
* Copyright (C) 2016-2017 - Brad Parker
* Copyright (C) 2018 - Alfredo Monclús
* Copyright (C) 2018 - natinusala
* Copyright (C) 2019 - Patrick Scheurenbrand
*
* 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-
@ -333,6 +334,8 @@ static void ozone_context_reset(void *data, bool is_threaded)
unsigned size;
char font_path[PATH_MAX_LENGTH];
float scale = 1;
ozone_handle_t *ozone = (ozone_handle_t*) data;
if (ozone)
@ -365,6 +368,7 @@ static void ozone_context_reset(void *data, bool is_threaded)
ozone->title_font_glyph_width = FONT_SIZE_TITLE * 3/4;
ozone->entry_font_glyph_width = FONT_SIZE_ENTRIES_LABEL * 3/4;
ozone->sublabel_font_glyph_width = FONT_SIZE_ENTRIES_SUBLABEL * 3/4;
ozone->sidebar_font_glyph_width = FONT_SIZE_SIDEBAR * 3/4;
/* More realistic font size */
size = font_driver_get_message_width(ozone->fonts.title, "a", 1, 1);
@ -376,6 +380,9 @@ static void ozone_context_reset(void *data, bool is_threaded)
size = font_driver_get_message_width(ozone->fonts.entries_sublabel, "a", 1, 1);
if (size)
ozone->sublabel_font_glyph_width = size;
size = font_driver_get_message_width(ozone->fonts.sidebar, "a", 1, 1);
if (size)
ozone->sidebar_font_glyph_width = size;
/* Textures init */
for (i = 0; i < OZONE_TEXTURE_LAST; i++)
@ -468,6 +475,26 @@ static void ozone_context_reset(void *data, bool is_threaded)
}
ozone_restart_cursor_animation(ozone);
/* UI dimensions */
ozone->dimensions.header_height = HEADER_HEIGHT * scale;
ozone->dimensions.footer_height = FOOTER_HEIGHT * scale;
ozone->dimensions.entry_padding_horizontal_half = ENTRY_PADDING_HORIZONTAL_HALF * scale;
ozone->dimensions.entry_padding_horizontal_full = ENTRY_PADDING_HORIZONTAL_FULL * scale;
ozone->dimensions.entry_padding_vertical = ENTRY_PADDING_VERTRICAL * scale;
ozone->dimensions.entry_height = ENTRY_HEIGHT * scale;
ozone->dimensions.entry_padding = ENTRY_PADDING * scale;
ozone->dimensions.entry_icon_size = ENTRY_ICON_SIZE * scale;
ozone->dimensions.entry_icon_padding = ENTRY_ICON_PADDING * scale;
ozone->dimensions.sidebar_width = SIDEBAR_WIDTH * scale;
ozone->dimensions.sidebar_entry_height = SIDEBAR_ENTRY_HEIGHT * scale;
ozone->dimensions.sidebar_padding_horizontal = SIDEBAR_X_PADDING * scale;
ozone->dimensions.sidebar_padding_vertical = SIDEBAR_Y_PADDING * scale;
ozone->dimensions.sidebar_entry_padding_vertical = SIDEBAR_ENTRY_Y_PADDING * scale;
ozone->dimensions.sidebar_entry_icon_size = SIDEBAR_ENTRY_ICON_SIZE * scale;
ozone->dimensions.sidebar_entry_icon_padding = SIDEBAR_ENTRY_ICON_PADDING * scale;
}
}
@ -796,14 +823,14 @@ static void ozone_update_scroll(ozone_handle_t *ozone, bool allow_animation, ozo
video_driver_get_size(NULL, &video_info_height);
current_selection_middle_onscreen = ENTRIES_START_Y + ozone->animations.scroll_y + node->position_y + node->height / 2;
bottom_boundary = video_info_height - 87 - 78;
current_selection_middle_onscreen = ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical + ozone->animations.scroll_y + node->position_y + node->height / 2;
bottom_boundary = video_info_height - ozone->dimensions.header_height - 1 - ozone->dimensions.footer_height;
entries_middle = video_info_height/2;
new_scroll = ozone->animations.scroll_y - (current_selection_middle_onscreen - entries_middle);
if (new_scroll + ozone->entries_height < bottom_boundary)
new_scroll = -(78 + ozone->entries_height - bottom_boundary);
new_scroll = bottom_boundary - ozone->entries_height - ozone->dimensions.entry_padding_vertical * 2;
if (new_scroll > 0)
new_scroll = 0;
@ -897,14 +924,16 @@ static void ozone_compute_entries_position(ozone_handle_t *ozone)
if (!node)
continue;
node->height = (entry.sublabel ? 100 : 60-8);
node->height = ozone->dimensions.entry_height + ozone->dimensions.entry_padding + (entry.sublabel ? 40 : 0);
node->wrap = false;
if (entry.sublabel)
{
char *sublabel_str = menu_entry_get_sublabel(&entry);
word_wrap(sublabel_str, sublabel_str, (video_info_width - 548) / ozone->sublabel_font_glyph_width, false);
int sublable_max_width = video_info_width - ozone->dimensions.sidebar_width -
ozone->dimensions.entry_padding_horizontal_half * 2 - ozone->dimensions.entry_icon_padding * 2;
word_wrap(sublabel_str, sublabel_str, sublable_max_width / ozone->sublabel_font_glyph_width, false);
lines = ozone_count_lines(sublabel_str);
@ -966,7 +995,7 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_frame_info_t *video_i
unsigned timedate_offset = 0;
/* Separator */
menu_display_draw_quad(video_info, 30, 87, video_info->width - 60, 1, video_info->width, video_info->height, ozone->theme->header_footer_separator);
menu_display_draw_quad(video_info, 30, ozone->dimensions.header_height, video_info->width - 60, 1, video_info->width, video_info->height, ozone->theme->header_footer_separator);
/* Title */
ticker.s = title;
@ -977,7 +1006,7 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_frame_info_t *video_i
menu_animation_ticker(&ticker);
ozone_draw_text(video_info, ozone, title, 128, 20 + FONT_SIZE_TITLE, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.title, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone, title, 128, ozone->dimensions.header_height / 2 + FONT_SIZE_TITLE * 3/8, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.title, ozone->theme->text_rgba, false);
/* Icon */
menu_display_blend_begin(video_info);
@ -986,7 +1015,7 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_frame_info_t *video_i
ozone_draw_icon(video_info, 60, 60, ozone->textures[OZONE_TEXTURE_DISCORD_OWN_AVATAR], 47, 14, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
else
#endif
ozone_draw_icon(video_info, 60, 60, ozone->textures[OZONE_TEXTURE_RETROARCH], 47, 14, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
ozone_draw_icon(video_info, 60, 60, ozone->textures[OZONE_TEXTURE_RETROARCH], 47, (ozone->dimensions.header_height - 60) / 2, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
menu_display_blend_end(video_info);
/* Battery */
@ -1016,10 +1045,10 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_frame_info_t *video_i
snprintf(msg, sizeof(msg), "%d%%", percent);
ozone_draw_text(video_info, ozone, msg, video_info->width - 85, 30 + FONT_SIZE_TIME, TEXT_ALIGN_RIGHT, video_info->width, video_info->height, ozone->fonts.time, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone, msg, video_info->width - 85, ozone->dimensions.header_height / 2 + FONT_SIZE_TIME * 3/8, TEXT_ALIGN_RIGHT, video_info->width, video_info->height, ozone->fonts.time, ozone->theme->text_rgba, false);
menu_display_blend_begin(video_info);
ozone_draw_icon(video_info, 92, 92, ozone->icons_textures[charging ? OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_CHARGING : OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_FULL], video_info->width - 60 - 56, 30 - 28, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
ozone_draw_icon(video_info, 92, 92, ozone->icons_textures[charging ? OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_CHARGING : OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_FULL], video_info->width - 60 - 56, ozone->dimensions.header_height / 2 - 42, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
menu_display_blend_end(video_info);
}
}
@ -1038,10 +1067,10 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_frame_info_t *video_i
menu_display_timedate(&datetime);
ozone_draw_text(video_info, ozone, timedate, video_info->width - 87 - timedate_offset, 30 + FONT_SIZE_TIME, TEXT_ALIGN_RIGHT, video_info->width, video_info->height, ozone->fonts.time, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone, timedate, video_info->width - 85 - timedate_offset, ozone->dimensions.header_height / 2 + FONT_SIZE_TIME * 3/8, TEXT_ALIGN_RIGHT, video_info->width, video_info->height, ozone->fonts.time, ozone->theme->text_rgba, false);
menu_display_blend_begin(video_info);
ozone_draw_icon(video_info, 92, 92, ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOCK], video_info->width - 60 - 56 - timedate_offset, 30 - 28, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
ozone_draw_icon(video_info, 92, 92, ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOCK], video_info->width - 60 - 56 - timedate_offset, ozone->dimensions.header_height / 2 - 42, video_info->width, video_info->height, 0, 1, ozone->theme->entries_icon);
menu_display_blend_end(video_info);
}
}
@ -1050,42 +1079,37 @@ static void ozone_draw_footer(ozone_handle_t *ozone, video_frame_info_t *video_i
{
char core_title[255];
/* Separator */
menu_display_draw_quad(video_info, 23, video_info->height - 78, video_info->width - 60, 1, video_info->width, video_info->height, ozone->theme->header_footer_separator);
menu_display_draw_quad(video_info, 23, video_info->height - ozone->dimensions.footer_height, video_info->width - 60, 1, video_info->width, video_info->height, ozone->theme->header_footer_separator);
/* Core title or Switch icon */
if (settings->bools.menu_core_enable && menu_entries_get_core_title(core_title, sizeof(core_title)) == 0)
ozone_draw_text(video_info, ozone, core_title, 59, video_info->height - 49 + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone, core_title, 59, video_info->height - ozone->dimensions.footer_height / 2 + FONT_SIZE_FOOTER * 3/8, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
else
ozone_draw_icon(video_info, 69, 30, ozone->theme->textures[OZONE_THEME_TEXTURE_SWITCH], 59, video_info->height - 52, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 69, 30, ozone->theme->textures[OZONE_THEME_TEXTURE_SWITCH], 59, video_info->height - ozone->dimensions.footer_height / 2 - 15, video_info->width,video_info->height, 0, 1, NULL);
/* Buttons */
{
unsigned back_width = 215;
unsigned back_height = 49;
unsigned ok_width = 96;
unsigned ok_height = 49;
bool do_swap = video_info->input_menu_swap_ok_cancel_buttons;
if (do_swap)
{
back_width = 96;
back_height = 49;
ok_width = 215;
ok_height = 49;
}
menu_display_blend_begin(video_info);
if (do_swap)
{
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_B], video_info->width - 133, video_info->height - 49, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_A], video_info->width - 251, video_info->height - 49, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_B], video_info->width - 133, video_info->height - ozone->dimensions.footer_height / 2 - 12, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_A], video_info->width - 251, video_info->height - ozone->dimensions.footer_height / 2 - 12, video_info->width,video_info->height, 0, 1, NULL);
}
else
{
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_B], video_info->width - 251, video_info->height - 49, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_A], video_info->width - 133, video_info->height - 49, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_B], video_info->width - 251, video_info->height - ozone->dimensions.footer_height / 2 - 12, video_info->width,video_info->height, 0, 1, NULL);
ozone_draw_icon(video_info, 25, 25, ozone->theme->textures[OZONE_THEME_TEXTURE_BUTTON_A], video_info->width - 133, video_info->height - ozone->dimensions.footer_height / 2 - 12, video_info->width,video_info->height, 0, 1, NULL);
}
menu_display_blend_end(video_info);
@ -1094,12 +1118,12 @@ static void ozone_draw_footer(ozone_handle_t *ozone, video_frame_info_t *video_i
do_swap ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK),
video_info->width - back_width, video_info->height - back_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
video_info->width - back_width, video_info->height - ozone->dimensions.footer_height / 2 + FONT_SIZE_FOOTER * 3/8, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone,
do_swap ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK),
video_info->width - ok_width, video_info->height - ok_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
video_info->width - ok_width, video_info->height - ozone->dimensions.footer_height / 2 + FONT_SIZE_FOOTER * 3/8, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
}
menu_display_blend_end(video_info);
@ -1249,7 +1273,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
ozone_draw_sidebar(ozone, video_info);
/* Menu entries */
menu_display_scissor_begin(video_info, ozone->sidebar_offset + 408, 87, video_info->width - 408 + (-ozone->sidebar_offset), video_info->height - 87 - 78);
menu_display_scissor_begin(video_info, ozone->sidebar_offset + ozone->dimensions.sidebar_width, ozone->dimensions.header_height, video_info->width - ozone->dimensions.sidebar_width + (-ozone->sidebar_offset), video_info->height - ozone->dimensions.header_height - ozone->dimensions.footer_height);
/* Current list */
ozone_draw_entries(ozone,
@ -1415,7 +1439,7 @@ static void ozone_list_open(ozone_handle_t *ozone)
entry.easing_enum = EASING_OUT_QUAD;
entry.subject = &ozone->sidebar_offset;
entry.tag = (uintptr_t) NULL;
entry.target_value = -408.0f;
entry.target_value = -ozone->dimensions.sidebar_width;
entry.userdata = (void*) ozone;
menu_animation_push(&entry);
@ -1738,10 +1762,10 @@ static void ozone_list_cache(void *data,
/* Deep copy visible elements */
video_driver_get_size(NULL, &video_info_height);
y = ENTRIES_START_Y;
y = ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical;
entries_end = menu_entries_get_size();
selection_buf = menu_entries_get_selection_buf_ptr(0);
bottom_boundary = video_info_height - 87 - 78;
bottom_boundary = video_info_height - ozone->dimensions.header_height - ozone->dimensions.footer_height;
for (i = 0; i < entries_end; i++)
{
@ -1750,7 +1774,7 @@ static void ozone_list_cache(void *data,
if (!node)
continue;
if (y + ozone->animations.scroll_y + node->height + 20 < ENTRIES_START_Y)
if (y + ozone->animations.scroll_y + node->height + 20 < ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical)
{
first++;
goto text_iterate;

View File

@ -1,5 +1,6 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2018 - natinusala
* Copyright (C) 2019 - Patrick Scheurenbrand
*
* 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-
@ -37,7 +38,24 @@ typedef struct ozone_handle ozone_handle_t;
#define ANIMATION_CURSOR_DURATION 8
#define ANIMATION_CURSOR_PULSE 30
#define ENTRIES_START_Y 127
#define HEADER_HEIGHT 87
#define FOOTER_HEIGHT 78
#define ENTRY_PADDING_HORIZONTAL_HALF 60
#define ENTRY_PADDING_HORIZONTAL_FULL 100
#define ENTRY_PADDING_VERTRICAL 20
#define ENTRY_HEIGHT 50
#define ENTRY_PADDING 0
#define ENTRY_ICON_SIZE 46
#define ENTRY_ICON_PADDING 15
#define SIDEBAR_WIDTH 408
#define SIDEBAR_X_PADDING 40
#define SIDEBAR_Y_PADDING 20
#define SIDEBAR_ENTRY_HEIGHT 50
#define SIDEBAR_ENTRY_Y_PADDING 10
#define SIDEBAR_ENTRY_ICON_SIZE 40
#define SIDEBAR_ENTRY_ICON_PADDING 15
#define INTERVAL_BATTERY_LEVEL_CHECK (30 * 1000000)
#define INTERVAL_OSK_CURSOR (0.5f * 1000000)
@ -113,7 +131,8 @@ struct ozone_handle
unsigned title_font_glyph_width;
unsigned entry_font_glyph_width;
unsigned sublabel_font_glyph_width;
unsigned sidebar_font_glyph_width;
ozone_theme_t *theme;
struct {
@ -152,6 +171,27 @@ struct ozone_handle
unsigned old_list_offset_y;
file_list_t *horizontal_list; /* console tabs */
struct {
int header_height;
int footer_height;
int entry_padding_horizontal_half;
int entry_padding_horizontal_full; /* todo when sidebar is not visible */
int entry_padding_vertical;
int entry_height;
int entry_padding;
int entry_icon_size;
int entry_icon_padding;
int sidebar_width;
int sidebar_padding_horizontal;
int sidebar_padding_vertical;
int sidebar_entry_padding_vertical;
int sidebar_entry_height;
int sidebar_entry_icon_size;
int sidebar_entry_icon_padding;
} dimensions;
};
/* If you change this struct, also

View File

@ -4,6 +4,7 @@
* Copyright (C) 2016-2017 - Brad Parker
* Copyright (C) 2018 - Alfredo Monclús
* Copyright (C) 2018 - natinusala
* Copyright (C) 2019 - Patrick Scheurenbrand
*
* 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-
@ -113,7 +114,7 @@ void ozone_draw_entries(ozone_handle_t *ozone, video_frame_info_t *video_info,
size_t i, y, entries_end;
float sidebar_offset, bottom_boundary, invert, alpha_anim;
unsigned video_info_height, video_info_width, entry_width, button_height;
int x_offset = 22;
int x_offset = 0;
size_t selection_y = 0;
size_t old_selection_y = 0;
@ -121,14 +122,14 @@ void ozone_draw_entries(ozone_handle_t *ozone, video_frame_info_t *video_info,
entries_end = file_list_get_size(selection_buf);
old_list = selection_buf == ozone->selection_buf_old;
y = ENTRIES_START_Y;
sidebar_offset = ozone->sidebar_offset / 2.0f;
entry_width = video_info->width - 548;
button_height = 52; /* height of the button (entry minus sublabel) */
y = ozone->dimensions.header_height + 1 + ozone->dimensions.entry_padding_vertical;
sidebar_offset = ozone->sidebar_offset;
entry_width = video_info->width - ozone->dimensions.sidebar_width - ozone->sidebar_offset - ozone->dimensions.entry_padding_horizontal_half * 2;
button_height = ozone->dimensions.entry_height; /* height of the button (entry minus sublabel) */
video_driver_get_size(&video_info_width, &video_info_height);
bottom_boundary = video_info_height - 87 - 78;
bottom_boundary = video_info_height - ozone->dimensions.header_height - ozone->dimensions.footer_height;
invert = (ozone->fade_direction) ? -1 : 1;
alpha_anim = old_list ? alpha : 1.0f - alpha;
@ -163,7 +164,7 @@ void ozone_draw_entries(ozone_handle_t *ozone, video_frame_info_t *video_info,
if (!node || ozone->empty_playlist)
goto border_iterate;
if (y + scroll_y + node->height + 20 < ENTRIES_START_Y)
if (y + scroll_y + node->height + 20 < ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical)
goto border_iterate;
else if (y + scroll_y - node->height - 20 > bottom_boundary)
goto border_iterate;
@ -172,8 +173,10 @@ void ozone_draw_entries(ozone_handle_t *ozone, video_frame_info_t *video_info,
ozone_color_alpha(ozone->theme_dynamic.entries_checkmark, alpha);
/* Borders */
menu_display_draw_quad(video_info, x_offset + 456-3, y - 3 + scroll_y, entry_width + 10 - 3 -1, 1, video_info->width, video_info->height, ozone->theme_dynamic.entries_border);
menu_display_draw_quad(video_info, x_offset + 456-3, y - 3 + button_height + scroll_y, entry_width + 10 - 3-1, 1, video_info->width, video_info->height, ozone->theme_dynamic.entries_border);
menu_display_draw_quad(video_info, ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half,
y + scroll_y, entry_width, 1, video_info->width, video_info->height, ozone->theme_dynamic.entries_border);
menu_display_draw_quad(video_info, ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half,
y + button_height + scroll_y, entry_width, 1, video_info->width, video_info->height, ozone->theme_dynamic.entries_border);
border_iterate:
y += node->height;
@ -181,14 +184,16 @@ border_iterate:
/* Cursor(s) layer - current */
if (!ozone->cursor_in_sidebar)
ozone_draw_cursor(ozone, video_info, x_offset + 456, entry_width, button_height, selection_y + scroll_y, ozone->animations.cursor_alpha * alpha);
ozone_draw_cursor(ozone, video_info, ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half + 3,
entry_width - 5, button_height + 2, selection_y + scroll_y + 1, ozone->animations.cursor_alpha * alpha);
/* Old*/
if (!ozone->cursor_in_sidebar_old)
ozone_draw_cursor(ozone, video_info, x_offset + 456, entry_width, button_height, old_selection_y + scroll_y, (1-ozone->animations.cursor_alpha) * alpha);
ozone_draw_cursor(ozone, video_info, ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half + 3,
entry_width - 5, button_height + 2, old_selection_y + scroll_y + 1, (1-ozone->animations.cursor_alpha) * alpha);
/* Icons + text */
y = ENTRIES_START_Y;
y = ozone->dimensions.header_height + 1 + ozone->dimensions.entry_padding_vertical;
if (old_list)
y += ozone->old_list_offset_y;
@ -205,7 +210,7 @@ border_iterate:
ozone_node_t *node = NULL;
char *entry_rich_label = NULL;
bool entry_selected = false;
int text_offset = -40;
int text_offset = -ozone->dimensions.entry_icon_padding - ozone->dimensions.entry_icon_size;
float *icon_color = NULL;
entry_value[0] = '\0';
@ -219,7 +224,7 @@ border_iterate:
if (!node)
continue;
if (y + scroll_y + node->height + 20 < ENTRIES_START_Y)
if (y + scroll_y + node->height + 20 < ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical)
goto icons_iterate;
else if (y + scroll_y - node->height - 20 > bottom_boundary)
goto icons_iterate;
@ -238,15 +243,19 @@ border_iterate:
if (ozone->empty_playlist)
{
unsigned text_width = font_driver_get_message_width(ozone->fonts.entries_label, rich_label, (unsigned)strlen(rich_label), 1);
x_offset = (video_info_width - 408 - 162)/2 - text_width/2;
y = video_info_height/2 - 60;
x_offset = (video_info_width - ozone->dimensions.sidebar_width - ozone->dimensions.entry_padding_horizontal_half * 2) / 2 - text_width / 2 - 60;
y = video_info_height / 2 - 60;
}
sublabel_str = menu_entry_get_sublabel(&entry);
if (node->wrap && sublabel_str)
word_wrap(sublabel_str, sublabel_str, (video_info->width - 548) / ozone->sublabel_font_glyph_width, false);
{
int sublable_max_width = video_info_width - ozone->dimensions.sidebar_width -
ozone->dimensions.entry_padding_horizontal_half * 2 - ozone->dimensions.entry_icon_padding * 2;
word_wrap(sublabel_str, sublabel_str, sublable_max_width / ozone->sublabel_font_glyph_width, false);
}
/* Icon */
tex = ozone_entries_icon_get_texture(ozone, entry.enum_idx, entry.type, entry_selected);
if (tex != ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SUBSETTING])
@ -280,7 +289,9 @@ border_iterate:
ozone_color_alpha(icon_color, alpha);
menu_display_blend_begin(video_info);
ozone_draw_icon(video_info, 46, 46, texture, x_offset + 451+5+10, y + scroll_y, video_info->width, video_info->height, 0, 1, icon_color);
ozone_draw_icon(video_info, ozone->dimensions.entry_icon_size, ozone->dimensions.entry_icon_size, texture,
ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half + ozone->dimensions.entry_icon_padding,
y + scroll_y + ozone->dimensions.entry_height / 2 - ozone->dimensions.entry_icon_size / 2, video_info->width, video_info->height, 0, 1, icon_color);
menu_display_blend_end(video_info);
if (icon_color == ozone_pure_white)
@ -290,20 +301,24 @@ border_iterate:
}
/* Draw text */
ozone_draw_text(video_info, ozone, rich_label, text_offset + x_offset + 521, y + FONT_SIZE_ENTRIES_LABEL + 8 - 1 + scroll_y, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.entries_label, COLOR_TEXT_ALPHA(ozone->theme->text_rgba, alpha_uint32), false);
ozone_draw_text(video_info, ozone, rich_label, text_offset + ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half + ozone->dimensions.entry_icon_size + ozone->dimensions.entry_icon_padding * 2,
y + ozone->dimensions.entry_height / 2 + FONT_SIZE_ENTRIES_LABEL * 3/8 + scroll_y, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.entries_label, COLOR_TEXT_ALPHA(ozone->theme->text_rgba, alpha_uint32), false);
if (sublabel_str)
ozone_draw_text(video_info, ozone, sublabel_str, x_offset + 470, y + FONT_SIZE_ENTRIES_SUBLABEL + 80 - 20 - 3 + scroll_y, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.entries_sublabel, COLOR_TEXT_ALPHA(ozone->theme->text_sublabel_rgba, alpha_uint32), false);
ozone_draw_text(video_info, ozone, sublabel_str, ozone->dimensions.sidebar_width + x_offset + ozone->dimensions.entry_padding_horizontal_half + ozone->dimensions.entry_icon_padding,
y + ozone->dimensions.entry_height + 1 + 5 + FONT_SIZE_ENTRIES_SUBLABEL + scroll_y, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.entries_sublabel, COLOR_TEXT_ALPHA(ozone->theme->text_sublabel_rgba, alpha_uint32), false);
/* Value */
ticker.idx = ozone->frame_count / 20;
ticker.s = entry_value_ticker;
ticker.str = entry_value;
ticker.selected = entry_selected && !ozone->cursor_in_sidebar;
ticker.len = (entry_width - 60 - ((int)utf8len(entry_rich_label) * ozone->entry_font_glyph_width)) / ozone->entry_font_glyph_width;
ticker.len = (entry_width - ozone->dimensions.entry_icon_size - ozone->dimensions.entry_icon_padding * 2 -
((int)utf8len(entry_rich_label) * ozone->entry_font_glyph_width)) / ozone->entry_font_glyph_width;
menu_animation_ticker(&ticker);
ozone_draw_entry_value(ozone, video_info, entry_value_ticker, x_offset + 426 + entry_width, y + FONT_SIZE_ENTRIES_LABEL + 8 - 1 + scroll_y,alpha_uint32, &entry);
ozone_draw_entry_value(ozone, video_info, entry_value_ticker, ozone->dimensions.sidebar_width + ozone->dimensions.entry_padding_horizontal_half + x_offset + entry_width - ozone->dimensions.entry_icon_padding,
y + ozone->dimensions.entry_height / 2 + FONT_SIZE_ENTRIES_LABEL * 3/8 + scroll_y, alpha_uint32, &entry);
free(entry_rich_label);

View File

@ -4,6 +4,7 @@
* Copyright (C) 2016-2017 - Brad Parker
* Copyright (C) 2018 - Alfredo Monclús
* Copyright (C) 2018 - natinusala
* Copyright (C) 2019 - Patrick Scheurenbrand
*
* 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-
@ -17,8 +18,6 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
/* TODO Fluid sidebar width ? */
#include "ozone.h"
#include "ozone_theme.h"
#include "ozone_display.h"
@ -115,55 +114,61 @@ void ozone_draw_sidebar(ozone_handle_t *ozone, video_frame_info_t *video_info)
unsigned selection_old_y = 0;
unsigned horizontal_list_size = 0;
int entry_width = 0;
if (!ozone->draw_sidebar)
return;
if (ozone->horizontal_list)
horizontal_list_size = ozone->horizontal_list->size;
menu_display_scissor_begin(video_info, 0, 87, 408, video_info->height - 87 - 78);
menu_display_scissor_begin(video_info, 0, ozone->dimensions.header_height, ozone->dimensions.sidebar_width, video_info->height - ozone->dimensions.header_height - ozone->dimensions.footer_height);
/* Background */
sidebar_height = video_info->height - 87 - 55 - 78;
sidebar_height = video_info->height - ozone->dimensions.header_height - 55 - ozone->dimensions.footer_height;
if (!video_info->libretro_running)
{
menu_display_draw_quad(video_info, ozone->sidebar_offset, 88, 408, 55/2, video_info->width, video_info->height, ozone->theme->sidebar_top_gradient);
menu_display_draw_quad(video_info, ozone->sidebar_offset, 88 + 55/2, 408, sidebar_height, video_info->width, video_info->height, ozone->theme->sidebar_background);
menu_display_draw_quad(video_info, ozone->sidebar_offset, 55*2 + sidebar_height, 408, 55/2 + 1, video_info->width, video_info->height, ozone->theme->sidebar_bottom_gradient);
menu_display_draw_quad(video_info, ozone->sidebar_offset, ozone->dimensions.header_height + 1, ozone->dimensions.sidebar_width, 55/2, video_info->width, video_info->height, ozone->theme->sidebar_top_gradient);
menu_display_draw_quad(video_info, ozone->sidebar_offset, ozone->dimensions.header_height + 1 + 55/2, ozone->dimensions.sidebar_width, sidebar_height, video_info->width, video_info->height, ozone->theme->sidebar_background);
menu_display_draw_quad(video_info, ozone->sidebar_offset, video_info->height - ozone->dimensions.footer_height - 55/2 - 1, ozone->dimensions.sidebar_width, 55/2 + 1, video_info->width, video_info->height, ozone->theme->sidebar_bottom_gradient);
}
/* Tabs */
/* y offset computation */
y = ENTRIES_START_Y - 10;
y = ozone->dimensions.header_height + 1 + ozone->dimensions.sidebar_padding_vertical;
for (i = 0; i < ozone->system_tab_end + horizontal_list_size + 1; i++)
{
if (i == ozone->categories_selection_ptr)
{
selection_y = y;
if (ozone->categories_selection_ptr > ozone->system_tab_end)
selection_y += 30;
selection_y += ozone->dimensions.sidebar_entry_padding_vertical + 1;
}
if (i == ozone->categories_active_idx_old)
{
selection_old_y = y;
if (ozone->categories_active_idx_old > ozone->system_tab_end)
selection_old_y += 30;
selection_old_y += ozone->dimensions.sidebar_entry_padding_vertical + 1;
}
y += 65;
y += ozone->dimensions.sidebar_entry_height + ozone->dimensions.sidebar_entry_padding_vertical;
}
entry_width = ozone->dimensions.sidebar_width - ozone->dimensions.sidebar_padding_horizontal * 2;
/* Cursor */
if (ozone->cursor_in_sidebar)
ozone_draw_cursor(ozone, video_info, ozone->sidebar_offset + 41, 408 - 81, 52, selection_y-8 + ozone->animations.scroll_y_sidebar, ozone->animations.cursor_alpha);
ozone_draw_cursor(ozone, video_info, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + 3,
entry_width - 5, ozone->dimensions.sidebar_entry_height + 2, selection_y + 1 + ozone->animations.scroll_y_sidebar, ozone->animations.cursor_alpha);
if (ozone->cursor_in_sidebar_old)
ozone_draw_cursor(ozone, video_info, ozone->sidebar_offset + 41, 408 - 81, 52, selection_old_y-8 + ozone->animations.scroll_y_sidebar, 1-ozone->animations.cursor_alpha);
ozone_draw_cursor(ozone, video_info, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + 3,
entry_width - 5, ozone->dimensions.sidebar_entry_height + 2, selection_old_y + 1 + ozone->animations.scroll_y_sidebar, 1-ozone->animations.cursor_alpha);
/* Menu tabs */
y = ENTRIES_START_Y - 10;
y = ozone->dimensions.header_height + 1 + ozone->dimensions.sidebar_padding_vertical;
menu_display_blend_begin(video_info);
for (i = 0; i < (unsigned)(ozone->system_tab_end+1); i++)
@ -174,15 +179,18 @@ void ozone_draw_sidebar(ozone_handle_t *ozone, video_frame_info_t *video_info)
unsigned icon = ozone_system_tabs_icons[ozone->tabs[i]];
/* Icon */
ozone_draw_icon(video_info, 40, 40, ozone->tab_textures[icon], ozone->sidebar_offset + 41 + 10, y - 5 + ozone->animations.scroll_y_sidebar, video_info->width, video_info->height, 0, 1, (selected ? ozone->theme->text_selected : ozone->theme->entries_icon));
ozone_draw_icon(video_info, ozone->dimensions.sidebar_entry_icon_size, ozone->dimensions.sidebar_entry_icon_size,
ozone->tab_textures[icon], ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + ozone->dimensions.sidebar_entry_icon_padding,
y + ozone->dimensions.sidebar_entry_height / 2 - ozone->dimensions.sidebar_entry_icon_size / 2 + ozone->animations.scroll_y_sidebar, video_info->width, video_info->height, 0, 1, (selected ? ozone->theme->text_selected : ozone->theme->entries_icon));
value_idx = ozone_system_tabs_value[ozone->tabs[i]];
title = msg_hash_to_str(value_idx);
/* Text */
ozone_draw_text(video_info, ozone, title, ozone->sidebar_offset + 115 - 10, y + FONT_SIZE_SIDEBAR + ozone->animations.scroll_y_sidebar, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.sidebar, (selected ? ozone->theme->text_selected_rgba : ozone->theme->text_rgba), true);
ozone_draw_text(video_info, ozone, title, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + ozone->dimensions.sidebar_entry_icon_padding * 2 + ozone->dimensions.sidebar_entry_icon_size,
y + ozone->dimensions.sidebar_entry_height / 2 + FONT_SIZE_SIDEBAR * 3/8 + ozone->animations.scroll_y_sidebar, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.sidebar, (selected ? ozone->theme->text_selected_rgba : ozone->theme->text_rgba), true);
y += 65;
y += ozone->dimensions.sidebar_entry_height + ozone->dimensions.sidebar_entry_padding_vertical;
}
menu_display_blend_end(video_info);
@ -190,9 +198,9 @@ void ozone_draw_sidebar(ozone_handle_t *ozone, video_frame_info_t *video_info)
/* Console tabs */
if (horizontal_list_size > 0)
{
menu_display_draw_quad(video_info, ozone->sidebar_offset + 41 + 10, y - 5 + ozone->animations.scroll_y_sidebar, 408-81, 1, video_info->width, video_info->height, ozone->theme->entries_border);
menu_display_draw_quad(video_info, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal, y + ozone->animations.scroll_y_sidebar, entry_width, 1, video_info->width, video_info->height, ozone->theme->entries_border);
y += 30;
y += ozone->dimensions.sidebar_entry_padding_vertical + 1;
menu_display_blend_begin(video_info);
@ -206,21 +214,26 @@ void ozone_draw_sidebar(ozone_handle_t *ozone, video_frame_info_t *video_info)
goto console_iterate;
/* Icon */
ozone_draw_icon(video_info, 40, 40, node->icon, ozone->sidebar_offset + 41 + 10 - 3, y - 5 - 3 + ozone->animations.scroll_y_sidebar, video_info->width, video_info->height, 0, 1, (selected ? ozone->theme->text_selected : ozone->theme->entries_icon));
ozone_draw_icon(video_info, ozone->dimensions.sidebar_entry_icon_size, ozone->dimensions.sidebar_entry_icon_size,
node->icon, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + ozone->dimensions.sidebar_entry_icon_padding,
y + ozone->dimensions.sidebar_entry_height / 2 - ozone->dimensions.sidebar_entry_icon_size / 2 + ozone->animations.scroll_y_sidebar, video_info->width, video_info->height, 0, 1, (selected ? ozone->theme->text_selected : ozone->theme->entries_icon));
/* Text */
ticker.idx = ozone->frame_count / 20;
ticker.len = 19;
ticker.len = (entry_width - ozone->dimensions.sidebar_entry_icon_size - 35) / ozone->sidebar_font_glyph_width;
ticker.s = console_title;
ticker.selected = selected;
ticker.str = node->console_name;
menu_animation_ticker(&ticker);
ozone_draw_text(video_info, ozone, console_title, ozone->sidebar_offset + 115 - 10, y + FONT_SIZE_SIDEBAR + ozone->animations.scroll_y_sidebar, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.sidebar, (selected ? ozone->theme->text_selected_rgba : ozone->theme->text_rgba), true);
ozone_draw_text(video_info, ozone, console_title, ozone->sidebar_offset + ozone->dimensions.sidebar_padding_horizontal + ozone->dimensions.sidebar_entry_icon_padding * 2 + ozone->dimensions.sidebar_entry_icon_size,
y + ozone->dimensions.sidebar_entry_height / 2 + FONT_SIZE_SIDEBAR * 3/8 + ozone->animations.scroll_y_sidebar, TEXT_ALIGN_LEFT,
video_info->width, video_info->height, ozone->fonts.sidebar, (selected ? ozone->theme->text_selected_rgba : ozone->theme->text_rgba), true);
console_iterate:
y += 65;
y += ozone->dimensions.sidebar_entry_height + ozone->dimensions.sidebar_entry_padding_vertical;
}
menu_display_blend_end(video_info);
@ -281,13 +294,16 @@ void ozone_leave_sidebar(ozone_handle_t *ozone, uintptr_t tag)
unsigned ozone_get_selected_sidebar_y_position(ozone_handle_t *ozone)
{
return ozone->categories_selection_ptr * 65 + (ozone->categories_selection_ptr > ozone->system_tab_end ? 30 : 0);
return ozone->categories_selection_ptr * ozone->dimensions.sidebar_entry_height +
(ozone->categories_selection_ptr - 1) * ozone->dimensions.sidebar_entry_padding_vertical + ozone->dimensions.sidebar_padding_vertical +
(ozone->categories_selection_ptr > ozone->system_tab_end ? ozone->dimensions.sidebar_entry_padding_vertical + 1 : 0);
}
unsigned ozone_get_sidebar_height(ozone_handle_t *ozone)
{
return (ozone->system_tab_end + 1 + (ozone->horizontal_list ? ozone->horizontal_list->size : 0)) * 65
+ (ozone->horizontal_list && ozone->horizontal_list->size > 0 ? 30 : 0);
int entries = (ozone->system_tab_end + 1 + (ozone->horizontal_list ? ozone->horizontal_list->size : 0));
return entries * ozone->dimensions.sidebar_entry_height + (entries - 1) * ozone->dimensions.sidebar_entry_padding_vertical + ozone->dimensions.sidebar_padding_vertical +
(ozone->horizontal_list && ozone->horizontal_list->size > 0 ? ozone->dimensions.sidebar_entry_padding_vertical + 1 : 0);
}
void ozone_sidebar_goto(ozone_handle_t *ozone, unsigned new_selection)
@ -335,8 +351,8 @@ void ozone_sidebar_goto(ozone_handle_t *ozone, unsigned new_selection)
/* Scroll animation */
new_scroll = 0;
selected_position_y = ozone_get_selected_sidebar_y_position(ozone);
current_selection_middle_onscreen = ENTRIES_START_Y - 10 + ozone->animations.scroll_y_sidebar + selected_position_y + 65 / 2;
bottom_boundary = video_info_height - 87 - 78;
current_selection_middle_onscreen = ozone->dimensions.header_height + 1 + ozone->animations.scroll_y_sidebar + selected_position_y + ozone->dimensions.sidebar_entry_height / 2;
bottom_boundary = video_info_height - (ozone->dimensions.header_height + 1) - ozone->dimensions.footer_height;
entries_middle = video_info_height/2;
entries_height = ozone_get_sidebar_height(ozone);
@ -344,7 +360,7 @@ void ozone_sidebar_goto(ozone_handle_t *ozone, unsigned new_selection)
new_scroll = ozone->animations.scroll_y_sidebar - (current_selection_middle_onscreen - entries_middle);
if (new_scroll + entries_height < bottom_boundary)
new_scroll = -(30 + entries_height - bottom_boundary);
new_scroll = bottom_boundary - entries_height - ozone->dimensions.sidebar_padding_vertical;
if (new_scroll > 0)
new_scroll = 0;