mirror of
https://github.com/libretro/RetroArch
synced 2025-01-30 21:32:45 +00:00
iOS: Display app icon in app icon picker in materialui (#16520)
This commit is contained in:
parent
f3b6093941
commit
7a44fb94a6
@ -37,6 +37,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../frontend/frontend_driver.h"
|
#include "../../frontend/frontend_driver.h"
|
||||||
|
#include "../../ui/ui_companion_driver.h"
|
||||||
|
|
||||||
#include "../menu_driver.h"
|
#include "../menu_driver.h"
|
||||||
#include "../menu_screensaver.h"
|
#include "../menu_screensaver.h"
|
||||||
@ -175,7 +176,8 @@ enum materialui_node_icon_type
|
|||||||
MUI_ICON_TYPE_MENU_EXPLORE,
|
MUI_ICON_TYPE_MENU_EXPLORE,
|
||||||
MUI_ICON_TYPE_PLAYLIST,
|
MUI_ICON_TYPE_PLAYLIST,
|
||||||
MUI_ICON_TYPE_MENU_CONTENTLESS_CORE,
|
MUI_ICON_TYPE_MENU_CONTENTLESS_CORE,
|
||||||
MUI_ICON_TYPE_ACHIEVEMENT
|
MUI_ICON_TYPE_ACHIEVEMENT,
|
||||||
|
MUI_ICON_TYPE_APPICON
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Defines all standard menu textures */
|
/* Defines all standard menu textures */
|
||||||
@ -4011,6 +4013,14 @@ static void materialui_render_menu_entry_default(
|
|||||||
uintptr_t icon_texture = 0;
|
uintptr_t icon_texture = 0;
|
||||||
bool draw_text_outside = (x_offset != 0);
|
bool draw_text_outside = (x_offset != 0);
|
||||||
gfx_display_t *p_disp = disp_get_ptr();
|
gfx_display_t *p_disp = disp_get_ptr();
|
||||||
|
uico_driver_state_t *uico_st = uico_state_get_ptr();
|
||||||
|
|
||||||
|
static float color_white[16] = {
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
1.0f, 1.0f, 1.0f, 1.0f,
|
||||||
|
};
|
||||||
|
|
||||||
if (!p_disp->dispctx->handles_transform)
|
if (!p_disp->dispctx->handles_transform)
|
||||||
{
|
{
|
||||||
@ -4076,12 +4086,6 @@ static void materialui_render_menu_entry_default(
|
|||||||
if (icon_texture)
|
if (icon_texture)
|
||||||
{
|
{
|
||||||
/* draw the icon ourselves - the draw_icon below tints it to match the theme */
|
/* draw the icon ourselves - the draw_icon below tints it to match the theme */
|
||||||
static float color_white[16] = {
|
|
||||||
1.0f, 1.0f, 1.0f, 1.0f,
|
|
||||||
1.0f, 1.0f, 1.0f, 1.0f,
|
|
||||||
1.0f, 1.0f, 1.0f, 1.0f,
|
|
||||||
1.0f, 1.0f, 1.0f, 1.0f,
|
|
||||||
};
|
|
||||||
materialui_draw_icon(
|
materialui_draw_icon(
|
||||||
userdata, p_disp,
|
userdata, p_disp,
|
||||||
video_width,
|
video_width,
|
||||||
@ -4116,6 +4120,33 @@ static void materialui_render_menu_entry_default(
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case MUI_ICON_TYPE_APPICON:
|
||||||
|
if (uico_st->drv && uico_st->drv->get_app_icon_texture)
|
||||||
|
{
|
||||||
|
icon_texture = uico_st->drv->get_app_icon_texture(entry_label);
|
||||||
|
if (icon_texture)
|
||||||
|
{
|
||||||
|
/* draw the icon ourselves - the draw_icon below tints it to match the theme */
|
||||||
|
materialui_draw_icon(
|
||||||
|
userdata, p_disp,
|
||||||
|
video_width,
|
||||||
|
video_height,
|
||||||
|
mui->icon_size,
|
||||||
|
(uintptr_t)icon_texture,
|
||||||
|
entry_x + (int)mui->landscape_optimization.entry_margin,
|
||||||
|
entry_y + (node->entry_height / 2.0f) - (mui->icon_size / 2.0f),
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
color_white,
|
||||||
|
&mymat);
|
||||||
|
|
||||||
|
entry_margin += mui->icon_size;
|
||||||
|
usable_width -= mui->icon_size;
|
||||||
|
|
||||||
|
icon_texture = 0; /* prevent drawing tinted icon */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
switch (entry_file_type)
|
switch (entry_file_type)
|
||||||
{
|
{
|
||||||
@ -10481,6 +10512,13 @@ static void materialui_list_insert(
|
|||||||
case MENU_SETTING_ACTION_CONTENTLESS_CORE_RUN:
|
case MENU_SETTING_ACTION_CONTENTLESS_CORE_RUN:
|
||||||
node->icon_type = MUI_ICON_TYPE_MENU_CONTENTLESS_CORE;
|
node->icon_type = MUI_ICON_TYPE_MENU_CONTENTLESS_CORE;
|
||||||
break;
|
break;
|
||||||
|
case MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM:
|
||||||
|
if (atoi(fullpath) == MENU_ENUM_LABEL_APPICON_SETTINGS)
|
||||||
|
{
|
||||||
|
node->icon_type = MUI_ICON_TYPE_APPICON;
|
||||||
|
}
|
||||||
|
/* for other types we don't have an icon */
|
||||||
|
break;
|
||||||
case FILE_TYPE_RPL_ENTRY:
|
case FILE_TYPE_RPL_ENTRY:
|
||||||
case MENU_SETTING_DROPDOWN_ITEM:
|
case MENU_SETTING_DROPDOWN_ITEM:
|
||||||
case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION:
|
case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION:
|
||||||
@ -10498,7 +10536,6 @@ static void materialui_list_insert(
|
|||||||
case MENU_SETTING_DROPDOWN_ITEM_INPUT_DESCRIPTION:
|
case MENU_SETTING_DROPDOWN_ITEM_INPUT_DESCRIPTION:
|
||||||
case MENU_SETTING_DROPDOWN_ITEM_INPUT_DESCRIPTION_KBD:
|
case MENU_SETTING_DROPDOWN_ITEM_INPUT_DESCRIPTION_KBD:
|
||||||
case MENU_SETTING_DROPDOWN_SETTING_CORE_OPTIONS_ITEM:
|
case MENU_SETTING_DROPDOWN_SETTING_CORE_OPTIONS_ITEM:
|
||||||
case MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM:
|
|
||||||
case MENU_SETTING_DROPDOWN_SETTING_FLOAT_ITEM:
|
case MENU_SETTING_DROPDOWN_SETTING_FLOAT_ITEM:
|
||||||
case MENU_SETTING_DROPDOWN_SETTING_INT_ITEM:
|
case MENU_SETTING_DROPDOWN_SETTING_INT_ITEM:
|
||||||
case MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM:
|
case MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM:
|
||||||
|
@ -1117,6 +1117,7 @@ ui_companion_driver_t ui_companion_cocoa = {
|
|||||||
NULL, /* is_active */
|
NULL, /* is_active */
|
||||||
NULL, /* get_app_icons */
|
NULL, /* get_app_icons */
|
||||||
NULL, /* set_app_icon */
|
NULL, /* set_app_icon */
|
||||||
|
NULL, /* get_app_icon_texture */
|
||||||
&ui_browser_window_cocoa,
|
&ui_browser_window_cocoa,
|
||||||
&ui_msg_window_cocoa,
|
&ui_msg_window_cocoa,
|
||||||
&ui_window_cocoa,
|
&ui_window_cocoa,
|
||||||
|
@ -105,6 +105,40 @@ static void ui_companion_cocoatouch_set_app_icon(const char *iconName)
|
|||||||
[[UIApplication sharedApplication] setAlternateIconName:str completionHandler:nil];
|
[[UIApplication sharedApplication] setAlternateIconName:str completionHandler:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uintptr_t ui_companion_cocoatouch_get_app_icon_texture(const char *icon)
|
||||||
|
{
|
||||||
|
static NSMutableDictionary<NSString *, NSNumber *> *textures = nil;
|
||||||
|
static dispatch_once_t once;
|
||||||
|
dispatch_once(&once, ^{
|
||||||
|
textures = [NSMutableDictionary dictionaryWithCapacity:6];
|
||||||
|
});
|
||||||
|
|
||||||
|
NSString *iconName = [NSString stringWithUTF8String:icon];
|
||||||
|
if (!textures[iconName])
|
||||||
|
{
|
||||||
|
UIImage *img = [UIImage imageNamed:iconName];
|
||||||
|
if (!img)
|
||||||
|
{
|
||||||
|
RARCH_LOG("could not load %s\n", icon);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
NSData *png = UIImagePNGRepresentation(img);
|
||||||
|
if (!png)
|
||||||
|
{
|
||||||
|
RARCH_LOG("could not get png for %s\n", icon);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uintptr_t item;
|
||||||
|
gfx_display_reset_textures_list_buffer(&item, TEXTURE_FILTER_MIPMAP_LINEAR,
|
||||||
|
(void*)[png bytes], (unsigned int)[png length], IMAGE_TYPE_PNG,
|
||||||
|
NULL, NULL);
|
||||||
|
textures[iconName] = [NSNumber numberWithUnsignedLong:item];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [textures[iconName] unsignedLongValue];
|
||||||
|
}
|
||||||
|
|
||||||
static void rarch_draw_observer(CFRunLoopObserverRef observer,
|
static void rarch_draw_observer(CFRunLoopObserverRef observer,
|
||||||
CFRunLoopActivity activity, void *info)
|
CFRunLoopActivity activity, void *info)
|
||||||
{
|
{
|
||||||
@ -506,22 +540,6 @@ enum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSData *)pngForIcon:(NSString *)iconName
|
|
||||||
{
|
|
||||||
UIImage *img;
|
|
||||||
NSData *png;
|
|
||||||
img = [UIImage imageNamed:iconName];
|
|
||||||
if (!img)
|
|
||||||
NSLog(@"could not load %@\n", iconName);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
png = UIImagePNGRepresentation(img);
|
|
||||||
if (!png)
|
|
||||||
NSLog(@"could not get png for %@\n", iconName);
|
|
||||||
}
|
|
||||||
return png;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)applicationDidFinishLaunching:(UIApplication *)application
|
- (void)applicationDidFinishLaunching:(UIApplication *)application
|
||||||
{
|
{
|
||||||
char arguments[] = "retroarch";
|
char arguments[] = "retroarch";
|
||||||
@ -763,6 +781,7 @@ ui_companion_driver_t ui_companion_cocoatouch = {
|
|||||||
NULL, /* is_active */
|
NULL, /* is_active */
|
||||||
ui_companion_cocoatouch_get_app_icons,
|
ui_companion_cocoatouch_get_app_icons,
|
||||||
ui_companion_cocoatouch_set_app_icon,
|
ui_companion_cocoatouch_set_app_icon,
|
||||||
|
ui_companion_cocoatouch_get_app_icon_texture,
|
||||||
NULL, /* browser_window */
|
NULL, /* browser_window */
|
||||||
NULL, /* msg_window */
|
NULL, /* msg_window */
|
||||||
NULL, /* window */
|
NULL, /* window */
|
||||||
|
@ -4992,6 +4992,7 @@ ui_companion_driver_t ui_companion_qt = {
|
|||||||
ui_companion_qt_is_active,
|
ui_companion_qt_is_active,
|
||||||
NULL, /* get_app_icons */
|
NULL, /* get_app_icons */
|
||||||
NULL, /* set_app_icon */
|
NULL, /* set_app_icon */
|
||||||
|
NULL, /* get_app_icon_texture */
|
||||||
&ui_browser_window_qt,
|
&ui_browser_window_qt,
|
||||||
&ui_msg_window_qt,
|
&ui_msg_window_qt,
|
||||||
&ui_window_qt,
|
&ui_window_qt,
|
||||||
|
@ -338,6 +338,7 @@ ui_companion_driver_t ui_companion_win32 = {
|
|||||||
NULL, /* is_active */
|
NULL, /* is_active */
|
||||||
NULL, /* get_app_icons */
|
NULL, /* get_app_icons */
|
||||||
NULL, /* set_app_icon */
|
NULL, /* set_app_icon */
|
||||||
|
NULL, /* get_app_icon_texture */
|
||||||
&ui_browser_window_win32,
|
&ui_browser_window_win32,
|
||||||
&ui_msg_window_win32,
|
&ui_msg_window_win32,
|
||||||
&ui_window_win32,
|
&ui_window_win32,
|
||||||
|
@ -40,6 +40,7 @@ static ui_companion_driver_t ui_companion_null = {
|
|||||||
NULL, /* is_active */
|
NULL, /* is_active */
|
||||||
NULL, /* get_app_icons */
|
NULL, /* get_app_icons */
|
||||||
NULL, /* set_app_icon */
|
NULL, /* set_app_icon */
|
||||||
|
NULL, /* get_app_icon_texture */
|
||||||
NULL, /* browser_window */
|
NULL, /* browser_window */
|
||||||
NULL, /* msg_window */
|
NULL, /* msg_window */
|
||||||
NULL, /* window */
|
NULL, /* window */
|
||||||
|
@ -133,6 +133,7 @@ typedef struct ui_companion_driver
|
|||||||
bool (*is_active)(void *data);
|
bool (*is_active)(void *data);
|
||||||
struct string_list *(*get_app_icons)(void);
|
struct string_list *(*get_app_icons)(void);
|
||||||
void (*set_app_icon)(const char *icon);
|
void (*set_app_icon)(const char *icon);
|
||||||
|
uintptr_t (*get_app_icon_texture)(const char *icon);
|
||||||
ui_browser_window_t *browser_window;
|
ui_browser_window_t *browser_window;
|
||||||
ui_msg_window_t *msg_window;
|
ui_msg_window_t *msg_window;
|
||||||
ui_window_t *window;
|
ui_window_t *window;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user