2015-12-04 18:20:09 +01:00
|
|
|
/* ScummVM - Graphic Adventure Engine
|
|
|
|
*
|
|
|
|
* ScummVM is the legal property of its developers, whose names
|
|
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
|
|
* file distributed with this source distribution.
|
|
|
|
*
|
2021-12-26 18:47:58 +01:00
|
|
|
* This program 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 Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
2015-12-04 18:20:09 +01:00
|
|
|
*
|
|
|
|
* This program 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
|
2021-12-26 18:47:58 +01:00
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2015-12-04 18:20:09 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2016-01-07 12:30:19 +01:00
|
|
|
#ifndef BACKENDS_PLATFORM_IOS7_IOS7_OSYS_MAIN_H
|
|
|
|
#define BACKENDS_PLATFORM_IOS7_IOS7_OSYS_MAIN_H
|
2015-12-04 18:20:09 +01:00
|
|
|
|
|
|
|
#include "graphics/surface.h"
|
2016-01-07 12:40:55 +01:00
|
|
|
#include "backends/platform/ios7/ios7_common.h"
|
2020-09-04 13:28:52 +01:00
|
|
|
#include "backends/modular-backend.h"
|
2022-06-22 10:24:54 +02:00
|
|
|
#include "backends/keymapper/hardware-input.h"
|
2015-12-04 18:20:09 +01:00
|
|
|
#include "common/events.h"
|
2017-12-05 11:24:39 -06:00
|
|
|
#include "common/str.h"
|
2020-08-19 16:06:32 +05:30
|
|
|
#include "common/ustr.h"
|
2015-12-04 18:20:09 +01:00
|
|
|
#include "audio/mixer_intern.h"
|
|
|
|
#include "backends/fs/posix/posix-fs-factory.h"
|
|
|
|
#include "graphics/palette.h"
|
|
|
|
|
|
|
|
#include <AudioToolbox/AudioQueue.h>
|
|
|
|
|
|
|
|
#define AUDIO_BUFFERS 3
|
|
|
|
#define WAVE_BUFFER_SIZE 2048
|
|
|
|
#define AUDIO_SAMPLE_RATE 44100
|
2023-04-27 01:23:06 +01:00
|
|
|
#define MAX_IOS7_SCUMMVM_LOG_FILESIZE_IN_BYTES (100*1024)
|
2015-12-04 18:20:09 +01:00
|
|
|
|
|
|
|
typedef void (*SoundProc)(void *param, byte *buf, int len);
|
|
|
|
typedef int (*TimerProc)(int interval);
|
|
|
|
|
|
|
|
struct AQCallbackStruct {
|
|
|
|
AudioQueueRef queue;
|
|
|
|
uint32 frameCount;
|
|
|
|
AudioQueueBufferRef buffers[AUDIO_BUFFERS];
|
|
|
|
AudioStreamBasicDescription dataFormat;
|
|
|
|
};
|
|
|
|
|
2023-06-02 08:13:05 +02:00
|
|
|
class OSystem_iOS7 : public ModularGraphicsBackend, public EventsBaseBackend {
|
2015-12-04 18:20:09 +01:00
|
|
|
protected:
|
|
|
|
static AQCallbackStruct s_AudioQueue;
|
|
|
|
static SoundProc s_soundCallback;
|
|
|
|
static void *s_soundParam;
|
|
|
|
|
|
|
|
Audio::MixerImpl *_mixer;
|
|
|
|
|
2020-02-01 22:53:20 +00:00
|
|
|
CFTimeInterval _startTime;
|
2015-12-04 18:20:09 +01:00
|
|
|
uint32 _timeSuspended;
|
|
|
|
|
|
|
|
long _lastMouseDown;
|
|
|
|
long _lastMouseTap;
|
|
|
|
long _queuedEventTime;
|
|
|
|
Common::Event _queuedInputEvent;
|
|
|
|
bool _secondaryTapped;
|
|
|
|
long _lastSecondaryDown;
|
|
|
|
long _lastSecondaryTap;
|
|
|
|
bool _mouseClickAndDragEnabled;
|
|
|
|
bool _touchpadModeEnabled;
|
|
|
|
int _lastPadX;
|
|
|
|
int _lastPadY;
|
|
|
|
|
|
|
|
ScreenOrientation _screenOrientation;
|
|
|
|
|
2017-12-05 11:24:39 -06:00
|
|
|
Common::String _lastErrorMessage;
|
2015-12-11 14:24:29 +01:00
|
|
|
|
2016-02-26 09:50:39 +01:00
|
|
|
Common::String _chrootBasePath;
|
|
|
|
|
2015-12-04 18:20:09 +01:00
|
|
|
public:
|
|
|
|
|
2015-12-07 11:34:11 +01:00
|
|
|
OSystem_iOS7();
|
|
|
|
virtual ~OSystem_iOS7();
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2015-12-11 14:24:29 +01:00
|
|
|
static OSystem_iOS7 *sharedInstance();
|
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
void initBackend() override;
|
2018-05-22 16:03:56 +02:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
void engineInit() override;
|
|
|
|
void engineDone() override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2023-03-19 20:12:25 +00:00
|
|
|
void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &settings, Common::StringArray& additionalArgs) override;
|
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
bool hasFeature(Feature f) override;
|
|
|
|
void setFeatureState(Feature f, bool enable) override;
|
|
|
|
bool getFeatureState(Feature f) override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2021-04-15 21:20:04 +02:00
|
|
|
bool touchpadModeEnabled() const;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2023-05-31 08:02:38 +02:00
|
|
|
uint createOpenGLContext();
|
|
|
|
void destroyOpenGLContext();
|
|
|
|
void refreshScreen() const;
|
|
|
|
int getScreenWidth() const;
|
|
|
|
int getScreenHeight() const;
|
|
|
|
float getSystemHiDPIScreenFactor() const;
|
|
|
|
|
2022-04-25 15:36:50 +02:00
|
|
|
#if defined(USE_OPENGL) && defined(USE_GLAD)
|
|
|
|
void *getOpenGLProcAddress(const char *name) const override;
|
|
|
|
#endif
|
2015-12-04 18:20:09 +01:00
|
|
|
|
|
|
|
public:
|
2021-11-13 23:18:12 +02:00
|
|
|
bool pollEvent(Common::Event &event) override;
|
|
|
|
uint32 getMillis(bool skipRecord = false) override;
|
|
|
|
void delayMillis(uint msecs) override;
|
|
|
|
Common::MutexInternal *createMutex() override;
|
2020-10-11 02:24:31 +01:00
|
|
|
|
2015-12-04 18:20:09 +01:00
|
|
|
static void mixCallback(void *sys, byte *samples, int len);
|
|
|
|
virtual void setupMixer(void);
|
|
|
|
virtual void setTimerCallback(TimerProc callback, int interval);
|
2021-11-13 23:18:12 +02:00
|
|
|
void quit() override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0) override;
|
|
|
|
void getTimeAndDate(TimeDate &td, bool skipRecord = false) const override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2022-06-22 10:24:54 +02:00
|
|
|
Common::HardwareInputSet *getHardwareInputSet() override;
|
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
Audio::Mixer *getMixer() override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
|
|
|
void startSoundsystem();
|
|
|
|
void stopSoundsystem();
|
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
Common::String getDefaultConfigFileName() override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
void logMessage(LogMessageType::Type type, const char *message) override;
|
|
|
|
void fatalError() override;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
bool hasTextInClipboard() override;
|
|
|
|
Common::U32String getTextFromClipboard() override;
|
|
|
|
bool setTextInClipboard(const Common::U32String &text) override;
|
2019-08-04 16:00:19 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
bool openUrl(const Common::String &url) override;
|
2019-08-04 16:14:46 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
Common::String getSystemLanguage() const override;
|
2019-08-04 16:55:46 +01:00
|
|
|
|
2021-11-13 23:18:12 +02:00
|
|
|
bool isConnectionLimited() override;
|
2023-03-14 11:39:24 +01:00
|
|
|
void virtualController(bool connect);
|
2019-08-04 17:41:53 +01:00
|
|
|
|
2023-04-27 00:12:05 +01:00
|
|
|
virtual Common::String getDefaultLogFileName() override { return Common::String("/scummvm.log"); }
|
2023-03-27 00:19:19 +02:00
|
|
|
|
2023-05-02 13:46:49 +02:00
|
|
|
virtual GUI::OptionsContainerWidget* buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const override;
|
|
|
|
virtual void applyBackendSettings() override;
|
|
|
|
virtual void registerDefaultSettings(const Common::String &target) const override;
|
|
|
|
|
2015-12-04 18:20:09 +01:00
|
|
|
protected:
|
|
|
|
void updateOutputSurface();
|
2019-02-12 23:48:14 +00:00
|
|
|
void setShowKeyboard(bool);
|
|
|
|
bool isKeyboardShown() const;
|
2015-12-04 18:20:09 +01:00
|
|
|
|
|
|
|
void suspendLoop();
|
2020-09-06 06:13:58 +01:00
|
|
|
void saveState();
|
|
|
|
void restoreState();
|
2020-09-12 19:14:49 +01:00
|
|
|
void clearState();
|
2015-12-04 18:20:09 +01:00
|
|
|
static void AQBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB);
|
|
|
|
static int timerHandler(int t);
|
|
|
|
|
|
|
|
bool handleEvent_swipe(Common::Event &event, int direction, int touches);
|
|
|
|
bool handleEvent_tap(Common::Event &event, UIViewTapDescription type, int touches);
|
|
|
|
void handleEvent_keyPressed(Common::Event &event, int keyPressed);
|
|
|
|
void handleEvent_orientationChanged(int orientation);
|
2015-12-07 14:12:16 +01:00
|
|
|
void handleEvent_applicationSuspended();
|
|
|
|
void handleEvent_applicationResumed();
|
2020-09-12 19:14:49 +01:00
|
|
|
void handleEvent_applicationSaveState();
|
|
|
|
void handleEvent_applicationRestoreState();
|
|
|
|
void handleEvent_applicationClearState();
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2023-01-23 11:08:38 +01:00
|
|
|
bool handleEvent_touchFirstDown(Common::Event &event, int x, int y);
|
|
|
|
bool handleEvent_touchFirstUp(Common::Event &event, int x, int y);
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2023-01-23 11:08:38 +01:00
|
|
|
bool handleEvent_touchSecondDown(Common::Event &event, int x, int y);
|
|
|
|
bool handleEvent_touchSecondUp(Common::Event &event, int x, int y);
|
2015-12-04 18:20:09 +01:00
|
|
|
|
2023-01-23 11:08:38 +01:00
|
|
|
bool handleEvent_touchFirstDragged(Common::Event &event, int x, int y);
|
|
|
|
bool handleEvent_touchSecondDragged(Common::Event &event, int x, int y);
|
2015-12-07 14:12:16 +01:00
|
|
|
|
2023-01-24 14:07:12 +01:00
|
|
|
void handleEvent_mouseLeftButtonDown(Common::Event &event, int x, int y);
|
|
|
|
void handleEvent_mouseLeftButtonUp(Common::Event &event, int x, int y);
|
|
|
|
void handleEvent_mouseRightButtonDown(Common::Event &event, int x, int y);
|
|
|
|
void handleEvent_mouseRightButtonUp(Common::Event &event, int x, int y);
|
|
|
|
void handleEvent_mouseDelta(Common::Event &event, int deltaX, int deltaY);
|
2023-06-02 14:31:02 +02:00
|
|
|
void handleEvent_mouseEvent(Common::Event &event, int relX, int relY);
|
2023-01-24 14:07:12 +01:00
|
|
|
|
2015-12-07 14:12:16 +01:00
|
|
|
void rebuildSurface();
|
2023-03-12 08:21:04 +01:00
|
|
|
float getMouseSpeed();
|
2015-12-04 18:20:09 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|