mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-08-24 22:45:12 +02:00
Merge pull request #17346 from hrydgard/more-mac-work
Some more MacOS work
This commit is contained in:
+114
-50
@@ -13,6 +13,8 @@
|
||||
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include "Core/MemMap.h"
|
||||
#include "Core/System.h"
|
||||
#include "Core/Core.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
#include "Common/File/Path.h"
|
||||
#include "Common/System/System.h"
|
||||
@@ -22,9 +24,6 @@
|
||||
#include "Common/StringUtils.h"
|
||||
|
||||
void TakeScreenshot();
|
||||
/* including "Core/Core.h" results in a compilation error soo */
|
||||
bool Core_IsStepping();
|
||||
void Core_EnableStepping(bool step, const char *reason = nullptr, u32 relatedAddress = 0);
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -84,20 +83,25 @@ void OSXOpenURL(const char *url) {
|
||||
fileMenuItem.submenu = [self makeFileSubmenu];
|
||||
fileMenuItem.submenu.delegate = self;
|
||||
|
||||
NSMenuItem *graphicsMenuItem = [[NSMenuItem alloc] init];
|
||||
graphicsMenuItem.submenu = [self makeGraphicsMenu];
|
||||
graphicsMenuItem.submenu.delegate = self;
|
||||
|
||||
NSMenuItem *emulationMenuItem = [[NSMenuItem alloc] init];
|
||||
emulationMenuItem.submenu = [self makeEmulationMenu];
|
||||
emulationMenuItem.submenu.delegate = self;
|
||||
|
||||
NSMenuItem *debugMenuItem = [[NSMenuItem alloc] init];
|
||||
debugMenuItem.submenu = [self makeDebugMenu];
|
||||
debugMenuItem.submenu.delegate = self;
|
||||
|
||||
NSMenuItem *graphicsMenuItem = [[NSMenuItem alloc] init];
|
||||
graphicsMenuItem.submenu = [self makeGraphicsMenu];
|
||||
graphicsMenuItem.submenu.delegate = self;
|
||||
|
||||
NSMenuItem *helpMenuItem = [[NSMenuItem alloc] init];
|
||||
helpMenuItem.submenu = [self makeHelpMenu];
|
||||
|
||||
[NSApplication.sharedApplication.menu addItem:fileMenuItem];
|
||||
[NSApplication.sharedApplication.menu addItem:graphicsMenuItem];
|
||||
[NSApplication.sharedApplication.menu addItem:emulationMenuItem];
|
||||
[NSApplication.sharedApplication.menu addItem:debugMenuItem];
|
||||
[NSApplication.sharedApplication.menu addItem:graphicsMenuItem];
|
||||
[NSApplication.sharedApplication.menu addItem:helpMenuItem];
|
||||
|
||||
NSString *windowMenuItemTitle = @"Window"; // Don't translate, we lookup this.
|
||||
@@ -153,7 +157,27 @@ void OSXOpenURL(const char *url) {
|
||||
}
|
||||
|
||||
- (void)menuNeedsUpdate:(NSMenu *)menu {
|
||||
if ([menu.title isEqualToString: [self localizedMenuString:"Graphics"]]) {
|
||||
if ([menu.title isEqualToString: [self localizedMenuString:"Emulation"]]) {
|
||||
menu.autoenablesItems = NO;
|
||||
printf("ASD\n");
|
||||
// Enable/disable the various items.
|
||||
for (NSMenuItem *item in menu.itemArray) {
|
||||
switch (item.tag) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
{
|
||||
GlobalUIState state = GetUIState();
|
||||
item.enabled = state == UISTATE_INGAME ? YES : NO;
|
||||
printf("Setting enabled state to %d\n", (int)item.enabled);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf("Unknown tag %d\n", (int)(long)item.tag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if ([menu.title isEqualToString: [self localizedMenuString:"Graphics"]]) {
|
||||
for (NSMenuItem *item in menu.itemArray) {
|
||||
switch (item.tag) {
|
||||
case 1:
|
||||
@@ -248,9 +272,9 @@ void OSXOpenURL(const char *url) {
|
||||
NSMenu *backendsMenu = [[NSMenu alloc] init];
|
||||
#define GRAPHICS_LOCALIZED(key) @(graphicsLocalization->T(key))
|
||||
#define DESKTOPUI_LOCALIZED(key) @(UnescapeMenuString(desktopUILocalization->T(key), nil).c_str())
|
||||
|
||||
|
||||
NSMenuItem *gpuBackendItem = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Backend") action:nil keyEquivalent:@""];
|
||||
|
||||
|
||||
std::vector<GPUBackend> allowed = [self allowedGPUBackends];
|
||||
for (int i = 0; i < allowed.size(); i++) {
|
||||
NSMenuItem *backendMenuItem = [[NSMenuItem alloc] initWithTitle:@(GPUBackendToString(allowed[i]).c_str()) action: @selector(setCurrentGPUBackend:) keyEquivalent: @""];
|
||||
@@ -259,37 +283,39 @@ void OSXOpenURL(const char *url) {
|
||||
backendMenuItem.state = [self controlStateForBool: g_Config.iGPUBackend == (int)allowed[i]];
|
||||
[backendsMenu addItem:backendMenuItem];
|
||||
}
|
||||
|
||||
|
||||
gpuBackendItem.submenu = backendsMenu;
|
||||
[parent addItem:gpuBackendItem];
|
||||
|
||||
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
MENU_ITEM(softwareRendering, GRAPHICS_LOCALIZED("Software Rendering"), @selector(toggleSoftwareRendering:), g_Config.bSoftwareRendering, 1)
|
||||
[parent addItem:softwareRendering];
|
||||
|
||||
|
||||
/*
|
||||
MENU_ITEM(vsyncItem, GRAPHICS_LOCALIZED("VSync"), @selector(toggleVSync:), g_Config.bVSync, 2)
|
||||
[parent addItem:vsyncItem];
|
||||
|
||||
*/
|
||||
|
||||
MENU_ITEM(fullScreenItem, DESKTOPUI_LOCALIZED("Fullscreen"), @selector(toggleFullScreen:), g_Config.bFullScreen, 3)
|
||||
[parent addItem:fullScreenItem];
|
||||
|
||||
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
MENU_ITEM(autoFrameSkip, GRAPHICS_LOCALIZED("Auto FrameSkip"), @selector(toggleAutoFrameSkip:), g_Config.bAutoFrameSkip, 4)
|
||||
[parent addItem:autoFrameSkip];
|
||||
|
||||
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
MENU_ITEM(fpsCounterItem, DESKTOPUI_LOCALIZED("Show FPS Counter"), @selector(setToggleShowCounterItem:), g_Config.iShowStatusFlags & (int)ShowStatusFlags::FPS_COUNTER, 5)
|
||||
fpsCounterItem.tag = (int)ShowStatusFlags::FPS_COUNTER + 100;
|
||||
|
||||
|
||||
MENU_ITEM(speedCounterItem, GRAPHICS_LOCALIZED("Show Speed"), @selector(setToggleShowCounterItem:), g_Config.iShowStatusFlags & (int)ShowStatusFlags::SPEED_COUNTER, 6)
|
||||
speedCounterItem.tag = (int)ShowStatusFlags::SPEED_COUNTER + 100; // because of menuNeedsUpdate:
|
||||
|
||||
|
||||
MENU_ITEM(batteryPercentItem, GRAPHICS_LOCALIZED("Show battery %"), @selector(setToggleShowCounterItem:), g_Config.iShowStatusFlags & (int)ShowStatusFlags::BATTERY_PERCENT, 7)
|
||||
batteryPercentItem.tag = (int)ShowStatusFlags::BATTERY_PERCENT + 100;
|
||||
|
||||
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
[parent addItem:fpsCounterItem];
|
||||
[parent addItem:speedCounterItem];
|
||||
@@ -299,80 +325,118 @@ void OSXOpenURL(const char *url) {
|
||||
return parent;
|
||||
}
|
||||
|
||||
-(NSMenu *)makeEmulationMenu {
|
||||
std::shared_ptr<I18NCategory> desktopUILocalization = GetI18NCategory(I18NCat::DESKTOPUI);
|
||||
#define DESKTOPUI_LOCALIZED(key) @(UnescapeMenuString(desktopUILocalization->T(key), nil).c_str())
|
||||
|
||||
NSMenu *parent = [[NSMenu alloc] initWithTitle:DESKTOPUI_LOCALIZED("Emulation")];
|
||||
|
||||
NSMenuItem *pauseAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Pause") action:@selector(pauseAction:) keyEquivalent:@""];
|
||||
pauseAction.target = self;
|
||||
pauseAction.tag = 1;
|
||||
NSMenuItem *resetAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Reset") action:@selector(resetAction:) keyEquivalent:@""];
|
||||
resetAction.target = self;
|
||||
resetAction.tag = 2;
|
||||
|
||||
[parent addItem:pauseAction];
|
||||
[parent addItem:resetAction];
|
||||
|
||||
return parent;
|
||||
}
|
||||
|
||||
-(NSMenu *)makeDebugMenu {
|
||||
std::shared_ptr<I18NCategory> sysInfoLocalization = GetI18NCategory(I18NCat::SYSINFO);
|
||||
std::shared_ptr<I18NCategory> desktopUILocalization = GetI18NCategory(I18NCat::DESKTOPUI);
|
||||
#define DESKTOPUI_LOCALIZED(key) @(UnescapeMenuString(desktopUILocalization->T(key), nil).c_str())
|
||||
|
||||
NSMenu *parent = [[NSMenu alloc] initWithTitle:DESKTOPUI_LOCALIZED("Debugging")];
|
||||
|
||||
|
||||
NSMenuItem *breakAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Break") action:@selector(breakAction:) keyEquivalent:@""];
|
||||
breakAction.tag = 1;
|
||||
breakAction.target = self;
|
||||
|
||||
|
||||
MENU_ITEM(breakOnLoadAction, DESKTOPUI_LOCALIZED("Break on Load"), @selector(toggleBreakOnLoad:), g_Config.bAutoRun, 2)
|
||||
MENU_ITEM(ignoreIllegalRWAction, DESKTOPUI_LOCALIZED("Ignore Illegal Reads/Writes"), @selector(toggleIgnoreIllegalRWs:), g_Config.bIgnoreBadMemAccess, 3)
|
||||
|
||||
|
||||
[parent addItem:breakAction];
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
[parent addItem:breakOnLoadAction];
|
||||
[parent addItem:ignoreIllegalRWAction];
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
NSMenuItem *loadSymbolMapAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Load Map File...") action:@selector(loadMapFile) keyEquivalent:@""];
|
||||
loadSymbolMapAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *saveMapFileAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Save Map file...") action:@selector(saveMapFile) keyEquivalent:@""];
|
||||
saveMapFileAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *loadSymFileAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Load .sym File...") action:@selector(loadSymbolsFile) keyEquivalent:@""];
|
||||
loadSymFileAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *saveSymFileAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Save .sym File...") action:@selector(saveSymbolsfile) keyEquivalent:@""];
|
||||
saveSymFileAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *resetSymbolTableAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Reset Symbol Table") action:@selector(resetSymbolTable) keyEquivalent:@""];
|
||||
resetSymbolTableAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *takeScreenshotAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Take Screenshot") action:@selector(takeScreenshot) keyEquivalent:@""];
|
||||
takeScreenshotAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *dumpNextFrameToLogAction = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Dump Next Frame to Log") action:@selector(dumpNextFrameToLog) keyEquivalent:@""];
|
||||
dumpNextFrameToLogAction.target = self;
|
||||
|
||||
|
||||
NSMenuItem *copyBaseAddr = [[NSMenuItem alloc] initWithTitle:DESKTOPUI_LOCALIZED("Copy PSP memory base address") action:@selector(copyAddr) keyEquivalent:@""];
|
||||
copyBaseAddr.target = self;
|
||||
|
||||
|
||||
MENU_ITEM(showDebugStatsAction, DESKTOPUI_LOCALIZED("Show Debug Statistics"), @selector(toggleShowDebugStats:), g_Config.bShowDebugStats, 2)
|
||||
|
||||
|
||||
[parent addItem:loadSymbolMapAction];
|
||||
[parent addItem:saveMapFileAction];
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
[parent addItem:loadSymFileAction];
|
||||
[parent addItem:saveSymFileAction];
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
[parent addItem:resetSymbolTableAction];
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
|
||||
[parent addItem:takeScreenshotAction];
|
||||
[parent addItem:dumpNextFrameToLogAction];
|
||||
[parent addItem:showDebugStatsAction];
|
||||
|
||||
|
||||
[parent addItem:[NSMenuItem separatorItem]];
|
||||
[parent addItem:copyBaseAddr];
|
||||
return parent;
|
||||
}
|
||||
|
||||
-(void)breakAction: (NSMenuItem *)item {
|
||||
std::shared_ptr<I18NCategory> desktopUILocalization = GetI18NCategory(I18NCat::DESKTOPUI);
|
||||
#define DESKTOPUI_LOCALIZED(key) @(UnescapeMenuString(desktopUILocalization->T(key), nil).c_str())
|
||||
std::shared_ptr<I18NCategory> developerUILocalization = GetI18NCategory(I18NCat::DEVELOPER);
|
||||
#define DEVELOPERUI_LOCALIZED(key) @(developerUILocalization->T(key))
|
||||
if (Core_IsStepping()) {
|
||||
Core_EnableStepping(false, "ui.break");
|
||||
item.title = @"Break";
|
||||
item.title = DESKTOPUI_LOCALIZED("Break");
|
||||
} else {
|
||||
Core_EnableStepping(true, "ui.break");
|
||||
item.title = @"Resume";
|
||||
item.title = DEVELOPERUI_LOCALIZED("Resume");
|
||||
}
|
||||
}
|
||||
|
||||
-(void)pauseAction: (NSMenuItem *)item {
|
||||
NativeMessageReceived("pause", "");
|
||||
}
|
||||
|
||||
-(void)resetAction: (NSMenuItem *)item {
|
||||
NativeMessageReceived("reset", "");
|
||||
Core_EnableStepping(false);
|
||||
}
|
||||
|
||||
-(void)chatAction: (NSMenuItem *)item {
|
||||
if (GetUIState() == UISTATE_INGAME) {
|
||||
NativeMessageReceived("chat screen", "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,12 +451,10 @@ void OSXOpenURL(const char *url) {
|
||||
openPanel.allowedFileTypes = allowedFileTypes;
|
||||
if ([openPanel runModal] == NSModalResponseOK) {
|
||||
NSURL *urlWeWant = openPanel.URLs.firstObject;
|
||||
|
||||
if (urlWeWant) {
|
||||
return urlWeWant;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -402,7 +464,6 @@ void OSXOpenURL(const char *url) {
|
||||
if ([savePanel runModal] == NSModalResponseOK && savePanel.URL) {
|
||||
return savePanel.URL;
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
@@ -456,7 +517,7 @@ TOGGLE_METHOD(IgnoreIllegalRWs, g_Config.bIgnoreBadMemAccess)
|
||||
TOGGLE_METHOD(AutoFrameSkip, g_Config.bAutoFrameSkip, g_Config.UpdateAfterSettingAutoFrameSkip())
|
||||
TOGGLE_METHOD(SoftwareRendering, g_Config.bSoftwareRendering)
|
||||
TOGGLE_METHOD(FullScreen, g_Config.bFullScreen, System_MakeRequest(SystemRequestType::TOGGLE_FULLSCREEN_STATE, 0, g_Config.UseFullScreen() ? "1" : "0", "", 3))
|
||||
TOGGLE_METHOD(VSync, g_Config.bVSync)
|
||||
// TOGGLE_METHOD(VSync, g_Config.bVSync)
|
||||
TOGGLE_METHOD(ShowDebugStats, g_Config.bShowDebugStats, NativeMessageReceived("clear jit", ""))
|
||||
#undef TOGGLE_METHOD
|
||||
|
||||
@@ -479,10 +540,10 @@ TOGGLE_METHOD(ShowDebugStats, g_Config.bShowDebugStats, NativeMessageReceived("c
|
||||
printf("only one item, bailing");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
g_Config.iGPUBackend = (int)(allowed[sender.tag]);
|
||||
sender.state = NSControlStateValueOn;
|
||||
|
||||
|
||||
for (NSMenuItem *item in sender.menu.itemArray) {
|
||||
// deselect the previously selected item
|
||||
if (item.state == NSControlStateValueOn && item.tag != sender.tag) {
|
||||
@@ -513,8 +574,11 @@ TOGGLE_METHOD(ShowDebugStats, g_Config.bShowDebugStats, NativeMessageReceived("c
|
||||
}
|
||||
|
||||
-(void)addOpenRecentlyItem {
|
||||
std::shared_ptr<I18NCategory> mainmenuLocalization = GetI18NCategory(I18NCat::MAINMENU);
|
||||
#define MAINMENU_LOCALIZED(key) @(mainmenuLocalization->T(key))
|
||||
|
||||
std::vector<std::string> recentIsos = g_Config.RecentIsos();
|
||||
NSMenuItem *openRecent = [[NSMenuItem alloc] initWithTitle:@"Recent" action:nil keyEquivalent:@""];
|
||||
NSMenuItem *openRecent = [[NSMenuItem alloc] initWithTitle:MAINMENU_LOCALIZED("Recent") action:nil keyEquivalent:@""];
|
||||
NSMenu *recentsMenu = [[NSMenu alloc] init];
|
||||
if (recentIsos.empty())
|
||||
openRecent.enabled = NO;
|
||||
|
||||
+4
-16
@@ -1,20 +1,8 @@
|
||||
1. Install GCC, CMake, and development libraries for zlib and sdl.
|
||||
2. mkdir build
|
||||
3. cd build
|
||||
4. cmake ..
|
||||
5. make
|
||||
Build instructions
|
||||
==================
|
||||
See https://github.com/hrydgard/ppsspp/wiki/Build-instructions .
|
||||
|
||||
That should do it.
|
||||
|
||||
Special instructions for MacOSX:
|
||||
|
||||
Install XCode
|
||||
Install CMake
|
||||
Open XCode, Preferences, Downloads, Components. Install the command line toools.
|
||||
|
||||
Install MacPorts
|
||||
Using MacPorts, install libpng
|
||||
Do the above.
|
||||
Also, for general information, see https://www.ppsspp.org/docs .
|
||||
|
||||
SDL2 Game Controller Support Notes
|
||||
==================================
|
||||
|
||||
@@ -509,6 +509,7 @@ namespace MainWindow {
|
||||
g_Config.bEnableCheats = !g_Config.bEnableCheats;
|
||||
osm.ShowOnOff(gr->T("Cheats"), g_Config.bEnableCheats);
|
||||
break;
|
||||
|
||||
case ID_EMULATION_CHAT:
|
||||
if (GetUIState() == UISTATE_INGAME) {
|
||||
NativeMessageReceived("chat screen", "");
|
||||
|
||||
@@ -250,7 +250,7 @@ Reset = Återställ
|
||||
Reset limited logging = Reset limited logging
|
||||
RestoreDefaultSettings = Restore these settings back to their defaults?\nYou can't undo this.\nPlease restart PPSSPP after restoring settings.
|
||||
RestoreGameDefaultSettings = Are you sure you want to restore the game-specific settings\nback to the PPSSPP defaults?
|
||||
Resume = Resume
|
||||
Resume = Fortsätt
|
||||
Run CPU Tests = Kör CPU-tester
|
||||
Save new textures = Spara nya texturer
|
||||
Shader Viewer = Shader-visare
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Contents/MacOS/PPSSPPSDL</string>
|
||||
<string>PPSSPPSDL</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Contents/MacOS/PPSSPPGold</string>
|
||||
<string>PPSSPPGold</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
|
||||
Reference in New Issue
Block a user