mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
First draft of ios_menu
This commit is contained in:
parent
cf7d975b19
commit
f2f96bcac8
100
apple/iOS/menu.m
100
apple/iOS/menu.m
@ -21,6 +21,9 @@
|
|||||||
#include <file/file_path.h>
|
#include <file/file_path.h>
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
|
|
||||||
|
#include "../../menu/menu_common.h"
|
||||||
|
#include "../../menu/disp/shared.h"
|
||||||
|
|
||||||
/*********************************************/
|
/*********************************************/
|
||||||
/* RunActionSheet */
|
/* RunActionSheet */
|
||||||
/* Creates and displays a UIActionSheet with */
|
/* Creates and displays a UIActionSheet with */
|
||||||
@ -547,6 +550,103 @@ static void RunActionSheet(const char* title, const struct string_list* items, U
|
|||||||
RAMainMenu* __weak weakSelf = self;
|
RAMainMenu* __weak weakSelf = self;
|
||||||
self.sections = [NSMutableArray array];
|
self.sections = [NSMutableArray array];
|
||||||
|
|
||||||
|
menu_handle_t *mh = driver.menu;
|
||||||
|
// XXX Writing these down for reference
|
||||||
|
mh->list_mainmenu;
|
||||||
|
mh->list_settings;
|
||||||
|
mh->menu_list;
|
||||||
|
|
||||||
|
char title[256];
|
||||||
|
const char *dir = NULL;
|
||||||
|
const char *label = NULL;
|
||||||
|
unsigned menu_type = 0;
|
||||||
|
menu_list_get_last_stack(driver.menu->menu_list,
|
||||||
|
&dir, &label, &menu_type);
|
||||||
|
|
||||||
|
get_title(label, dir, menu_type, title, sizeof(title));
|
||||||
|
|
||||||
|
const char *core_name = g_extern.menu.info.library_name;
|
||||||
|
if (!core_name)
|
||||||
|
core_name = g_extern.system.info.library_name;
|
||||||
|
if (!core_name)
|
||||||
|
core_name = "No Core";
|
||||||
|
|
||||||
|
const char *core_version = g_extern.menu.info.library_version;
|
||||||
|
if (!core_version)
|
||||||
|
core_version = g_extern.system.info.library_version;
|
||||||
|
if (!core_version)
|
||||||
|
core_version = "";
|
||||||
|
|
||||||
|
char title_msg[256];
|
||||||
|
snprintf(title_msg, sizeof(title_msg), "%s - %s %s", PACKAGE_VERSION,
|
||||||
|
core_name, core_version);
|
||||||
|
self.title = BOXSTRING(title_msg);
|
||||||
|
|
||||||
|
NSMutableArray *everything = [NSMutableArray array];
|
||||||
|
[everything addObject:BOXSTRING(title)];
|
||||||
|
|
||||||
|
size_t end = menu_list_get_size(driver.menu->menu_list);
|
||||||
|
for (size_t i = driver.menu->begin; i < end; i++) {
|
||||||
|
char message[PATH_MAX], type_str[PATH_MAX],
|
||||||
|
entry_title_buf[PATH_MAX], type_str_buf[PATH_MAX],
|
||||||
|
path_buf[PATH_MAX];
|
||||||
|
const char *path = NULL, *entry_label = NULL;
|
||||||
|
unsigned type = 0, w = 0;
|
||||||
|
bool selected = false;
|
||||||
|
|
||||||
|
menu_list_get_at_offset(driver.menu->menu_list->selection_buf, i, &path,
|
||||||
|
&entry_label, &type);
|
||||||
|
rarch_setting_t *setting =
|
||||||
|
(rarch_setting_t*)setting_data_find_setting
|
||||||
|
(driver.menu->list_settings,
|
||||||
|
driver.menu->menu_list->selection_buf->list[i].label);
|
||||||
|
(void)setting;
|
||||||
|
|
||||||
|
disp_set_label
|
||||||
|
(driver.menu->menu_list->selection_buf, &w, type, i, label,
|
||||||
|
type_str, sizeof(type_str),
|
||||||
|
entry_label, path,
|
||||||
|
path_buf, sizeof(path_buf));
|
||||||
|
|
||||||
|
[everything addObject:
|
||||||
|
// XXX Look at the type and maybe make a different
|
||||||
|
// kind, such as for a setting. Right now, assume
|
||||||
|
// everything is a button.
|
||||||
|
[RAMenuItemBasic
|
||||||
|
itemWithDescription:BOXSTRING(path_buf)
|
||||||
|
action:^{
|
||||||
|
// XXX This is not doing what I expect. In
|
||||||
|
// particular, "Settings" doesn't open a new
|
||||||
|
// menu. (I assumed it would call some command
|
||||||
|
// that would go out, change the driver.menu
|
||||||
|
// value, then call back into here with a new
|
||||||
|
// thing.
|
||||||
|
//
|
||||||
|
// Idea 1: setting->action_ok doesn't work like that.
|
||||||
|
//
|
||||||
|
// Idea 2: I need to explicitly go back to
|
||||||
|
// gameView and let RA run.
|
||||||
|
//
|
||||||
|
// Idea 3: setting is actually totally busted
|
||||||
|
// because this is an ObjC block and I need to
|
||||||
|
// store it in a ObjC object that is controlled
|
||||||
|
// by the GC. [I don't think this is the case,
|
||||||
|
// because saving a new config works, but if it
|
||||||
|
// is, this is actually quite easy to fix.]
|
||||||
|
if ( setting != NULL ) {
|
||||||
|
setting->action_ok(setting, MENU_ACTION_OK);
|
||||||
|
}
|
||||||
|
}]];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self.sections addObject:everything];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)willReloadDataOLD
|
||||||
|
{
|
||||||
|
RAMainMenu* __weak weakSelf = self;
|
||||||
|
self.sections = [NSMutableArray array];
|
||||||
|
|
||||||
[self.sections addObject:[NSArray arrayWithObjects:BOXSTRING("Content"),
|
[self.sections addObject:[NSArray arrayWithObjects:BOXSTRING("Content"),
|
||||||
[RAMenuItemBasic itemWithDescription:BOXSTRING("Core")
|
[RAMenuItemBasic itemWithDescription:BOXSTRING("Core")
|
||||||
action:^{ [weakSelf chooseCoreWithPath:nil]; }
|
action:^{ [weakSelf chooseCoreWithPath:nil]; }
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include "bluetooth/btdynamic.h"
|
#include "bluetooth/btdynamic.h"
|
||||||
#include "bluetooth/btpad.h"
|
#include "bluetooth/btpad.h"
|
||||||
|
|
||||||
|
#include "../../menu/disp/ios.h"
|
||||||
|
|
||||||
id<RetroArch_Platform> apple_platform;
|
id<RetroArch_Platform> apple_platform;
|
||||||
|
|
||||||
void apple_rarch_exited(void);
|
void apple_rarch_exited(void);
|
||||||
@ -211,6 +213,13 @@ enum
|
|||||||
return (RetroArch_iOS*)[[UIApplication sharedApplication] delegate];
|
return (RetroArch_iOS*)[[UIApplication sharedApplication] delegate];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void switch_to_ios() {
|
||||||
|
if ( apple_platform != NULL ) {
|
||||||
|
RetroArch_iOS *ap = (RetroArch_iOS *)apple_platform;
|
||||||
|
[ap showPauseMenu:ap];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)applicationDidFinishLaunching:(UIApplication *)application
|
- (void)applicationDidFinishLaunching:(UIApplication *)application
|
||||||
{
|
{
|
||||||
apple_platform = self;
|
apple_platform = self;
|
||||||
@ -228,6 +237,11 @@ enum
|
|||||||
if (rarch_main(0, NULL))
|
if (rarch_main(0, NULL))
|
||||||
apple_rarch_exited();
|
apple_rarch_exited();
|
||||||
|
|
||||||
|
if ( driver.menu != NULL && driver.menu->userdata != NULL ) {
|
||||||
|
ios_handle_t *ih = (ios_handle_t*)driver.menu->userdata;
|
||||||
|
ih->switch_to_ios = switch_to_ios;
|
||||||
|
}
|
||||||
|
|
||||||
apple_gamecontroller_init();
|
apple_gamecontroller_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
driver.c
3
driver.c
@ -227,6 +227,9 @@ static const location_driver_t *location_drivers[] = {
|
|||||||
|
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
static const menu_ctx_driver_t *menu_ctx_drivers[] = {
|
static const menu_ctx_driver_t *menu_ctx_drivers[] = {
|
||||||
|
#ifdef IOS
|
||||||
|
&menu_ctx_ios,
|
||||||
|
#endif
|
||||||
#if defined(HAVE_RMENU)
|
#if defined(HAVE_RMENU)
|
||||||
&menu_ctx_rmenu,
|
&menu_ctx_rmenu,
|
||||||
#endif
|
#endif
|
||||||
|
1
driver.h
1
driver.h
@ -694,6 +694,7 @@ extern menu_ctx_driver_t menu_ctx_rgui;
|
|||||||
extern menu_ctx_driver_t menu_ctx_glui;
|
extern menu_ctx_driver_t menu_ctx_glui;
|
||||||
extern menu_ctx_driver_t menu_ctx_xmb;
|
extern menu_ctx_driver_t menu_ctx_xmb;
|
||||||
extern menu_ctx_driver_t menu_ctx_lakka;
|
extern menu_ctx_driver_t menu_ctx_lakka;
|
||||||
|
extern menu_ctx_driver_t menu_ctx_ios;
|
||||||
|
|
||||||
extern menu_ctx_driver_backend_t menu_ctx_backend_common;
|
extern menu_ctx_driver_backend_t menu_ctx_backend_common;
|
||||||
extern menu_ctx_driver_backend_t menu_ctx_backend_lakka;
|
extern menu_ctx_driver_backend_t menu_ctx_backend_lakka;
|
||||||
|
@ -702,6 +702,10 @@ MENU
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef IOS
|
||||||
|
#include "../menu/disp/ios.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_COMMAND
|
#ifdef HAVE_COMMAND
|
||||||
#include "../command.c"
|
#include "../command.c"
|
||||||
#endif
|
#endif
|
||||||
|
92
menu/disp/ios.c
Normal file
92
menu/disp/ios.c
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* RetroArch - A frontend for libretro.
|
||||||
|
* Copyright (C) 2014 - Jay McCarthy
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "../menu_common.h"
|
||||||
|
#include "../../general.h"
|
||||||
|
#include "ios.h"
|
||||||
|
|
||||||
|
static void* ios_init () {
|
||||||
|
menu_handle_t *menu = (menu_handle_t*)calloc(1, sizeof(*menu));
|
||||||
|
if (menu == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->userdata = (ios_handle_t*)calloc(1, sizeof(ios_handle_t));
|
||||||
|
if (menu->userdata == NULL) {
|
||||||
|
free(menu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ios_free ( void* data ) {
|
||||||
|
menu_handle_t *menu = (menu_handle_t*)data;
|
||||||
|
if (menu == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu->userdata != NULL) {
|
||||||
|
free(menu->userdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(menu);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ios_render() {
|
||||||
|
ios_handle_t *ih = NULL;
|
||||||
|
if (driver.menu == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ih = (ios_handle_t*)driver.menu->userdata;
|
||||||
|
if ( ih->switch_to_ios != NULL ) {
|
||||||
|
ih->switch_to_ios();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_ctx_driver_t menu_ctx_ios = {
|
||||||
|
NULL, // set_texture
|
||||||
|
NULL, // render_messagebox
|
||||||
|
ios_render, // render
|
||||||
|
NULL, // frame
|
||||||
|
ios_init, // init
|
||||||
|
NULL, // init_lists
|
||||||
|
ios_free, // free
|
||||||
|
NULL, // context_reset
|
||||||
|
NULL, // context_destroy
|
||||||
|
NULL, // populate_entries
|
||||||
|
NULL, // iterate
|
||||||
|
NULL, // input_postprocess
|
||||||
|
NULL, // navigation_clear
|
||||||
|
NULL, // navigation_decrement
|
||||||
|
NULL, // navigation_increment
|
||||||
|
NULL, // navigation_set
|
||||||
|
NULL, // navigation_set_last
|
||||||
|
NULL, // navigation_descend_alphabet
|
||||||
|
NULL, // navigation_ascend_alphabet
|
||||||
|
NULL, // list_insert
|
||||||
|
NULL, // list_delete
|
||||||
|
NULL, // list_clear
|
||||||
|
NULL, // list_set_selection
|
||||||
|
NULL, // init_core_info
|
||||||
|
&menu_ctx_backend_common, // backend
|
||||||
|
"ios",
|
||||||
|
};
|
18
menu/disp/ios.h
Normal file
18
menu/disp/ios.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* RetroArch - A frontend for libretro.
|
||||||
|
* Copyright (C) 2014 - Jay McCarthy
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct ios_handle {
|
||||||
|
void (*switch_to_ios)(void);
|
||||||
|
} ios_handle_t;
|
Loading…
x
Reference in New Issue
Block a user