diff --git a/gfx/drivers_context/cocoa_gl_ctx.m b/gfx/drivers_context/cocoa_gl_ctx.m index d3a22f8863..572e0de64c 100644 --- a/gfx/drivers_context/cocoa_gl_ctx.m +++ b/gfx/drivers_context/cocoa_gl_ctx.m @@ -231,8 +231,9 @@ float get_backing_scale_factor(void) { static float backing_scale_def = 0.0f; +#if TARGET_OS_OSX RAScreen *screen = NULL; - +#endif if (backing_scale_def != 0.0f) return backing_scale_def; diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index 9fb7928c90..369576c817 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -38,111 +38,6 @@ /* Forward declarations */ float get_backing_scale_factor(void); -int32_t cocoa_input_find_any_key(void) -{ - cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data(); - - if (!apple) - return 0; - - if (apple->joypad) - apple->joypad->poll(); - -#ifdef HAVE_MFI - if (apple->sec_joypad) - apple->sec_joypad->poll(); -#endif - - return apple_keyboard_find_any_key(); -} - -static int cocoa_input_find_any_button_ret(cocoa_input_data_t *apple, - input_bits_t * state, unsigned port) -{ - unsigned i; - - if (state) - for (i = 0; i < 256; i++) - if (BIT256_GET_PTR(state,i)) - return i; - return -1; -} - -int32_t cocoa_input_find_any_button(uint32_t port) -{ - int ret = -1; - cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data(); - - if (!apple) - return -1; - - if (apple->joypad) - { - apple->joypad->poll(); - - if (apple->joypad->get_buttons) - { - input_bits_t state; - apple->joypad->get_buttons(port,&state); - ret = cocoa_input_find_any_button_ret(apple, &state, port); - } - } - - if (ret != -1) - return ret; - -#ifdef HAVE_MFI - if (apple->sec_joypad) - { - apple->sec_joypad->poll(); - - if (apple->sec_joypad->get_buttons) - { - input_bits_t state; - apple->sec_joypad->poll(); - apple->sec_joypad->get_buttons(port,&state); - ret = cocoa_input_find_any_button_ret(apple, &state, port); - } - } -#endif - - if (ret != -1) - return ret; - - return -1; -} - -int32_t cocoa_input_find_any_axis(uint32_t port) -{ - int i; - cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data(); - - if (apple && apple->joypad) - apple->joypad->poll(); - -#ifdef HAVE_MFI - if (apple && apple->sec_joypad) - apple->sec_joypad->poll(); -#endif - - for (i = 0; i < 6; i++) - { - int16_t value = apple->joypad ? apple->joypad->axis(port, i) : 0; - - if (abs(value) > 0x4000) - return (value < 0) ? -(i + 1) : i + 1; - -#ifdef HAVE_MFI - value = apple->sec_joypad ? apple->sec_joypad->axis(port, i) : value; -#endif - - if (abs(value) > 0x4000) - return (value < 0) ? -(i + 1) : i + 1; - } - - return 0; -} - static void *cocoa_input_init(const char *joypad_driver) { cocoa_input_data_t *apple = (cocoa_input_data_t*)calloc(1, sizeof(*apple)); diff --git a/input/drivers/cocoa_input.h b/input/drivers/cocoa_input.h index 2f2cd068ab..013973752c 100644 --- a/input/drivers/cocoa_input.h +++ b/input/drivers/cocoa_input.h @@ -59,10 +59,4 @@ typedef struct const input_device_driver_t *joypad; } cocoa_input_data_t; -extern int32_t cocoa_input_find_any_key(void); - -extern int32_t cocoa_input_find_any_button(uint32_t port); - -extern int32_t cocoa_input_find_any_axis(uint32_t port); - #endif diff --git a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj index 68613e0511..105653c3a1 100644 --- a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj @@ -274,7 +274,6 @@ 05A8C5BA20DB72F000FF7857 /* ui_cocoa.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa.m; sourceTree = ""; }; 05A8C5BC20DB72F000FF7857 /* ui_cocoa_msg_window.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa_msg_window.m; sourceTree = ""; }; 05A8C5BD20DB72F000FF7857 /* cocoa_common.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = cocoa_common.m; sourceTree = ""; }; - 05A8C5BE20DB72F000FF7857 /* cocoatouch_menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = cocoatouch_menu.m; sourceTree = ""; }; 05A8C5BF20DB72F000FF7857 /* ui_cocoa_browser_window.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa_browser_window.m; sourceTree = ""; }; 05A8C5C020DB72F000FF7857 /* ui_cocoa_window.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa_window.m; sourceTree = ""; }; 05A8C5C120DB72F000FF7857 /* ui_cocoa_application.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ui_cocoa_application.m; sourceTree = ""; }; @@ -946,7 +945,6 @@ A9020AF14B9A73364C6CDDA5 /* cocoa_common_metal.m */, 05A8C5C220DB72F000FF7857 /* cocoa_common.h */, 05A8C5BD20DB72F000FF7857 /* cocoa_common.m */, - 05A8C5BE20DB72F000FF7857 /* cocoatouch_menu.m */, A9020F2EEF870903107B0EA7 /* ui_cocoa_application_metal.m */, 05A8C5C120DB72F000FF7857 /* ui_cocoa_application.m */, A9020F48BA562B13D4789292 /* ui_cocoa_browser_window_metal.m */, diff --git a/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj index 60ad3de05a..0ebaa21c3f 100644 --- a/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj @@ -130,7 +130,6 @@ 92CC05C421FEDC9F00FF79F0 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 92CC05C621FEDD0B00FF79F0 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; 92D3D56B232D86AC001B0D86 /* cocoa_common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cocoa_common.h; sourceTree = ""; }; - 92D3D56C232D86AC001B0D86 /* cocoatouch_menu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = cocoatouch_menu.m; sourceTree = ""; }; 92D3D56D232D86AC001B0D86 /* cocoa_common.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = cocoa_common.m; sourceTree = ""; }; 92D3D56F232D86AC001B0D86 /* cocoa_defines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cocoa_defines.h; sourceTree = ""; }; 92D3D572232D8AEF001B0D86 /* ui_cocoatouch.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ui_cocoatouch.m; path = drivers/ui_cocoatouch.m; sourceTree = ""; }; @@ -317,7 +316,6 @@ 92D3D56B232D86AC001B0D86 /* cocoa_common.h */, 92D3D56D232D86AC001B0D86 /* cocoa_common.m */, 92D3D56F232D86AC001B0D86 /* cocoa_defines.h */, - 92D3D56C232D86AC001B0D86 /* cocoatouch_menu.m */, ); path = cocoa; sourceTree = ""; diff --git a/ui/drivers/cocoa/apple_platform.h b/ui/drivers/cocoa/apple_platform.h index b8d007461f..8a87b13c73 100644 --- a/ui/drivers/cocoa/apple_platform.h +++ b/ui/drivers/cocoa/apple_platform.h @@ -69,12 +69,9 @@ UINavigationControllerDelegate> { + (RetroArch_iOS*)get; - (void)showGameView; -- (void)toggleUI; - (void)supportOtherAudioSessions; - (void)refreshSystemConfig; -- (void)mainMenuPushPop: (bool)pushp; -- (void)mainMenuRefresh; @end #else diff --git a/ui/drivers/cocoa/cocoatouch_menu.m b/ui/drivers/cocoa/cocoatouch_menu.m deleted file mode 100644 index 6711ee3d4d..0000000000 --- a/ui/drivers/cocoa/cocoatouch_menu.m +++ /dev/null @@ -1,803 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2013-2014 - Jason Fetters - * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2014-2015 - 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 . - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "cocoa_common.h" -#include "../../../input/input_keymaps.h" -#include "../../../input/drivers/cocoa_input.h" - -#include "../../../configuration.h" -#include "../../../retroarch.h" - -#ifdef HAVE_MENU -#include "../../../menu/menu_entries.h" -#include "../../../menu/menu_driver.h" -#endif - -/* Menu Support */ - -static const void* const associated_delegate_key = &associated_delegate_key; - -typedef void (^RAActionSheetCallback)(UIActionSheet*, NSInteger); - -@interface RARunActionSheetDelegate : NSObject -@property (nonatomic, copy) RAActionSheetCallback callbackBlock; -@end - -@implementation RARunActionSheetDelegate - -- (id)initWithCallbackBlock:(RAActionSheetCallback)callback -{ - if ((self = [super init])) - _callbackBlock = callback; - return self; -} - -- (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex -{ - if (self.callbackBlock) - self.callbackBlock(actionSheet, buttonIndex); -} - -@end - -static void RunActionSheet(const char* title, const struct string_list* items, - UIView* parent, RAActionSheetCallback callback) -{ - size_t i; - RARunActionSheetDelegate* delegate = - [[RARunActionSheetDelegate alloc] initWithCallbackBlock:callback]; - UIActionSheet* actionSheet = [UIActionSheet new]; - - actionSheet.title = BOXSTRING(title); - actionSheet.delegate = delegate; - - for (i = 0; i < items->size; i ++) - [actionSheet addButtonWithTitle:BOXSTRING(items->elems[i].data)]; - - actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:BOXSTRING("Cancel")]; - - objc_setAssociatedObject(actionSheet, associated_delegate_key, - delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - [actionSheet showInView:parent]; -} - -// Menu Entries - -@protocol RAMenuActioner -- (void)menuSelect:(uint32_t) i; -@end - -@interface RAMenuItemBase : NSObject -@property (nonatomic) id main; -@property (nonatomic) uint32_t i; -@property (nonatomic, weak) UITableView* parentTable; -- (void)initialize:(NSObject *) main idx:(uint32_t) i; -- (UITableViewCell*)cellForTableView:(UITableView*)tableView; -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller; -@end - -@implementation RAMenuItemBase -- (void)initialize:(NSObject*)main idx:(uint32_t) i { - _main = main; - _i = i; -} - -- (UITableViewCell*)cellForTableView:(UITableView*)tableView -{ - menu_entry_t entry; - char buffer[PATH_MAX_LENGTH]; - static NSString* const cell_id = @"text"; - - self.parentTable = tableView; - - UITableViewCell* result = [tableView dequeueReusableCellWithIdentifier:cell_id]; - if (!result) - result = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 - reuseIdentifier:cell_id]; - - menu_entry_init(&entry); - menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - menu_entry_get_value(&entry, &buffer); - - if (string_is_empty(entry.label)) - strlcpy(buffer, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), - sizeof(buffer)); - - if (!string_is_empty(entry.label)) - result.textLabel.text = BOXSTRING(entry.label); - result.detailTextLabel.text = BOXSTRING(buffer); - - return result; -} - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller { -} - -@end - -@interface RAMenuItemBool : RAMenuItemBase -@end - -@implementation RAMenuItemBool - -- (UITableViewCell*)cellForTableView:(UITableView*)tableView -{ - menu_entry_t entry; - static NSString* const cell_id = @"boolean_setting"; - UITableViewCell * result = - (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cell_id]; - - if (!result) - { - result = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 - reuseIdentifier:cell_id]; - result.selectionStyle = UITableViewCellSelectionStyleNone; - result.accessoryView = [UISwitch new]; - } - - menu_entry_init(&entry); - menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - - if (!string_is_empty(entry.path)) - result.textLabel.text = BOXSTRING(entry.path); - - [(id)result.accessoryView removeTarget:nil - action:NULL - forControlEvents:UIControlEventValueChanged]; - [(id)result.accessoryView addTarget:self - action:@selector(handleBooleanSwitch:) - forControlEvents:UIControlEventValueChanged]; - [(id)result.accessoryView setOn:(menu_entry_get_bool_value(self.i))]; - return result; -} - -- (void)handleBooleanSwitch:(UISwitch*)swt -{ - [self.main menuSelect: self.i]; -} - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ -} -@end - -@interface RAMenuItemAction : RAMenuItemBase -@end - -@implementation RAMenuItemAction - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ - [self.main menuSelect: self.i]; -} - -@end - -@interface RAMenuItemEnum : RAMenuItemBase -@end - -@implementation RAMenuItemEnum -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ - menu_entry_t entry; - struct string_list* items = NULL; - RAMenuItemEnum __weak* weakSelf = self; - - menu_entry_init(&entry); - menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - items = menu_entry_enum_values(self.i); - - if (!string_is_empty(entry.path)) - { - RunActionSheet(entry.path, items, self.parentTable, - ^(UIActionSheet* actionSheet, NSInteger buttonIndex) - { - if (buttonIndex == actionSheet.cancelButtonIndex) - return; - - menu_entry_enum_set_value_with_string - (self.i, [[actionSheet buttonTitleAtIndex:buttonIndex] UTF8String]); - [weakSelf.parentTable reloadData]; - }); - } - string_list_free(items); -} -@end - -@interface RAMenuItemBind : RAMenuItemBase -@property (nonatomic) NSTimer* bindTimer; -@property (nonatomic) UIAlertView* alert; -@end - -@implementation RAMenuItemBind - -- (void)wasSelectedOnTableView:(UITableView *)tableView - ofController:(UIViewController *)controller -{ - menu_entry_t entry; - - menu_entry_init(&entry); - menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - - self.alert = [[UIAlertView alloc] - - initWithTitle:BOXSTRING("RetroArch") - message:BOXSTRING(entry.path) - delegate:self - cancelButtonTitle:BOXSTRING("Cancel") - otherButtonTitles:BOXSTRING("Clear Keyboard"), - BOXSTRING("Clear Joystick"), BOXSTRING("Clear Axis"), nil]; - - [self.alert show]; - - [self.parentTable reloadData]; - - self.bindTimer = [NSTimer - scheduledTimerWithTimeInterval:.1f - target:self - selector:@selector(checkBind:) - userInfo:nil - repeats:YES]; -} - -- (void)finishWithClickedButton:(bool)clicked -{ - if (!clicked) - [self.alert dismissWithClickedButtonIndex:self.alert.cancelButtonIndex - animated:YES]; - self.alert = nil; - - [self.parentTable reloadData]; - - [self.bindTimer invalidate]; - self.bindTimer = nil; -} - -- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - if (buttonIndex == alertView.firstOtherButtonIndex) - menu_entry_bind_key_set(self.i, RETROK_UNKNOWN); - else if(buttonIndex == alertView.firstOtherButtonIndex + 1) - menu_entry_bind_joykey_set(self.i, NO_BTN); - else if(buttonIndex == alertView.firstOtherButtonIndex + 2) - menu_entry_bind_joyaxis_set(self.i, AXIS_NONE); - - [self finishWithClickedButton:true]; -} - -- (void)checkBind:(NSTimer*)send -{ - int32_t value = 0; - int32_t idx = menu_entry_bind_index(self.i); - - if ((value = cocoa_input_find_any_key())) - menu_entry_bind_key_set(self.i, input_keymaps_translate_keysym_to_rk(value)); - else if ((value = cocoa_input_find_any_button(idx)) >= 0) - menu_entry_bind_joykey_set(self.i, value); - else if ((value = cocoa_input_find_any_axis(idx))) - menu_entry_bind_joyaxis_set(self.i, (value > 0) ? AXIS_POS(value - 1) : AXIS_NEG(abs(value) - 1)); - else - return; - - [self finishWithClickedButton:false]; -} -@end - -@interface RAMenuItemPathDir : RAMenuItemBase -@end - -@implementation RAMenuItemPathDir - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ -} - -@end - -@interface RAMenuItemPath : RAMenuItemPathDir -@end - -@implementation RAMenuItemPath - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ - [self.main menuSelect: self.i]; -} - -@end - -@interface RAMenuItemDir : RAMenuItemPathDir -@end - -@implementation RAMenuItemDir - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ - [self.main menuSelect: self.i]; -} - -@end - -@interface RANumberFormatter : NSNumberFormatter -- (void)setRangeFrom: (NSNumber*) min To: (NSNumber*) max; -@end - -@implementation RANumberFormatter -- (void)setRangeFrom: (NSNumber*) min To: (NSNumber*) max { - [self setMinimum: min]; - [self setMaximum: max]; -} - -- (BOOL)isPartialStringValid:(NSString*)partialString - newEditingString:(NSString**)newString - errorDescription:(NSString**)error -{ - unsigned i; - bool hasDot = false; - - if (partialString.length) - for (i = 0; i < partialString.length; i ++) - { - unichar ch = [partialString characterAtIndex:i]; - - if (i == 0 && (!self.minimum || self.minimum.intValue < 0) && ch == '-') - continue; - else if (self.allowsFloats && !hasDot && ch == '.') - hasDot = true; - else if (!isdigit(ch)) - return NO; - } - - return YES; -} - -- (BOOL)textField:(UITextField *)textField -shouldChangeCharactersInRange:(NSRange)range -replacementString:(NSString *)string -{ - NSString* text = (NSString*)[[textField text] - stringByReplacingCharactersInRange:range - withString:string]; - return [self isPartialStringValid:text - newEditingString:nil - errorDescription:nil]; -} - -@end - -@interface RAMenuItemGeneric : RAMenuItemBase -@property (nonatomic) RANumberFormatter* formatter; -@end - -@implementation RAMenuItemGeneric -- (UITableViewCell*)cellForTableView:(UITableView*)tableView -{ - UITableViewCell* result; - - result = [super cellForTableView: tableView]; - - [self attachDefaultingGestureTo:result]; - - return result; -} - -- (void)wasSelectedOnTableView:(UITableView*)tableView - ofController:(UIViewController*)controller -{ - menu_entry_t entry; - char buffer[PATH_MAX_LENGTH]; - UIAlertView *alertView = NULL; - UITextField *field = NULL; - NSString *desc = NULL; - - menu_entry_init(&entry); - menu_entry_get(&entry, 0, (unsigned)self.i, NULL, true); - - desc = BOXSTRING(entry.path); - alertView = - [[UIAlertView alloc] initWithTitle:BOXSTRING("Enter new value") - message:desc - delegate:self - cancelButtonTitle:BOXSTRING("Cancel") - otherButtonTitles:BOXSTRING("OK"), nil]; - alertView.alertViewStyle = UIAlertViewStylePlainTextInput; - - field = [alertView textFieldAtIndex:0]; - field.delegate = self.formatter; - - menu_entry_get_value(&entry, &buffer); - if (string_is_empty(buffer)) - strlcpy(buffer, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), - sizeof(buffer)); - - field.placeholder = BOXSTRING(buffer); - - [alertView show]; -} - -- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - NSString* text = (NSString*)[alertView textFieldAtIndex:0].text; - - if (buttonIndex != alertView.firstOtherButtonIndex) - return; - if (!text.length) - return; - - menu_entry_set_value(self.i, [text UTF8String]); - [self.parentTable reloadData]; -} - -- (void)attachDefaultingGestureTo:(UIView*)view -{ - for (UIGestureRecognizer* i in view.gestureRecognizers) - [view removeGestureRecognizer:i]; - [view addGestureRecognizer: - [[UILongPressGestureRecognizer alloc] - initWithTarget:self - action:@selector(resetValue:)]]; -} - -- (void)resetValue:(UIGestureRecognizer*)gesture -{ - struct string_list* items; - RAMenuItemGeneric __weak* weakSelf; - - if (gesture.state != UIGestureRecognizerStateBegan) - return; - - weakSelf = self; - items = (struct string_list*)string_split("OK", "|"); - RunActionSheet("Really Reset Value?", items, self.parentTable, - ^(UIActionSheet* actionSheet, NSInteger buttonIndex) - { - if (buttonIndex != actionSheet.cancelButtonIndex) { - menu_entry_reset(self.i); - } - [weakSelf.parentTable reloadData]; - }); - - string_list_free(items); -} - -@end - -@interface RAMenuItemNum : RAMenuItemGeneric -@end - -@implementation RAMenuItemNum - -- (void)initialize:(NSObject *) main idx:(uint32_t) i { - [super initialize:main idx:i]; - self.formatter = [RANumberFormatter new]; - - if (menu_entry_num_has_range(self.i)) - [self.formatter setRangeFrom:BOXFLOAT(menu_entry_num_min(self.i)) - To:BOXFLOAT(menu_entry_num_max(self.i))]; -} -@end - -@interface RAMenuItemInt : RAMenuItemNum -@end - -@implementation RAMenuItemInt -@end - -@interface RAMenuItemUInt : RAMenuItemNum -@end - -@implementation RAMenuItemUInt -@end - -@interface RAMenuItemFloat : RAMenuItemNum -@end - -@implementation RAMenuItemFloat -- (void)initialize:(NSObject *) main idx:(uint32_t) i { - [super initialize:main idx:i]; - [self.formatter setAllowsFloats: true]; -} -@end - -@interface RAMenuItemString : RAMenuItemGeneric -@end - -@implementation RAMenuItemString -@end - -// XXX This should be a new kind that opens a color picker -@interface RAMenuItemHex : RAMenuItemGeneric -@end - -@implementation RAMenuItemHex -@end - -@implementation RAMenuBase - -- (id)initWithStyle:(UITableViewStyle)style -{ - if ((self = [super initWithStyle:style])) - _sections = [NSMutableArray array]; - return self; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView -{ - return self.sections.count; -} - -- (NSString*)tableView:(UITableView*)tableView -titleForHeaderInSection:(NSInteger)section -{ - return nil; -} - -- (NSInteger)tableView:(UITableView *)tableView - numberOfRowsInSection:(NSInteger)section -{ - return [self.sections[section] count]; -} - -- (id)itemForIndexPath:(NSIndexPath*)indexPath -{ - return self.sections[indexPath.section][indexPath.row]; -} - -- (UITableViewCell*)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [[self itemForIndexPath:indexPath] cellForTableView:tableView]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return UITableViewAutomaticDimension; -} - -- (void)tableView:(UITableView *)tableView -didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [[self itemForIndexPath:indexPath] - wasSelectedOnTableView:tableView - ofController:self]; -} - -- (void)willReloadData -{ -} - -- (void)reloadData -{ - [self willReloadData]; - [self.tableView reloadData]; -} - --(void)renderMessageBox:(NSString *)msg -{ - UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Help" - message:msg - delegate:self - cancelButtonTitle:@"OK" - otherButtonTitles:nil]; - - [message show]; -} - --(void)msgQueuePush:(NSString *)msg -{ - self.osdmessage.text = msg; -} - -- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - menu_ctx_iterate_t iter; - - switch (buttonIndex) - { - case 0: - { - retro_time_t current_time = cpu_features_get_time_usec(); - iter.action = MENU_ACTION_OK; - menu_driver_iterate(&iter, current_time); - } - break; - } -} - -@end - -@interface RAMainMenu : RAMenuBase -@end - -@implementation RAMainMenu - -- (id)init -{ - if ((self = [super initWithStyle:UITableViewStylePlain])) - self.title = BOXSTRING("RetroArch"); - return self; -} - -- (void)viewWillAppear:(BOOL)animated -{ - UIBarButtonItem *item = NULL; - settings_t *settings = config_get_ptr(); - bool menu_core_enable = settings->bools.menu_core_enable; - - [self reloadData]; - - self.osdmessage = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)]; - self.osdmessage.backgroundColor = [UIColor clearColor]; - - item = [[UIBarButtonItem alloc] initWithCustomView:self.osdmessage]; - [self setToolbarItems: [NSArray arrayWithObject:item]]; - - if (menu_core_enable) - { - char title_msg[256]; - menu_entries_get_core_title(title_msg, sizeof(title_msg)); - self.osdmessage.text = BOXSTRING(title_msg); - } -} - -- (void)willReloadData -{ - size_t i, end; - char title[256]; - RAMainMenu* __weak weakSelf = NULL; - NSMutableArray *everything = [NSMutableArray array]; - settings_t *settings = config_get_ptr(); - bool menu_core_enable = settings->bools.menu_core_enable; - - if (menu_core_enable) - { - char title_msg[256]; - menu_entries_get_core_title(title_msg, sizeof(title_msg)); - self.osdmessage.text = BOXSTRING(title_msg); - } - - menu_entries_get_title(title, sizeof(title)); - self.title = BOXSTRING(title); - - end = menu_entries_get_size(); - menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i); - - for (; i < end; i++) - [everything addObject:[self make_menu_item_for_entry: (uint32_t)i]]; - - self.sections = [NSMutableArray array]; - [self.sections addObject:everything]; - - weakSelf = self; - if (menu_entries_ctl(MENU_ENTRIES_CTL_SHOW_BACK, NULL)) - [self set_leftbutton:BOXSTRING("Back") - target:weakSelf - action:@selector(menuBack)]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self set_rightbutton:BOXSTRING("Switch") - target:[RetroArch_iOS get] - action:@selector(showGameView)]; - }); -} - -- (void) set_leftbutton:(NSString *)title target:(id)target action:(SEL)action -{ - self.navigationItem.leftBarButtonItem = - [[UIBarButtonItem alloc] - initWithTitle:title - style:UIBarButtonItemStyleBordered - target:target - action:action]; -} - -- (void) set_rightbutton:(NSString *)title target:(id)target action:(SEL)action -{ - self.navigationItem.rightBarButtonItem = - [[UIBarButtonItem alloc] - initWithTitle:title - style:UIBarButtonItemStyleBordered - target:target - action:action]; -} - -- (RAMenuItemBase*)make_menu_item_for_entry: (uint32_t) i -{ - RAMenuItemBase *me = nil; - switch (menu_entry_get_type(i)) - { - case MENU_ENTRY_ACTION: - me = [RAMenuItemAction new]; - break; - case MENU_ENTRY_BOOL: - me = [RAMenuItemBool new]; - break; - case MENU_ENTRY_INT: - me = [RAMenuItemInt new]; - break; - case MENU_ENTRY_UINT: - me = [RAMenuItemUInt new]; - break; - case MENU_ENTRY_FLOAT: - me = [RAMenuItemFloat new]; - break; - case MENU_ENTRY_PATH: - me = [RAMenuItemPath new]; - break; - case MENU_ENTRY_DIR: - me = [RAMenuItemDir new]; - break; - case MENU_ENTRY_STRING: - me = [RAMenuItemString new]; - break; - case MENU_ENTRY_HEX: - me = [RAMenuItemHex new]; - break; - case MENU_ENTRY_BIND: - me = [RAMenuItemBind new]; - break; - case MENU_ENTRY_ENUM: - me = [RAMenuItemEnum new]; - break; - case MENU_ENTRY_SIZE: - /* TODO/FIXME - implement this */ - break; - }; - - [me initialize:self idx:i]; - - return me; -} - -- (void)menuSelect: (uint32_t) i -{ - menu_entry_select(i); - task_queue_check(); -} - -- (void)menuBack -{ -#ifdef HAVE_MENU - menu_entry_t entry = {0}; - size_t selection = menu_navigation_get_selection(); - - menu_entry_get(&entry, 0, selection, NULL, false); - menu_entry_action(&entry, selection, MENU_ACTION_CANCEL); -#endif -} - -@end diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index e2bdeffb06..54e092e85e 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -525,18 +525,6 @@ enum [self.window setRootViewController:self]; } -- (void)toggleUI -{ - if (ui_companion_is_on_foreground()) - { - [self showGameView]; - } - else - { - [self showPauseMenu:self]; - } -} - - (void)refreshSystemConfig { #if TARGET_OS_IOS