From 7aac7f986abf5193d9582eee9488457b9e0dc525 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Mon, 19 Dec 2016 14:28:21 -0500 Subject: [PATCH] add option to show battery level next to the datetime in the menu --- configuration.c | 1 + configuration.h | 1 + deps/SPIRV-Cross | 2 +- deps/glslang/glslang | 2 +- intl/msg_hash_ja.h | 2 ++ intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.c | 4 +++ intl/msg_hash_us.h | 2 ++ menu/drivers/xmb.c | 61 ++++++++++++++++++++++++++++++++++++++++- menu/menu_displaylist.c | 3 ++ menu/menu_setting.c | 15 ++++++++++ msg_hash.h | 3 ++ retroarch.cfg | 3 ++ 13 files changed, 98 insertions(+), 3 deletions(-) diff --git a/configuration.c b/configuration.c index 3b3499cfe3..b704dedadc 100644 --- a/configuration.c +++ b/configuration.c @@ -787,6 +787,7 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti SETTING_BOOL("menu_mouse_enable", &settings->menu.mouse.enable, true, def_mouse_enable, false); SETTING_BOOL("menu_pointer_enable", &settings->menu.pointer.enable, true, pointer_enable, false); SETTING_BOOL("menu_timedate_enable", &settings->menu.timedate_enable, true, true, false); + SETTING_BOOL("menu_battery_level_enable", &settings->menu.battery_level_enable, true, true, false); SETTING_BOOL("menu_core_enable", &settings->menu.core_enable, true, true, false); SETTING_BOOL("menu_dynamic_wallpaper_enable", &settings->menu.dynamic_wallpaper_enable, true, false, false); #ifdef HAVE_XMB diff --git a/configuration.h b/configuration.h index 8b77811b82..c0f7bf7626 100644 --- a/configuration.h +++ b/configuration.h @@ -125,6 +125,7 @@ typedef struct settings char driver[32]; bool pause_libretro; bool timedate_enable; + bool battery_level_enable; bool core_enable; bool dynamic_wallpaper_enable; unsigned thumbnails; diff --git a/deps/SPIRV-Cross b/deps/SPIRV-Cross index 2f48065ec1..5c24d99ff2 160000 --- a/deps/SPIRV-Cross +++ b/deps/SPIRV-Cross @@ -1 +1 @@ -Subproject commit 2f48065ec190d676e9c80c18a208da1ad59dcf9e +Subproject commit 5c24d99ff22a25ef38e9e39985f80cf57a1e7418 diff --git a/deps/glslang/glslang b/deps/glslang/glslang index be8462149a..a4a4d5e22c 160000 --- a/deps/glslang/glslang +++ b/deps/glslang/glslang @@ -1 +1 @@ -Subproject commit be8462149a3c150fc89db84e57ef06de3ab90d47 +Subproject commit a4a4d5e22c375d37bd286106904ef819eafff29b diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 14fc3b3dfc..f6b734057c 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -2278,3 +2278,5 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE, "OSDメッセージを表する。") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE, "ユーザー%dのリモートを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE, + "電池残量を表示") diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index da4e6a5521..2190eecb64 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1163,3 +1163,5 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, "unified_menu_controls") MSG_HASH(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR, "detect_core_list_push_dir") +MSG_HASH(MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE, + "menu_battery_level_enable") diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index aee30281a6..e26c88cd67 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -1614,6 +1614,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Shows current date and/or time inside menu."); break; + case MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE: + snprintf(s, len, + "Shows current battery level inside menu."); + break; case MENU_ENUM_LABEL_CORE_ENABLE: snprintf(s, len, "Shows current core inside menu."); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 8bebf08327..d6f64669d2 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2349,3 +2349,5 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE, "Show onscreen messages.") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE, "User %d Remote Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE, + "Display battery level") diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 8371af95d7..c02d1a148b 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -126,6 +126,8 @@ enum XMB_TEXTURE_SWITCH_ON, XMB_TEXTURE_SWITCH_OFF, XMB_TEXTURE_CLOCK, + XMB_TEXTURE_BATTERY, + XMB_TEXTURE_BATTERY_CHARGING, XMB_TEXTURE_POINTER, XMB_TEXTURE_ADD, XMB_TEXTURE_KEY, @@ -2505,6 +2507,7 @@ static void xmb_draw_dark_layer( static void xmb_frame(void *data) { size_t selection; + size_t datetime_width = 0; math_matrix_4x4 mymat; unsigned i, width, height; float item_color[16], coord_black[16], coord_white[16]; @@ -2581,7 +2584,6 @@ static void xmb_frame(void *data) menu_display_rotate_z(&rotate_draw); menu_display_blend_begin(); - /* Clock image */ menu_display_set_alpha(coord_white, MIN(xmb->alpha, 1.00f)); @@ -2612,12 +2614,65 @@ static void xmb_frame(void *data) menu_display_timedate(&datetime); + datetime_width = font_driver_get_message_width(xmb->font, timedate, utf8len(timedate), 1); + xmb_draw_text(xmb, timedate, width - xmb->margins.title.left - xmb->icon.size / 4, xmb->margins.title.top, 1, 1, TEXT_ALIGN_RIGHT, width, height, xmb->font); } + if (settings->menu.battery_level_enable) + { + const frontend_ctx_driver_t *frontend = frontend_get_ptr(); + + if (frontend && frontend->get_powerstate) + { + char msg[12]; + int seconds = 0, percent = 0; + enum frontend_powerstate state = + frontend->get_powerstate(&seconds, &percent); + bool charging = (state == FRONTEND_POWERSTATE_CHARGING); + + *msg = '\0'; + + if (percent > 0) + { + size_t x_pos = 0; + size_t x_pos_icon = xmb->margins.title.left / 2; + + if (datetime_width) + x_pos_icon += datetime_width + (xmb->icon.size / 2.5) + (xmb->margins.title.left / 2); + + if (coord_white[3] != 0) + xmb_draw_icon( + xmb->icon.size / 4, + &mymat, + xmb->textures.list[charging ? XMB_TEXTURE_BATTERY_CHARGING : XMB_TEXTURE_BATTERY], + width - (xmb->icon.size / 4) - x_pos_icon, + xmb->icon.size / 1.75, + width, + height, + 1, + 0, + 1, + &coord_white[0], + xmb->shadow_offset); + + snprintf(msg, sizeof(msg), "%d%%", percent); + + if (datetime_width) + x_pos = datetime_width + (xmb->icon.size / 5) + + xmb->margins.title.left; + + xmb_draw_text(xmb, msg, + width - xmb->margins.title.left - x_pos, + xmb->margins.title.top, 1, 1, TEXT_ALIGN_RIGHT, + width, height, xmb->font); + } + } + } + /* Arrow image */ menu_display_set_alpha(coord_white, MIN(xmb->textures.arrow.alpha, xmb->alpha)); @@ -3245,6 +3300,10 @@ static const char *xmb_texture_path(unsigned id) return "resume.png"; case XMB_TEXTURE_CLOCK: return "clock.png"; + case XMB_TEXTURE_BATTERY: + return "battery.png"; + case XMB_TEXTURE_BATTERY_CHARGING: + return "battery-charging.png"; case XMB_TEXTURE_POINTER: return "pointer.png"; case XMB_TEXTURE_SAVESTATE: diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e056ff6a32..6a283987e9 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -4551,6 +4551,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_TIMEDATE_ENABLE, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE, + PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_CORE_ENABLE, PARSE_ONLY_BOOL, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 01c874b680..549e66838b 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5178,6 +5178,21 @@ static bool setting_append_list( general_read_handler, SD_FLAG_ADVANCED); + CONFIG_BOOL( + list, list_info, + &settings->menu.battery_level_enable, + MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE, + MENU_ENUM_LABEL_VALUE_BATTERY_LEVEL_ENABLE, + true, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_ADVANCED); + CONFIG_BOOL( list, list_info, &settings->menu.core_enable, diff --git a/msg_hash.h b/msg_hash.h index 5f080ca84d..6b8e872d66 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -665,6 +665,7 @@ enum msg_hash_enums MENU_LABEL(XMB_RIBBON_ENABLE), MENU_LABEL(THUMBNAILS), MENU_LABEL(TIMEDATE_ENABLE), + MENU_LABEL(BATTERY_LEVEL_ENABLE), MENU_LABEL(MATERIALUI_MENU_COLOR_THEME), /* UI settings */ @@ -1532,6 +1533,8 @@ enum msg_hash_enums MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + MENU_ENUM_LABEL_VALUE_BATTERY, + MSG_LAST }; diff --git a/retroarch.cfg b/retroarch.cfg index 4f660bd41f..98539ddec1 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -652,6 +652,9 @@ # Shows current date and/or time inside menu. # menu_timedate_enable = true +# Shows current battery level inside menu. +# menu_battery_level_enable = true + # Shows current core inside menu. # menu_core_enable = true