summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinWX/MainNoGUI.cpp
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2013-12-07 15:14:29 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2013-12-31 14:03:19 -0500
commit34692ab826abc8f8faa61bdb2280b742424528f1 (patch)
treeb0eedc645badbea316ff59c125eaf808b28777ec /Source/Core/DolphinWX/MainNoGUI.cpp
parent43e618682e8093602fc83dfa902ee7ae3fd3a4f6 (diff)
Remove unnecessary Src/ folders
Diffstat (limited to 'Source/Core/DolphinWX/MainNoGUI.cpp')
-rw-r--r--Source/Core/DolphinWX/MainNoGUI.cpp346
1 files changed, 346 insertions, 0 deletions
diff --git a/Source/Core/DolphinWX/MainNoGUI.cpp b/Source/Core/DolphinWX/MainNoGUI.cpp
new file mode 100644
index 0000000000..c9e61b46f7
--- /dev/null
+++ b/Source/Core/DolphinWX/MainNoGUI.cpp
@@ -0,0 +1,346 @@
+// Copyright 2013 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <getopt.h>
+
+#include "Common.h"
+#include "FileUtil.h"
+
+#if defined HAVE_X11 && HAVE_X11
+#include <X11/keysym.h>
+#include "State.h"
+#include "X11Utils.h"
+#endif
+
+#ifdef __APPLE__
+#import <Cocoa/Cocoa.h>
+#endif
+
+#include "Core.h"
+#include "Host.h"
+#include "CPUDetect.h"
+#include "Thread.h"
+#include "PowerPC/PowerPC.h"
+#include "HW/Wiimote.h"
+
+#include "VideoBackendBase.h"
+#include "ConfigManager.h"
+#include "LogManager.h"
+#include "BootManager.h"
+
+bool rendererHasFocus = true;
+bool running = true;
+
+void Host_NotifyMapLoaded() {}
+void Host_RefreshDSPDebuggerWindow() {}
+
+void Host_ShowJitResults(unsigned int address){}
+
+Common::Event updateMainFrameEvent;
+void Host_Message(int Id)
+{
+ switch (Id)
+ {
+ case WM_USER_STOP:
+ running = false;
+ break;
+ }
+}
+
+void* Host_GetRenderHandle()
+{
+ return NULL;
+}
+
+void* Host_GetInstance() { return NULL; }
+
+void Host_UpdateTitle(const char* title){};
+
+void Host_UpdateLogDisplay(){}
+
+void Host_UpdateDisasmDialog(){}
+
+void Host_UpdateMainFrame()
+{
+ updateMainFrameEvent.Set();
+}
+
+void Host_UpdateBreakPointView(){}
+
+bool Host_GetKeyState(int keycode)
+{
+ return false;
+}
+
+void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
+{
+ x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
+ y = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowYPos;
+ width = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowWidth;
+ height = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight;
+}
+
+void Host_RequestRenderWindowSize(int width, int height) {}
+void Host_SetStartupDebuggingParameters()
+{
+ SCoreStartupParameter& StartUp = SConfig::GetInstance().m_LocalCoreStartupParameter;
+ StartUp.bEnableDebugging = false;
+ StartUp.bBootToPause = false;
+}
+
+bool Host_RendererHasFocus()
+{
+ return rendererHasFocus;
+}
+
+void Host_ConnectWiimote(int wm_idx, bool connect) {}
+
+void Host_SetWaitCursor(bool enable){}
+
+void Host_UpdateStatusBar(const char* _pText, int Filed){}
+
+void Host_SysMessage(const char *fmt, ...)
+{
+ va_list list;
+ char msg[512];
+
+ va_start(list, fmt);
+ vsprintf(msg, fmt, list);
+ va_end(list);
+
+ size_t len = strlen(msg);
+ if (msg[len - 1] != '\n') {
+ msg[len - 1] = '\n';
+ msg[len] = '\0';
+ }
+ fprintf(stderr, "%s", msg);
+}
+
+void Host_SetWiiMoteConnectionState(int _State) {}
+
+#if defined(HAVE_X11) && HAVE_X11
+void X11_MainLoop()
+{
+ bool fullscreen = SConfig::GetInstance().m_LocalCoreStartupParameter.bFullscreen;
+ while (Core::GetState() == Core::CORE_UNINITIALIZED)
+ updateMainFrameEvent.Wait();
+
+ Display *dpy = XOpenDisplay(0);
+ Window win = (Window)Core::GetWindowHandle();
+ XSelectInput(dpy, win, KeyPressMask | FocusChangeMask);
+
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bDisableScreenSaver)
+ X11Utils::InhibitScreensaver(dpy, win, true);
+
+#if defined(HAVE_XRANDR) && HAVE_XRANDR
+ X11Utils::XRRConfiguration *XRRConfig = new X11Utils::XRRConfiguration(dpy, win);
+#endif
+
+ Cursor blankCursor = None;
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
+ {
+ // make a blank cursor
+ Pixmap Blank;
+ XColor DummyColor;
+ char ZeroData[1] = {0};
+ Blank = XCreateBitmapFromData (dpy, win, ZeroData, 1, 1);
+ blankCursor = XCreatePixmapCursor(dpy, Blank, Blank, &DummyColor, &DummyColor, 0, 0);
+ XFreePixmap (dpy, Blank);
+ XDefineCursor(dpy, win, blankCursor);
+ }
+
+ if (fullscreen)
+ {
+ X11Utils::EWMH_Fullscreen(dpy, _NET_WM_STATE_TOGGLE);
+#if defined(HAVE_XRANDR) && HAVE_XRANDR
+ XRRConfig->ToggleDisplayMode(True);
+#endif
+ }
+
+ // The actual loop
+ while (running)
+ {
+ XEvent event;
+ KeySym key;
+ for (int num_events = XPending(dpy); num_events > 0; num_events--)
+ {
+ XNextEvent(dpy, &event);
+ switch(event.type)
+ {
+ case KeyPress:
+ key = XLookupKeysym((XKeyEvent*)&event, 0);
+ if (key == XK_Escape)
+ {
+ if (Core::GetState() == Core::CORE_RUN)
+ {
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
+ XUndefineCursor(dpy, win);
+ Core::SetState(Core::CORE_PAUSE);
+ }
+ else
+ {
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
+ XDefineCursor(dpy, win, blankCursor);
+ Core::SetState(Core::CORE_RUN);
+ }
+ }
+ else if ((key == XK_Return) && (event.xkey.state & Mod1Mask))
+ {
+ fullscreen = !fullscreen;
+ X11Utils::EWMH_Fullscreen(dpy, _NET_WM_STATE_TOGGLE);
+#if defined(HAVE_XRANDR) && HAVE_XRANDR
+ XRRConfig->ToggleDisplayMode(fullscreen);
+#endif
+ }
+ else if (key >= XK_F1 && key <= XK_F8)
+ {
+ int slot_number = key - XK_F1 + 1;
+ if (event.xkey.state & ShiftMask)
+ State::Save(slot_number);
+ else
+ State::Load(slot_number);
+ }
+ else if (key == XK_F9)
+ Core::SaveScreenShot();
+ else if (key == XK_F11)
+ State::LoadLastSaved();
+ else if (key == XK_F12)
+ {
+ if (event.xkey.state & ShiftMask)
+ State::UndoLoadState();
+ else
+ State::UndoSaveState();
+ }
+ break;
+ case FocusIn:
+ rendererHasFocus = true;
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor &&
+ Core::GetState() != Core::CORE_PAUSE)
+ XDefineCursor(dpy, win, blankCursor);
+ break;
+ case FocusOut:
+ rendererHasFocus = false;
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
+ XUndefineCursor(dpy, win);
+ break;
+ }
+ }
+ if (!fullscreen)
+ {
+ Window winDummy;
+ unsigned int borderDummy, depthDummy;
+ XGetGeometry(dpy, win, &winDummy,
+ &SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos,
+ &SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowYPos,
+ (unsigned int *)&SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowWidth,
+ (unsigned int *)&SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight,
+ &borderDummy, &depthDummy);
+ }
+ usleep(100000);
+ }
+
+#if defined(HAVE_XRANDR) && HAVE_XRANDR
+ delete XRRConfig;
+#endif
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bDisableScreenSaver)
+ X11Utils::InhibitScreensaver(dpy, win, false);
+
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
+ XFreeCursor(dpy, blankCursor);
+ XCloseDisplay(dpy);
+ Core::Stop();
+}
+#endif
+
+int main(int argc, char* argv[])
+{
+#ifdef __APPLE__
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSEvent *event = [[NSEvent alloc] init];
+ [NSApplication sharedApplication];
+ [NSApp activateIgnoringOtherApps: YES];
+ [NSApp finishLaunching];
+#endif
+ int ch, help = 0;
+ struct option longopts[] = {
+ { "exec", no_argument, NULL, 'e' },
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, 'v' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ while ((ch = getopt_long(argc, argv, "eh?v", longopts, 0)) != -1) {
+ switch (ch) {
+ case 'e':
+ break;
+ case 'h':
+ case '?':
+ help = 1;
+ break;
+ case 'v':
+ fprintf(stderr, "%s\n", scm_rev_str);
+ return 1;
+ }
+ }
+
+ if (help == 1 || argc == optind) {
+ fprintf(stderr, "%s\n\n", scm_rev_str);
+ fprintf(stderr, "A multi-platform Gamecube/Wii emulator\n\n");
+ fprintf(stderr, "Usage: %s [-e <file>] [-h] [-v]\n", argv[0]);
+ fprintf(stderr, " -e, --exec Load the specified file\n");
+ fprintf(stderr, " -h, --help Show this help message\n");
+ fprintf(stderr, " -v, --help Print version and exit\n");
+ return 1;
+ }
+
+ LogManager::Init();
+ SConfig::Init();
+ VideoBackend::PopulateList();
+ VideoBackend::ActivateBackend(SConfig::GetInstance().
+ m_LocalCoreStartupParameter.m_strVideoBackend);
+ WiimoteReal::LoadSettings();
+
+ // No use running the loop when booting fails
+ if (BootManager::BootCore(argv[optind]))
+ {
+#ifdef __APPLE__
+ while (running)
+ {
+ event = [NSApp nextEventMatchingMask: NSAnyEventMask
+ untilDate: [NSDate distantFuture]
+ inMode: NSDefaultRunLoopMode dequeue: YES];
+
+ if ([event type] == NSKeyDown &&
+ [event modifierFlags] & NSCommandKeyMask &&
+ [[event characters] UTF8String][0] == 'q')
+ {
+ Core::Stop();
+ break;
+ }
+
+ if ([event type] != NSKeyDown)
+ [NSApp sendEvent: event];
+ }
+
+ [event release];
+ [pool release];
+#elif defined HAVE_X11 && HAVE_X11
+ XInitThreads();
+ X11_MainLoop();
+#else
+ while (PowerPC::GetState() != PowerPC::CPU_POWERDOWN)
+ updateMainFrameEvent.Wait();
+#endif
+ }
+
+ WiimoteReal::Shutdown();
+ VideoBackend::ClearList();
+ SConfig::Shutdown();
+ LogManager::Shutdown();
+
+ return 0;
+}