ppsspp/base/QtMain.cpp

176 lines
4.1 KiB
C++
Raw Normal View History

/*
* Copyright (c) 2012 Sacha Refshauge
*
*/
2013-04-07 00:34:46 +10:00
// Qt 4.7 implementation of the framework.
// Currently supports: Symbian, Blackberry, Meego, Linux, Windows
2013-10-19 05:21:44 +10:00
#include <QApplication>
#include <QUrl>
2013-02-20 00:18:13 +10:00
#include <QDir>
#include <QDesktopWidget>
#include <QDesktopServices>
2013-10-19 05:21:44 +10:00
#include <QLocale>
#include <QThread>
#ifdef __SYMBIAN32__
#include <e32std.h>
2013-04-18 00:22:38 +10:00
#include <QSystemScreenSaver>
#include <hwrmvibra.h>
#endif
#include "QtMain.h"
2013-04-01 22:42:40 +10:00
InputState* input_state;
std::string System_GetProperty(SystemProperty prop) {
switch (prop) {
case SYSPROP_NAME:
#ifdef __SYMBIAN32__
return "Qt:Symbian";
#elif defined(BLACKBERRY)
return "Qt:Blackberry10";
#elif defined(MEEGO_EDITION_HARMATTAN)
return "Qt:Meego";
2013-10-20 05:03:31 +10:00
#elif defined(Q_OS_LINUX)
return "Qt:Linux";
#elif defined(_WIN32)
return "Qt:Windows";
#else
return "Qt";
#endif
case SYSPROP_LANGREGION:
return QLocale::system().name().toStdString();
default:
return "";
}
}
#ifdef __SYMBIAN32__
CHWRMVibra* vibra;
#endif
void Vibrate(int length_ms) {
if (length_ms == -1 || length_ms == -3)
length_ms = 50;
else if (length_ms == -2)
length_ms = 25;
// Qt 4.8 does not have any cross-platform Vibrate. Symbian-only for now.
#ifdef __SYMBIAN32__
CHWRMVibra::TVibraModeState iState = vibra->VibraSettings();
CHWRMVibra::TVibraStatus iStatus = vibra->VibraStatus();
// User has not enabled vibration in settings.
if(iState != CHWRMVibra::EVibraModeON)
return;
if(iStatus != CHWRMVibra::EVibraStatusStopped)
vibra->StopVibraL();
#endif
#ifdef __SYMBIAN32__
vibra->StartVibraL(length_ms, 20);
#endif
}
void LaunchBrowser(const char *url)
{
QDesktopServices::openUrl(QUrl(url));
}
void SimulateGamepad(InputState *input) {
input->pad_lstick_x = 0;
input->pad_lstick_y = 0;
input->pad_rstick_x = 0;
input->pad_rstick_y = 0;
if (input->pad_buttons & PAD_BUTTON_JOY_UP)
input->pad_lstick_y=1;
else if (input->pad_buttons & PAD_BUTTON_JOY_DOWN)
input->pad_lstick_y=-1;
if (input->pad_buttons & PAD_BUTTON_JOY_LEFT)
input->pad_lstick_x=-1;
else if (input->pad_buttons & PAD_BUTTON_JOY_RIGHT)
input->pad_lstick_x=1;
}
2012-12-13 17:05:12 +10:00
float CalculateDPIScale()
{
2013-04-07 00:34:46 +10:00
// Sane default rather than check DPI
2012-12-13 17:05:12 +10:00
#ifdef __SYMBIAN32__
return 1.4f;
2012-12-16 19:47:51 +10:00
#else
return 1.2f;
2012-12-13 17:05:12 +10:00
#endif
}
Q_DECL_EXPORT int main(int argc, char *argv[])
{
2013-10-20 05:03:31 +10:00
#ifdef Q_OS_LINUX
QApplication::setAttribute(Qt::AA_X11InitThreads, true);
#endif
QApplication a(argc, argv);
QSize res = QApplication::desktop()->screenGeometry().size();
if (res.width() < res.height())
res.transpose();
pixel_xres = res.width();
pixel_yres = res.height();
#ifdef ARM
2013-08-20 20:30:03 +10:00
g_dpi_scale = CalculateDPIScale();
#else
g_dpi_scale = 1.0f;
#endif
2013-08-20 20:30:03 +10:00
dp_xres = (int)(pixel_xres * g_dpi_scale); dp_yres = (int)(pixel_yres * g_dpi_scale);
2012-12-13 17:05:12 +10:00
net::Init();
#ifdef __SYMBIAN32__
2013-10-19 14:36:55 -07:00
const char *savegame_dir = "E:/PPSSPP/";
2013-10-19 22:36:04 -07:00
const char *assets_dir = "E:/PPSSPP/";
#elif defined(BLACKBERRY)
2013-10-19 14:36:55 -07:00
const char *savegame_dir = "/accounts/1000/shared/misc/";
const char *assets_dir = "app/native/assets/";
2013-04-12 02:50:14 +10:00
#elif defined(MEEGO_EDITION_HARMATTAN)
2013-10-19 14:36:55 -07:00
const char *savegame_dir = "/home/user/MyDocs/PPSSPP/";
QDir myDocs("/home/user/MyDocs/");
if (!myDocs.exists("PPSSPP"))
myDocs.mkdir("PPSSPP");
2013-10-19 14:36:55 -07:00
const char *assets_dir = "/opt/PPSSPP/";
#else
2013-10-19 14:36:55 -07:00
const char *savegame_dir = "./";
const char *assets_dir = "./";
#endif
2013-07-08 10:04:20 +10:00
NativeInit(argc, (const char **)argv, savegame_dir, assets_dir, "BADCOFFEE");
2013-10-20 05:03:31 +10:00
#if !defined(Q_OS_LINUX) || defined(ARM)
2013-08-20 20:30:03 +10:00
MainUI w;
w.resize(pixel_xres, pixel_yres);
#ifdef ARM
w.showFullScreen();
#else
w.show();
#endif
#endif
2013-04-21 16:36:05 +10:00
#ifdef __SYMBIAN32__
// Set RunFast hardware mode for VFPv2.
User::SetFloatingPointMode(EFpModeRunFast);
// Disable screensaver
QSystemScreenSaver *ssObject = new QSystemScreenSaver(&w);
ssObject->setScreenSaverInhibit();
// Start vibration service
vibra = CHWRMVibra::NewL();
2013-04-21 16:36:05 +10:00
#endif
2012-12-16 19:47:51 +10:00
QThread* thread = new QThread;
2012-12-16 19:47:51 +10:00
MainAudio *audio = new MainAudio();
audio->moveToThread(thread);
2013-10-26 19:51:29 +10:00
QObject::connect(thread, SIGNAL(started()), audio, SLOT(run()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
2012-12-16 19:47:51 +10:00
int ret = a.exec();
2012-12-16 19:47:51 +10:00
delete audio;
#ifdef __SYMBIAN32__
delete vibra;
#endif
2013-10-26 19:51:29 +10:00
thread->quit();
NativeShutdown();
net::Shutdown();
return ret;
}