diff options
Diffstat (limited to 'backends')
60 files changed, 1519 insertions, 1310 deletions
| diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 38a0c8d46f..bf76bbc1cb 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -84,7 +84,8 @@ void DefaultEventManager::init() {  }  bool DefaultEventManager::pollEvent(Common::Event &event) { -	uint32 time = g_system->getMillis(); +	// Skip recording of these events +	uint32 time = g_system->getMillis(true);  	bool result = false;  	_dispatcher.dispatch(); diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 0ca5bbb059..e2ef7f6bf6 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -106,7 +106,9 @@ void SdlEventSource::processMouseEvent(Common::Event &event, int x, int y) {  }  void SdlEventSource::handleKbdMouse() { -	uint32 curTime = g_system->getMillis(); +	// Skip recording of these events +	uint32 curTime = g_system->getMillis(true); +  	if (curTime >= _km.last_time + _km.delay_time) {  		_km.last_time = curTime;  		if (_km.x_down_count == 1) { diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h index 8ff9838ff7..6ef80923ae 100644 --- a/backends/graphics/opengl/gltexture.h +++ b/backends/graphics/opengl/gltexture.h @@ -44,9 +44,9 @@  #define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0])))  #endif -#if defined(BADA) +#if defined(TIZEN)  #include <FGraphicsOpengl.h> -using namespace Osp::Graphics::Opengl; +using namespace Tizen::Graphics::Opengl;  #elif defined(USE_GLES)  #include <GLES/gl.h>  #elif defined(SDL_BACKEND) diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 02e58ab319..a2e1981e79 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -40,6 +40,7 @@  #include "graphics/scaler.h"  #include "graphics/scaler/aspect.h"  #include "graphics/surface.h" +#include "gui/EventRecorder.h"  static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {  	{"1x", _s("Normal (no scaling)"), GFX_NORMAL}, @@ -135,6 +136,7 @@ SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSou  	_paletteDirtyStart(0), _paletteDirtyEnd(0),  	_screenIsLocked(false),  	_graphicsMutex(0), +	_displayDisabled(false),  #ifdef USE_SDL_DEBUG_FOCUSRECT  	_enableFocusRectDebugCode(false), _enableFocusRect(false), _focusRect(),  #endif @@ -765,9 +767,20 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() {  		fixupResolutionForAspectRatio(_videoMode.desiredAspectRatio, _videoMode.hardwareWidth, _videoMode.hardwareHeight);  	} -	_hwscreen = SDL_SetVideoMode(_videoMode.hardwareWidth, _videoMode.hardwareHeight, 16, -		_videoMode.fullscreen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE -	); + +#ifdef ENABLE_EVENTRECORDER +	_displayDisabled = ConfMan.getBool("disable_display"); + +	if (_displayDisabled) { +		_hwscreen = g_eventRec.getSurface(_videoMode.hardwareWidth, _videoMode.hardwareHeight); +	} else +#endif +		{ +		_hwscreen = SDL_SetVideoMode(_videoMode.hardwareWidth, _videoMode.hardwareHeight, 16, +			_videoMode.fullscreen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE +			); +	} +  #ifdef USE_RGB_COLOR  	detectSupportedFormats();  #endif @@ -1188,7 +1201,9 @@ void SurfaceSdlGraphicsManager::internUpdateScreen() {  #endif  		// Finally, blit all our changes to the screen -		SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList); +		if (!_displayDisabled) { +			SDL_UpdateRects(_hwscreen, _numDirtyRects, _dirtyRectList); +		}  	}  	_numDirtyRects = 0; diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index 21444cc25d..97de0f9c97 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -232,6 +232,9 @@ protected:  	int _scalerType;  	int _transactionMode; +	// Indicates whether it is needed to free _hwsurface in destructor +	bool _displayDisabled; +  	bool _screenIsLocked;  	Graphics::Surface _framebuffer; diff --git a/backends/mixer/nullmixer/nullsdl-mixer.cpp b/backends/mixer/nullmixer/nullsdl-mixer.cpp new file mode 100644 index 0000000000..2fd652e19f --- /dev/null +++ b/backends/mixer/nullmixer/nullsdl-mixer.cpp @@ -0,0 +1,75 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "backends/mixer/nullmixer/nullsdl-mixer.h" +#include "common/savefile.h" + +NullSdlMixerManager::NullSdlMixerManager() : SdlMixerManager() { +	_outputRate = 22050; +	_callsCounter = 0; +	_callbackPeriod = 10; +	_samples = 8192; +	while (_samples * 16 > _outputRate * 2) +		_samples >>= 1; +	_samplesBuf = new uint8[_samples * 4]; +} + +NullSdlMixerManager::~NullSdlMixerManager() { +	delete _samplesBuf; +} + +void NullSdlMixerManager::init() { +	_mixer = new Audio::MixerImpl(g_system, _outputRate); +	assert(_mixer); +	_mixer->setReady(true); +} + +void NullSdlMixerManager::suspendAudio() { +	_audioSuspended = true; +} + +int NullSdlMixerManager::resumeAudio() { +	if (!_audioSuspended) { +		return -2; +	} +	_audioSuspended = false; +	return 0; +} + + +void NullSdlMixerManager::startAudio() { +} + +void NullSdlMixerManager::callbackHandler(byte *samples, int len) { +	assert(_mixer); +	_mixer->mixCallback(samples, len); +} + +void NullSdlMixerManager::update() { +	if (_audioSuspended) { +		return; +	} +	_callsCounter++; +	if ((_callsCounter % _callbackPeriod) == 0) { +		callbackHandler(_samplesBuf, _samples); +	} +} diff --git a/backends/mixer/nullmixer/nullsdl-mixer.h b/backends/mixer/nullmixer/nullsdl-mixer.h new file mode 100644 index 0000000000..94248ced66 --- /dev/null +++ b/backends/mixer/nullmixer/nullsdl-mixer.h @@ -0,0 +1,62 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKENDS_MIXER_NULLSDL_H +#define BACKENDS_MIXER_NULLSDL_H + +#include "backends/mixer/sdl/sdl-mixer.h" +#include "common/str.h" + +/** Audio mixer which in fact does not output audio. + * + *  It is used by events recorder since the recorder is intentionally + *  turning sound off to avoid stuttering. + * + *  It returns correct output and shoots callbacks, so all OSystem + *  users could work without modifications. + */ + +class NullSdlMixerManager :	public SdlMixerManager { +public: +	NullSdlMixerManager(); +	virtual ~NullSdlMixerManager(); + +	virtual void init(); +	void update(); + +	virtual void suspendAudio(); +	virtual int resumeAudio(); + +protected: + +	virtual void startAudio(); +	virtual void callbackHandler(byte *samples, int len); + +private: +	uint32 _outputRate; +	uint32 _callsCounter; +	uint8  _callbackPeriod; +	uint32 _samples; +	uint8 *_samplesBuf; +}; + +#endif diff --git a/backends/modular-backend.cpp b/backends/modular-backend.cpp index b46f33a2bc..6afe06aeca 100644 --- a/backends/modular-backend.cpp +++ b/backends/modular-backend.cpp @@ -26,6 +26,7 @@  #include "backends/graphics/graphics.h"  #include "backends/mutex/mutex.h" +#include "gui/EventRecorder.h"  #include "audio/mixer.h"  #include "graphics/pixelformat.h" @@ -52,7 +53,7 @@ bool ModularBackend::hasFeature(Feature f) {  }  void ModularBackend::setFeatureState(Feature f, bool enable) { -	return _graphicsManager->setFeatureState(f, enable); +	_graphicsManager->setFeatureState(f, enable);  }  bool ModularBackend::getFeatureState(Feature f) { @@ -141,7 +142,15 @@ void ModularBackend::fillScreen(uint32 col) {  }  void ModularBackend::updateScreen() { +#ifdef ENABLE_EVENTRECORDER +	g_eventRec.preDrawOverlayGui(); +#endif +  	_graphicsManager->updateScreen(); + +#ifdef ENABLE_EVENTRECORDER +	g_eventRec.postDrawOverlayGui(); +#endif  }  void ModularBackend::setShakePos(int shakeOffset) { diff --git a/backends/module.mk b/backends/module.mk index a4f525d21d..31ac444750 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -70,7 +70,7 @@ MODULE_OBJS += \  	mutex/sdl/sdl-mutex.o \  	plugins/sdl/sdl-provider.o \  	timer/sdl/sdl-timer.o -	 +  # SDL 1.3 removed audio CD support  ifndef USE_SDL13  MODULE_OBJS += \ @@ -120,9 +120,9 @@ MODULE_OBJS += \  	mixer/sdl13/sdl13-mixer.o  endif -ifeq ($(BACKEND),bada) +ifeq ($(BACKEND),tizen)  MODULE_OBJS += \ -	timer/bada/timer.o +	timer/tizen/timer.o  endif  ifeq ($(BACKEND),ds) @@ -214,5 +214,11 @@ MODULE_OBJS += \  	plugins/wii/wii-provider.o  endif +ifdef ENABLE_EVENTRECORDER +MODULE_OBJS += \ +	mixer/nullmixer/nullsdl-mixer.o \ +	saves/recorder/recorder-saves.o +endif +  # Include common rules  include $(srcdir)/rules.mk diff --git a/backends/mutex/sdl/sdl-mutex.cpp b/backends/mutex/sdl/sdl-mutex.cpp index 8491ae468c..a51e6f0e38 100644 --- a/backends/mutex/sdl/sdl-mutex.cpp +++ b/backends/mutex/sdl/sdl-mutex.cpp @@ -33,15 +33,15 @@ OSystem::MutexRef SdlMutexManager::createMutex() {  }  void SdlMutexManager::lockMutex(OSystem::MutexRef mutex) { -	SDL_mutexP((SDL_mutex *) mutex); +	SDL_mutexP((SDL_mutex *)mutex);  }  void SdlMutexManager::unlockMutex(OSystem::MutexRef mutex) { -	SDL_mutexV((SDL_mutex *) mutex); +	SDL_mutexV((SDL_mutex *)mutex);  }  void SdlMutexManager::deleteMutex(OSystem::MutexRef mutex) { -	SDL_DestroyMutex((SDL_mutex *) mutex); +	SDL_DestroyMutex((SDL_mutex *)mutex);  }  #endif diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index f06e4be19e..ad80ea7f8c 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -450,7 +450,7 @@ bool OSystem_Android::getFeatureState(Feature f) {  	}  } -uint32 OSystem_Android::getMillis() { +uint32 OSystem_Android::getMillis(bool skipRecord) {  	timeval curTime;  	gettimeofday(&curTime, 0); diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index 5f2f40b726..b4813b3bdf 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -274,7 +274,7 @@ public:  	virtual void setCursorPalette(const byte *colors, uint start, uint num);  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual MutexRef createMutex(void); diff --git a/backends/platform/bada/bada.mk b/backends/platform/bada/bada.mk deleted file mode 100644 index 7c72d7752b..0000000000 --- a/backends/platform/bada/bada.mk +++ /dev/null @@ -1,5 +0,0 @@ -# Bada specific modules are built under eclipse - -$(EXECUTABLE): $(OBJS) -	rm -f $@ -	ar Tru $@ $(OBJS) diff --git a/backends/platform/bada/form.cpp b/backends/platform/bada/form.cpp deleted file mode 100644 index dfa72bce08..0000000000 --- a/backends/platform/bada/form.cpp +++ /dev/null @@ -1,464 +0,0 @@ -/* 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. - * - * 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 2 - * of the License, or (at your option) any later version. - * - * 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 - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include <FAppApplication.h> - -#include "common/translation.h" -#include "base/main.h" - -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/system.h" - -using namespace Osp::Base::Runtime; -using namespace Osp::Ui; -using namespace Osp::Ui::Controls; - -// number of volume levels -#define LEVEL_RANGE 5 - -// round down small Y touch values to 1 to allow the -// cursor to be positioned at the top of the screen -#define MIN_TOUCH_Y 10 - -// block for up to 2.5 seconds during shutdown to -// allow the game thread to exit gracefully. -#define EXIT_SLEEP_STEP 10 -#define EXIT_SLEEP 250 - -// -// BadaAppForm -// -BadaAppForm::BadaAppForm() : -	_gameThread(0), -	_state(kInitState), -	_buttonState(kLeftButton), -	_shortcut(kSetVolume) { -	_eventQueueLock = new Mutex(); -	_eventQueueLock->Create(); -} - -result BadaAppForm::Construct() { -	result r = Form::Construct(Controls::FORM_STYLE_NORMAL); -	if (IsFailed(r)) { -		return r; -	} - -	BadaSystem *badaSystem = NULL; -	_gameThread = NULL; - -	badaSystem = new BadaSystem(this); -	r = badaSystem != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; - -	if (!IsFailed(r)) { -		r = badaSystem->Construct(); -	} - -	if (!IsFailed(r)) { -		_gameThread = new Thread(); -		r = _gameThread != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; -	} - -	if (!IsFailed(r)) { -		r = _gameThread->Construct(*this); -	} - -	if (IsFailed(r)) { -		if (badaSystem != NULL) { -			delete badaSystem; -		} -		if (_gameThread != NULL) { -			delete _gameThread; -			_gameThread = NULL; -		} -	} else { -		g_system = badaSystem; -	} - -	return r; -} - -BadaAppForm::~BadaAppForm() { -	logEntered(); - -	if (_gameThread && _state != kErrorState) { -		terminate(); - -		_gameThread->Stop(); -		if (_state != kErrorState) { -			_gameThread->Join(); -		} - -		delete _gameThread; -		_gameThread = NULL; -	} - -	if (_eventQueueLock) { -		delete _eventQueueLock; -		_eventQueueLock = NULL; -	} - -	logLeaving(); -} - -// -// abort the game thread -// -void BadaAppForm::terminate() { -	if (_state == kActiveState) { -		((BadaSystem *)g_system)->setMute(true); - -		_eventQueueLock->Acquire(); - -		Common::Event e; -		e.type = Common::EVENT_QUIT; -		_eventQueue.push(e); -		_state = kClosingState; - -		_eventQueueLock->Release(); - -		// block while thread ends -		AppLog("waiting for shutdown"); -		for (int i = 0; i < EXIT_SLEEP_STEP && _state == kClosingState; i++) { -			Thread::Sleep(EXIT_SLEEP); -		} - -		if (_state == kClosingState) { -			// failed to terminate - Join() will freeze -			_state = kErrorState; -		} -	} -} - -void BadaAppForm::exitSystem() { -	_state = kErrorState; - -	if (_gameThread) { -		_gameThread->Stop(); -		delete _gameThread; -		_gameThread = NULL; -	} -} - -result BadaAppForm::OnInitializing(void) { -	logEntered(); - -	SetOrientation(ORIENTATION_LANDSCAPE); -	AddOrientationEventListener(*this); -	AddTouchEventListener(*this); -	AddKeyEventListener(*this); - -	// set focus to enable receiving key events -	SetFocusable(true); -	SetFocus(); - -	return E_SUCCESS; -} - -result BadaAppForm::OnDraw(void) { -	logEntered(); - -	if (g_system) { -		BadaSystem *system = (BadaSystem *)g_system; -		BadaGraphicsManager *graphics = system->getGraphics(); -		if (graphics && graphics->isReady()) { -			g_system->updateScreen(); -		} -	} - -	return E_SUCCESS; -} - -bool BadaAppForm::pollEvent(Common::Event &event) { -	bool result = false; - -	_eventQueueLock->Acquire(); -	if (!_eventQueue.empty()) { -		event = _eventQueue.pop(); -		result = true; -	} -	_eventQueueLock->Release(); - -	return result; -} - -void BadaAppForm::pushEvent(Common::EventType type, const Point ¤tPosition) { -	BadaSystem *system = (BadaSystem *)g_system; -	BadaGraphicsManager *graphics = system->getGraphics(); -	if (graphics) { -		// graphics could be NULL at startup or when -		// displaying the system error screen -		Common::Event e; -		e.type = type; -		e.mouse.x = currentPosition.x; -		e.mouse.y = currentPosition.y > MIN_TOUCH_Y ? currentPosition.y : 1; - -		bool moved = graphics->moveMouse(e.mouse.x, e.mouse.y); - -		_eventQueueLock->Acquire(); - -		if (moved && type != Common::EVENT_MOUSEMOVE) { -			Common::Event moveEvent; -			moveEvent.type = Common::EVENT_MOUSEMOVE; -			moveEvent.mouse = e.mouse; -			_eventQueue.push(moveEvent); -		} - -		_eventQueue.push(e); -		_eventQueueLock->Release(); -	} -} - -void BadaAppForm::pushKey(Common::KeyCode keycode) { -	Common::Event e; -	e.synthetic = false; -	e.kbd.keycode = keycode; -	e.kbd.ascii = keycode; -	e.kbd.flags = 0; - -	_eventQueueLock->Acquire(); - -	e.type = Common::EVENT_KEYDOWN; -	_eventQueue.push(e); -	e.type = Common::EVENT_KEYUP; -	_eventQueue.push(e); - -	_eventQueueLock->Release(); -} - -void BadaAppForm::OnOrientationChanged(const Control &source, -																			 OrientationStatus orientationStatus) { -	logEntered(); -	if (_state == kInitState) { -		_state = kActiveState; -		_gameThread->Start(); -	} -} - -Object *BadaAppForm::Run(void) { -	scummvm_main(0, 0); - -	if (_state == kActiveState) { -		Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL); -	} -	_state = kDoneState; -	return NULL; -} - -void BadaAppForm::setButtonShortcut() { -	switch (_buttonState) { -	case kLeftButton: -		g_system->displayMessageOnOSD(_("Right Click Once")); -		_buttonState = kRightButtonOnce; -		break; -	case kRightButtonOnce: -		g_system->displayMessageOnOSD(_("Right Click")); -		_buttonState = kRightButton; -		break; -	case kRightButton: -		g_system->displayMessageOnOSD(_("Move Only")); -		_buttonState = kMoveOnly; -		break; -	case kMoveOnly: -		g_system->displayMessageOnOSD(_("Left Click")); -		_buttonState = kLeftButton; -		break; -	} -} - -void BadaAppForm::setShortcut() { -	// cycle to the next shortcut -	switch (_shortcut) { -	case kControlMouse: -		g_system->displayMessageOnOSD(_("Escape Key")); -		_shortcut = kEscapeKey; -		break; - -	case kEscapeKey: -		g_system->displayMessageOnOSD(_("Game Menu")); -		_shortcut = kGameMenu; -		break; - -	case kGameMenu: -		g_system->displayMessageOnOSD(_("Show Keypad")); -		_shortcut = kShowKeypad; -		break; - -	case kSetVolume: -		// fallthru - -	case kShowKeypad: -		g_system->displayMessageOnOSD(_("Control Mouse")); -		_shortcut = kControlMouse; -		break; -	} -} - -void BadaAppForm::setVolume(bool up, bool minMax) { -	int level = ((BadaSystem *)g_system)->setVolume(up, minMax); -	if (level != -1) { -		char message[32]; -		char ind[LEVEL_RANGE]; // 1..5 (0=off) -		int j = LEVEL_RANGE - 1; // 0..4 -		for (int i = 1; i <= LEVEL_RANGE; i++) { -			ind[j--] = level >= i ? '|' : ' '; -		} -		snprintf(message, sizeof(message), "Volume: [ %c%c%c%c%c ]", -						 ind[0], ind[1], ind[2], ind[3], ind[4]); -		g_system->displayMessageOnOSD(message); -	} -} - -void BadaAppForm::showKeypad() { -	// display the soft keyboard -	_buttonState = kLeftButton; -	pushKey(Common::KEYCODE_F7); -} - -void BadaAppForm::OnTouchDoublePressed(const Control &source, -																			 const Point ¤tPosition, -																			 const TouchEventInfo &touchInfo) { -	if (_buttonState != kMoveOnly) { -		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, -							currentPosition); -		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, -							currentPosition); -	} -} - -void BadaAppForm::OnTouchFocusIn(const Control &source, -																 const Point ¤tPosition, -																 const TouchEventInfo &touchInfo) { -} - -void BadaAppForm::OnTouchFocusOut(const Control &source, -																	const Point ¤tPosition, -																	const TouchEventInfo &touchInfo) { -} - -void BadaAppForm::OnTouchLongPressed(const Control &source, -																		 const Point ¤tPosition, -																		 const TouchEventInfo &touchInfo) { -	if (_buttonState != kLeftButton) { -		pushKey(Common::KEYCODE_RETURN); -	} -} - -void BadaAppForm::OnTouchMoved(const Control &source, -															 const Point ¤tPosition, -															 const TouchEventInfo &touchInfo) { -	pushEvent(Common::EVENT_MOUSEMOVE, currentPosition); -} - -void BadaAppForm::OnTouchPressed(const Control &source, -																 const Point ¤tPosition, -																 const TouchEventInfo &touchInfo) { -	if (_buttonState != kMoveOnly) { -		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, -							currentPosition); -	} -} - -void BadaAppForm::OnTouchReleased(const Control &source, -																	const Point ¤tPosition, -																	const TouchEventInfo &touchInfo) { -	if (_buttonState != kMoveOnly) { -		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP, -							currentPosition); -		if (_buttonState == kRightButtonOnce) { -			_buttonState = kLeftButton; -		} -		// flick to skip dialog -		if (touchInfo.IsFlicked()) { -			pushKey(Common::KEYCODE_PERIOD); -		} -	} -} - -void BadaAppForm::OnKeyLongPressed(const Control &source, KeyCode keyCode) { -	logEntered(); -	switch (keyCode) { -	case KEY_SIDE_UP: -		_shortcut = kSetVolume; -		setVolume(true, true); -		return; - -	case KEY_SIDE_DOWN: -		_shortcut = kSetVolume; -		setVolume(false, true); -		return; - -	case KEY_CAMERA: -		_shortcut = kShowKeypad; -		showKeypad(); -		return; - -	default: -		break; -	} -} - -void BadaAppForm::OnKeyPressed(const Control &source, KeyCode keyCode) { -	switch (keyCode) { -	case KEY_SIDE_UP: -		if (_shortcut != kSetVolume) { -			_shortcut = kSetVolume; -		} else { -			setVolume(true, false); -		} -		return; - -	case KEY_SIDE_DOWN: -		switch (_shortcut) { -		case kControlMouse: -			setButtonShortcut(); -			break; - -		case kEscapeKey: -			pushKey(Common::KEYCODE_ESCAPE); -			break; - -		case kGameMenu: -			_buttonState = kLeftButton; -			pushKey(Common::KEYCODE_F5); -			break; - -		case kShowKeypad: -			showKeypad(); -			break; - -		default: -			setVolume(false, false); -			break; -		} -		break; - -	case KEY_CAMERA: -		setShortcut(); -		break; - -	default: -		break; -	} -} - -void BadaAppForm::OnKeyReleased(const Control &source, KeyCode keyCode) { -} diff --git a/backends/platform/bada/form.h b/backends/platform/bada/form.h deleted file mode 100644 index 3340e2216b..0000000000 --- a/backends/platform/bada/form.h +++ /dev/null @@ -1,108 +0,0 @@ -/* 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. - * - * 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 2 - * of the License, or (at your option) any later version. - * - * 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 - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef BADA_FORM_H -#define BADA_FORM_H - -#include <FApp.h> -#include <FUi.h> -#include <FSystem.h> -#include <FBase.h> -#include <FUiITouchEventListener.h> -#include <FUiITextEventListener.h> - -#include "config.h" -#include "common/scummsys.h" -#include "common/events.h" -#include "common/queue.h" -#include "common/mutex.h" - -// -// BadaAppForm -// -class BadaAppForm : public Osp::Ui::Controls::Form, -										public Osp::Ui::IOrientationEventListener, -										public Osp::Ui::ITouchEventListener, -										public Osp::Ui::IKeyEventListener, -										public Osp::Base::Runtime::IRunnable { -public: -	BadaAppForm(); -	~BadaAppForm(); - -	result Construct(); -	bool pollEvent(Common::Event &event); -	bool isClosing() { return _state == kClosingState; } -	void pushKey(Common::KeyCode keycode); -	void exitSystem(); - -private: -	Object *Run(); -	result OnInitializing(void); -	result OnDraw(void); -	void OnOrientationChanged(const Osp::Ui::Control &source, -														Osp::Ui::OrientationStatus orientationStatus); -	void OnTouchDoublePressed(const Osp::Ui::Control &source, -														const Osp::Graphics::Point ¤tPosition, -														const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchFocusIn(const Osp::Ui::Control &source, -											const Osp::Graphics::Point ¤tPosition, -											const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchFocusOut(const Osp::Ui::Control &source, -											 const Osp::Graphics::Point ¤tPosition, -											 const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchLongPressed(const Osp::Ui::Control &source, -													const Osp::Graphics::Point ¤tPosition, -													const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchMoved(const Osp::Ui::Control &source, -										const Osp::Graphics::Point ¤tPosition, -										const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchPressed(const Osp::Ui::Control &source, -											const Osp::Graphics::Point ¤tPosition, -											const Osp::Ui::TouchEventInfo &touchInfo); -	void OnTouchReleased(const Osp::Ui::Control &source, -											 const Osp::Graphics::Point ¤tPosition, -											 const Osp::Ui::TouchEventInfo &touchInfo); -	void OnKeyLongPressed(const Osp::Ui::Control &source, -												Osp::Ui::KeyCode keyCode); -	void OnKeyPressed(const Osp::Ui::Control &source, -										Osp::Ui::KeyCode keyCode); -	void OnKeyReleased(const Osp::Ui::Control &source, -										 Osp::Ui::KeyCode keyCode); - -	void pushEvent(Common::EventType type, -								 const Osp::Graphics::Point ¤tPosition); -	void terminate(); -	void setButtonShortcut(); -	void setShortcut(); -	void setVolume(bool up, bool minMax); -	void showKeypad(); - -	// event handling -	Osp::Base::Runtime::Thread *_gameThread; -	Osp::Base::Runtime::Mutex *_eventQueueLock; -	Common::Queue<Common::Event> _eventQueue; -	enum { kInitState, kActiveState, kClosingState, kDoneState, kErrorState } _state; -	enum { kLeftButton, kRightButtonOnce, kRightButton, kMoveOnly } _buttonState; -	enum { kControlMouse, kEscapeKey, kGameMenu, kShowKeypad, kSetVolume } _shortcut; -}; - -#endif diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h index d41839d961..d62ced02e1 100644 --- a/backends/platform/dc/dc.h +++ b/backends/platform/dc/dc.h @@ -151,7 +151,7 @@ public:    void setShakePos(int shake_pos);    // Get the number of milliseconds since the program was started. -  uint32 getMillis(); +  uint32 getMillis(bool skipRecord = false);    // Delay for a specified amount of milliseconds    void delayMillis(uint msecs); diff --git a/backends/platform/dc/time.cpp b/backends/platform/dc/time.cpp index 8cc3a71e8d..1e5f44ec85 100644 --- a/backends/platform/dc/time.cpp +++ b/backends/platform/dc/time.cpp @@ -26,7 +26,7 @@  #include "dc.h" -uint32 OSystem_Dreamcast::getMillis() +uint32 OSystem_Dreamcast::getMillis(bool skipRecord)  {    static uint32 msecs=0;    static unsigned int t0=0; diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 830c782b90..9dc66e80d7 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -2280,7 +2280,7 @@ void VBlankHandler(void) {  	//REG_IF = IRQ_VBLANK;  } -int getMillis() { +int getMillis(bool skipRecord) {  	return currentTimeMillis;  //	return frameCount * FRAME_TIME;  } diff --git a/backends/platform/ds/arm9/source/dsmain.h b/backends/platform/ds/arm9/source/dsmain.h index ad49ae276d..5e91fae13a 100644 --- a/backends/platform/ds/arm9/source/dsmain.h +++ b/backends/platform/ds/arm9/source/dsmain.h @@ -88,7 +88,7 @@ void	setGamma(int gamma);  // Timers  void 	setTimerCallback(OSystem_DS::TimerProc proc, int interval);		// Setup a callback function at a regular interval -int 	getMillis();													// Return the current runtime in milliseconds +int 	getMillis(bool skipRecord = false);								// Return the current runtime in milliseconds  void 	doTimerCallback();												// Call callback function if required  // Sound diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp index a4b9c842fc..2f6358d8ee 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.cpp +++ b/backends/platform/ds/arm9/source/osystem_ds.cpp @@ -656,7 +656,7 @@ bool OSystem_DS::pollEvent(Common::Event &event) {  	return false;  } -uint32 OSystem_DS::getMillis() { +uint32 OSystem_DS::getMillis(bool skipRecord) {  	return DS::getMillis();  } diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h index a6001da764..4550e22b2c 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.h +++ b/backends/platform/ds/arm9/source/osystem_ds.h @@ -117,7 +117,7 @@ public:  	virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, u32 keycolor, bool dontScale, const Graphics::PixelFormat *format);  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual void getTimeAndDate(TimeDate &t) const; diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp index ed2c886213..460d3fd2ac 100644 --- a/backends/platform/iphone/osys_main.cpp +++ b/backends/platform/iphone/osys_main.cpp @@ -166,7 +166,7 @@ void OSystem_IPHONE::suspendLoop() {  	_timeSuspended += getMillis() - startTime;  } -uint32 OSystem_IPHONE::getMillis() { +uint32 OSystem_IPHONE::getMillis(bool skipRecord) {  	//printf("getMillis()\n");  	struct timeval currentTime; diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h index 037125490d..811a8ddb2e 100644 --- a/backends/platform/iphone/osys_main.h +++ b/backends/platform/iphone/osys_main.h @@ -165,7 +165,7 @@ public:  	virtual void setCursorPalette(const byte *colors, uint start, uint num);  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual MutexRef createMutex(void); diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h index bc6b3cb1a5..10138b230a 100644 --- a/backends/platform/n64/osys_n64.h +++ b/backends/platform/n64/osys_n64.h @@ -184,7 +184,7 @@ public:  	virtual void setCursorPalette(const byte *colors, uint start, uint num);  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual MutexRef createMutex(void); diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp index 1e2aca9e51..afd93f5e09 100644 --- a/backends/platform/n64/osys_n64_base.cpp +++ b/backends/platform/n64/osys_n64_base.cpp @@ -810,7 +810,7 @@ void OSystem_N64::setMouseCursor(const void *buf, uint w, uint h, int hotspotX,  	return;  } -uint32 OSystem_N64::getMillis() { +uint32 OSystem_N64::getMillis(bool skipRecord) {  	return getMilliTick();  } diff --git a/backends/platform/null/null.cpp b/backends/platform/null/null.cpp index 4690a67c55..9e05539799 100644 --- a/backends/platform/null/null.cpp +++ b/backends/platform/null/null.cpp @@ -49,7 +49,7 @@ public:  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual void getTimeAndDate(TimeDate &t) const {} diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp index 5628658381..a7d782b07c 100644 --- a/backends/platform/ps2/systemps2.cpp +++ b/backends/platform/ps2/systemps2.cpp @@ -571,7 +571,7 @@ void OSystem_PS2::displayMessageOnOSD(const char *msg) {  	printf("displayMessageOnOSD: %s\n", msg);  } -uint32 OSystem_PS2::getMillis(void) { +uint32 OSystem_PS2::getMillis(bool skipRecord) {  	return msecCount;  } diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h index 99482d4da4..3ba40a70f9 100644 --- a/backends/platform/ps2/systemps2.h +++ b/backends/platform/ps2/systemps2.h @@ -82,7 +82,7 @@ public:  	virtual void warpMouse(int x, int y);  	virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspot_x, int hotspot_y, uint32 keycolor, bool dontScale = false, const Graphics::PixelFormat *format = 0); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual bool pollEvent(Common::Event &event); diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp index fb8c1c60bf..8559066e53 100644 --- a/backends/platform/psp/osys_psp.cpp +++ b/backends/platform/psp/osys_psp.cpp @@ -349,7 +349,7 @@ bool OSystem_PSP::pollEvent(Common::Event &event) {  	return _inputHandler.getAllInputs(event);  } -uint32 OSystem_PSP::getMillis() { +uint32 OSystem_PSP::getMillis(bool skipRecord) {  	return PspRtc::instance().getMillis();  } diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h index 2afdabd0fc..f4591e476d 100644 --- a/backends/platform/psp/osys_psp.h +++ b/backends/platform/psp/osys_psp.h @@ -125,7 +125,7 @@ public:  	bool processInput(Common::Event &event);  	// Time -	uint32 getMillis(); +	uint32 getMillis(bool skipRecord = false);  	void delayMillis(uint msecs);  	// Timer diff --git a/backends/platform/psp/rtc.cpp b/backends/platform/psp/rtc.cpp index cbbb7d3f80..4f15e45535 100644 --- a/backends/platform/psp/rtc.cpp +++ b/backends/platform/psp/rtc.cpp @@ -52,7 +52,7 @@ void PspRtc::init() {						// init our starting ticks  // Note that after we fill up 32 bits ie 50 days we'll loop back to 0, which may cause  // unpredictable results -uint32 PspRtc::getMillis() { +uint32 PspRtc::getMillis(bool skipRecord) {  	uint32 ticks[2];  	sceRtcGetCurrentTick((u64 *)ticks);		// can introduce weird thread delays diff --git a/backends/platform/psp/rtc.h b/backends/platform/psp/rtc.h index 45885c3e66..d2689681dd 100644 --- a/backends/platform/psp/rtc.h +++ b/backends/platform/psp/rtc.h @@ -40,7 +40,7 @@ public:  		init();  	}  	void init(); -	uint32 getMillis(); +	uint32 getMillis(bool skipRecord = false);  	uint32 getMicros();  }; diff --git a/backends/platform/sdl/sdl-sys.h b/backends/platform/sdl/sdl-sys.h index ca3c586e03..eccf73815d 100644 --- a/backends/platform/sdl/sdl-sys.h +++ b/backends/platform/sdl/sdl-sys.h @@ -35,8 +35,11 @@  // it with an alternate slightly less unfriendly override.  #if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_FILE)  #undef FILE +// Solaris has typedef __FILE FILE in several places already +#if !defined(__sun)  typedef struct { int FAKE; } FAKE_FILE;  #define FILE FAKE_FILE +#endif   // (__sun)  #endif  #if !defined(FORBIDDEN_SYMBOL_ALLOW_ALL) && !defined(FORBIDDEN_SYMBOL_EXCEPTION_strcasecmp) diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index d54854352d..7ab367d4a4 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -30,7 +30,7 @@  #include "backends/platform/sdl/sdl.h"  #include "common/config-manager.h" -#include "common/EventRecorder.h" +#include "gui/EventRecorder.h"  #include "common/taskbar.h"  #include "common/textconsole.h" @@ -97,7 +97,15 @@ OSystem_SDL::~OSystem_SDL() {  	_audiocdManager = 0;  	delete _mixerManager;  	_mixerManager = 0; + +#ifdef ENABLE_EVENTRECORDER +	// HACK HACK HACK +	// This is nasty. +	delete g_eventRec.getTimerManager(); +#else  	delete _timerManager; +#endif +  	_timerManager = 0;  	delete _mutexManager;  	_mutexManager = 0; @@ -131,9 +139,6 @@ void OSystem_SDL::init() {  	if (_mutexManager == 0)  		_mutexManager = new SdlMutexManager(); -	if (_timerManager == 0) -		_timerManager = new SdlTimerManager(); -  #if defined(USE_TASKBAR)  	if (_taskbarManager == 0)  		_taskbarManager = new Common::TaskbarManager(); @@ -191,11 +196,19 @@ void OSystem_SDL::initBackend() {  	if (_mixerManager == 0) {  		_mixerManager = new SdlMixerManager(); -  		// Setup and start mixer  		_mixerManager->init();  	} +#ifdef ENABLE_EVENTRECORDER +	g_eventRec.registerMixerManager(_mixerManager); + +	g_eventRec.registerTimerManager(new SdlTimerManager()); +#else +	if (_timerManager == 0) +		_timerManager = new SdlTimerManager(); +#endif +  	if (_audiocdManager == 0) {  		// Audio CD support was removed with SDL 1.3  #if SDL_VERSION_ATLEAST(1, 3, 0) @@ -466,14 +479,21 @@ void OSystem_SDL::setupIcon() {  	free(icon);  } -uint32 OSystem_SDL::getMillis() { + +uint32 OSystem_SDL::getMillis(bool skipRecord) {  	uint32 millis = SDL_GetTicks(); -	g_eventRec.processMillis(millis); + +#ifdef ENABLE_EVENTRECORDER +	g_eventRec.processMillis(millis, skipRecord); +#endif +  	return millis;  }  void OSystem_SDL::delayMillis(uint msecs) { -	if (!g_eventRec.processDelayMillis(msecs)) +#ifdef ENABLE_EVENTRECORDER +	if (!g_eventRec.processDelayMillis()) +#endif  		SDL_Delay(msecs);  } @@ -491,12 +511,25 @@ void OSystem_SDL::getTimeAndDate(TimeDate &td) const {  Audio::Mixer *OSystem_SDL::getMixer() {  	assert(_mixerManager); -	return _mixerManager->getMixer(); +	return getMixerManager()->getMixer();  }  SdlMixerManager *OSystem_SDL::getMixerManager() {  	assert(_mixerManager); + +#ifdef ENABLE_EVENTRECORDER +	return g_eventRec.getMixerManager(); +#else  	return _mixerManager; +#endif +} + +Common::TimerManager *OSystem_SDL::getTimerManager() { +#ifdef ENABLE_EVENTRECORDER +	return g_eventRec.getTimerManager(); +#else +	return _timerManager; +#endif  }  #ifdef USE_OPENGL diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index f05207b482..840e73ff09 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -68,10 +68,11 @@ public:  	virtual void setWindowCaption(const char *caption);  	virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual void getTimeAndDate(TimeDate &td) const;  	virtual Audio::Mixer *getMixer(); +	virtual Common::TimerManager *getTimerManager();  protected:  	bool _inited; diff --git a/backends/platform/bada/README.TXT b/backends/platform/tizen/README.TXT index c4a04d5450..def3da2cce 100644 --- a/backends/platform/bada/README.TXT +++ b/backends/platform/tizen/README.TXT @@ -1,77 +1,58 @@ -Build instructions: +Build instructions (using linux) -1. Install BADA SDK (requires free registration): - - http://developer.bada.com/apis/index.do - -2. Install Cygwin: - - http://www.cygwin.com/ +1. Install the Tizen SDK - Add the following to your cygwin .bash_profile: +http://www.tizen.org - alias mmake=/cygdrive/c/MinGW/bin/mingw32-make.exe - export BADA_SDK=/cygdrive/c/bada/1.2.1 - export ARM_BIN=c:/bada/1.2.1/Tools/Toolchains/ARM/bin - export CPPFLAGS="-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 \ -                  -mfloat-abi=hard -mlittle-endian -mthumb-interwork -Wno-psabi \ -                  -fno-strict-aliasing -fno-short-enums" - export LDFLAGS="-nostdlib -lc-newlib -lm-newlib -LC:/bada/1.2.1/Model/Wave_LP1/Target" - #export PATH=${BADA_SDK}/Tools/Toolchains/Win32/bin:${PATH} - export PATH=${BADA_SDK}/Tools/Toolchains/ARM/bin:~/utils:${PATH} - alias gcc=${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe - alias ar=${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe +To use an alternative Java SDK to run the Tizen IDE (eclipse), edit ~/.profile  - The following were added to ~/utils for zlib: +export JAVA_HOME=/opt/jdk1.6.0_45 +export PATH=${PATH}:${JAVA_HOME}/bin - ar: - #!/bin/sh - ${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe $* +2. Add the following to your ~/.bashrc file - gcc: - #!/bin/sh - ${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe $* +export TIZEN_SDK=${HOME}/tizen-sdk +export TIZEN_ROOTSTRAP=${TIZEN_SDK}/platforms/tizen2.1/rootstraps/tizen-device-2.1.native +export TIZEN_BIN=${TIZEN_SDK}/tools/arm-linux-gnueabi-gcc-4.5/bin +export TIZEN_LIBS=${HOME}/tizen-lib +export PATH=${PATH}:${TIZEN_BIN}:~/bin +export CHOST=arm-linux-gnueabi +export LDFLAGS="--sysroot=${TIZEN_ROOTSTRAP} -L${TIZEN_LIBS}/lib" +export CPPFLAGS="--sysroot=${TIZEN_ROOTSTRAP} -fmessage-length=0 -fPIC\ +  -I${TIZEN_ROOTSTRAP}/usr/include -I${TIZEN_LIBS}/include" +export CFLAGS=${CPPFLAGS}  3. Build dependencies - zlib, libogg, libvorbis, libmad, FLAC - - see: "Building the libraries" under: + See: "Building the libraries" under:   http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW#Building_the_libraries   for instructions on how to obtain these modules - 3.1 For Target-Release configure ogg and mad with: - -     ./configure --host=arm-samsung-nucleuseabi --disable-shared + 3.1 zlib -     when building vorbis and flac: + $ ./configure --static --prefix=${TIZEN_LIBS} + $ make && make install -     ./configure --host=arm-samsung-nucleuseabi --disable-shared --with-ogg=c:/cygwin/usr/local + 3.2 freetype, libtheora, libogg, libvorbis, libmad, FLAC - 3.2 for each module, after a successful configure, add the following -     to the generated config.h (gzguts.h for zlib) + $ ./configure --host=arm-linux-gnueabi --prefix=${TIZEN_LIBS} --disable-shared + $ make && make install -     #undef __MINGW32__ -     #undef _WIN32 -     #include "c:/src/scummvm/backends/platform/bada/portdefs.h" - - 3.3 Additional post configure edits: + Note: you can ignore the ranlib errors when doing make install. -   - removed -fforce-mem from the libMAD Makefile -   - in libvorbis/lib/Makefile comment lines with vorbis_selftests -   - edit libFLAC/Makefile ... CFLAGS = $(OGG_CFLAGS) + Modify the resulting ~/tizen-lib/bin/freetype-config file to include -lz when printing libs - Note: you can ignore the ranlib errors when doing make install. + 3.3 Linker ordering: scummvm, freetype, theoradec, vorbis, vorbisfile, mad, FLAC, ogg, z  4. Build the ScummVM base library: -  ./configure --host=bada --enable-release +  ./configure --host=tizen --enable-release --with-freetype2-prefix=${TIZEN_LIBS}/bin -  To target the Win32 simulator: +  For development: - ./configure --host=bada --enable-debug +  ./configure --host=tizen --enable-verbose-build --enable-debug -5. Build the front end application using BADA-Ide: +5. Build the front end application using Tizen IDE   Copy the scummvm/dists/bada folder into a clean directory   outside of the scummvm package. Start the BADA IDE then @@ -90,3 +71,38 @@ HelvB14 font files:   Then run the following command:   $ ./ucs2any.pl 100dpi/helvB14.bdf MAPPINGS/8859-1.TXT iso8859-1 \     MAPPINGS/8859-2.TXT iso8859-2 MAPPINGS/8859-3.TXT iso8859-3 + +===================================================================== +Archived build instruction for BADA/cygwin + +1. Install BADA SDK (requires free registration): + + http://developer.bada.com/apis/index.do + +2. Install Cygwin: + + http://www.cygwin.com/ + + Add the following to your cygwin .bash_profile: + + alias mmake=/cygdrive/c/MinGW/bin/mingw32-make.exe + export BADA_SDK=/cygdrive/c/bada/1.2.1 + export ARM_BIN=c:/bada/1.2.1/Tools/Toolchains/ARM/bin + export CPPFLAGS="-fpic -fshort-wchar -mcpu=cortex-a8 -mfpu=vfpv3 \ +                  -mfloat-abi=hard -mlittle-endian -mthumb-interwork -Wno-psabi \ +                  -fno-strict-aliasing -fno-short-enums" + export LDFLAGS="-nostdlib -lc-newlib -lm-newlib -LC:/bada/1.2.1/Model/Wave_LP1/Target" + #export PATH=${BADA_SDK}/Tools/Toolchains/Win32/bin:${PATH} + export PATH=${BADA_SDK}/Tools/Toolchains/ARM/bin:~/utils:${PATH} + alias gcc=${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe + alias ar=${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe + + The following were added to ~/utils for zlib: + + ar: + #!/bin/sh + ${ARM_BIN}/arm-samsung-nucleuseabi-ar.exe $* + + gcc: + #!/bin/sh + ${ARM_BIN}/arm-samsung-nucleuseabi-gcc.exe $* diff --git a/backends/platform/bada/application.cpp b/backends/platform/tizen/application.cpp index e761649245..8236ebef67 100644 --- a/backends/platform/bada/application.cpp +++ b/backends/platform/tizen/application.cpp @@ -22,43 +22,55 @@  #include "engines/engine.h" -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/system.h" -#include "backends/platform/bada/application.h" +#include "backends/platform/tizen/form.h" +#include "backends/platform/tizen/system.h" +#include "backends/platform/tizen/application.h" -using namespace Osp::System; -using namespace Osp::Ui::Controls; - -Application *BadaScummVM::createInstance() { -	return new BadaScummVM(); +Application *TizenScummVM::createInstance() { +	logEntered(); +	return new TizenScummVM();  } -BadaScummVM::BadaScummVM() : _appForm(0) { +TizenScummVM::TizenScummVM() : _appForm(0) { +	logEntered();  } -BadaScummVM::~BadaScummVM() { +TizenScummVM::~TizenScummVM() {  	logEntered();  	if (g_system) { -		BadaSystem *system = (BadaSystem *)g_system; +		TizenSystem *system = (TizenSystem *)g_system;  		system->destroyBackend();  		delete system;  		g_system = 0;  	}  } -bool BadaScummVM::OnAppInitializing(AppRegistry &appRegistry) { +bool TizenScummVM::OnAppInitialized(void) { +	logEntered(); +	_appForm->SetOrientation(Tizen::Ui::ORIENTATION_LANDSCAPE); +	return true; +} + +bool TizenScummVM::OnAppWillTerminate(void) { +	logEntered(); +	return true; +} + +bool TizenScummVM::OnAppInitializing(AppRegistry &appRegistry) { +	logEntered();  	_appForm = systemStart(this);  	return (_appForm != NULL);  } -bool BadaScummVM::OnAppTerminating(AppRegistry &appRegistry, -																	 bool forcedTermination) { +bool TizenScummVM::OnAppTerminating(AppRegistry &appRegistry, bool forcedTermination) {  	logEntered();  	return true;  } -void BadaScummVM::OnUserEventReceivedN(RequestId requestId, -																			 Osp::Base::Collection::IList *args) { +void TizenScummVM::OnUserEventReceivedN(RequestId requestId, IList *args) { +	MessageBox messageBox; +	int modalResult; +  	logEntered();  	if (requestId == USER_MESSAGE_EXIT) { @@ -73,39 +85,56 @@ void BadaScummVM::OnUserEventReceivedN(RequestId requestId,  		if (!message) {  			message = new String("Unknown error");  		} - -		MessageBox messageBox;  		messageBox.Construct(L"Oops...", *message, MSGBOX_STYLE_OK); -		int modalResult; +		messageBox.ShowAndWait(modalResult); +		Terminate(); +	} else if (requestId == USER_MESSAGE_EXIT_ERR_CONFIG) { +		// the config file was corrupted +		messageBox.Construct(L"Config file corrupted", +				L"Settings have been reverted, please restart.", MSGBOX_STYLE_OK);  		messageBox.ShowAndWait(modalResult);  		Terminate();  	}  } -void BadaScummVM::OnForeground(void) { +void TizenScummVM::OnForeground(void) {  	logEntered();  	pauseGame(false);  } -void BadaScummVM::OnBackground(void) { +void TizenScummVM::OnBackground(void) {  	logEntered();  	pauseGame(true);  } -void BadaScummVM::OnBatteryLevelChanged(BatteryLevel batteryLevel) { +void TizenScummVM::OnBatteryLevelChanged(BatteryLevel batteryLevel) { +	logEntered();  } -void BadaScummVM::OnLowMemory(void) { +void TizenScummVM::OnLowMemory(void) { +	logEntered(); +} + +void TizenScummVM::OnScreenOn(void) { +	logEntered(); +} + +void TizenScummVM::OnScreenOff(void) { +	logEntered(); +} + +void TizenScummVM::OnScreenBrightnessChanged(int brightness) { +	logEntered();  } -void BadaScummVM::pauseGame(bool pause) { +void TizenScummVM::pauseGame(bool pause) {  	if (_appForm) {  		if (pause && g_engine && !g_engine->isPaused()) {  			_appForm->pushKey(Common::KEYCODE_SPACE);  		}  		if (g_system) { -			((BadaSystem *)g_system)->setMute(pause); +			((TizenSystem *)g_system)->setMute(pause);  		}  	}  } diff --git a/backends/platform/bada/application.h b/backends/platform/tizen/application.h index 2b0d37f1ef..f18ccb175b 100644 --- a/backends/platform/bada/application.h +++ b/backends/platform/tizen/application.h @@ -20,8 +20,8 @@   *   */ -#ifndef BADA_APPLICATION_H -#define BADA_APPLICATION_H +#ifndef TIZEN_APPLICATION_H +#define TIZEN_APPLICATION_H  #include <FBase.h>  #include <FApp.h> @@ -29,26 +29,41 @@  #include <FUi.h>  #include <FSystem.h> -#include "backends/platform/bada/system.h" +#include "backends/platform/tizen/system.h" +#include "backends/platform/tizen/form.h" + +using namespace Tizen::App; +using namespace Tizen::System; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Base::Collection; + +class TizenScummVM : +	public UiApp, +	public IScreenEventListener { -class BadaScummVM : public Osp::App::Application {  public: -	BadaScummVM(); -	~BadaScummVM(); +	TizenScummVM(); +	virtual ~TizenScummVM(); -	static Osp::App::Application *createInstance(void); +	static UiApp *createInstance(void); -	bool OnAppInitializing(Osp::App::AppRegistry &appRegistry); -	bool OnAppTerminating(Osp::App::AppRegistry &appRegistry, bool forcedTermination = false); -	void OnForeground(void); -	void OnBackground(void); -	void OnLowMemory(void); -	void OnBatteryLevelChanged(Osp::System::BatteryLevel batteryLevel); -	void OnUserEventReceivedN(RequestId requestId, Osp::Base::Collection::IList *pArgs); +	virtual bool OnAppInitializing(AppRegistry &appRegistry); +	virtual bool OnAppInitialized(void); +	virtual bool OnAppWillTerminate(void); +	virtual bool OnAppTerminating(AppRegistry &appRegistry, bool forcedTermination = false); +	virtual void OnLowMemory(void); +	virtual void OnBatteryLevelChanged(BatteryLevel batteryLevel); +	virtual void OnUserEventReceivedN(RequestId requestId, IList *pArgs); +	virtual void OnForeground(void); +	virtual void OnBackground(void); +	virtual void OnScreenOn(void); +	virtual void OnScreenOff(void); +	virtual void OnScreenBrightnessChanged(int brightness);  private:  	void pauseGame(bool pause); -	BadaAppForm *_appForm; +	TizenAppForm *_appForm;  };  #endif diff --git a/backends/platform/bada/audio.cpp b/backends/platform/tizen/audio.cpp index 65a5a80fa5..313a10eaa8 100644 --- a/backends/platform/bada/audio.cpp +++ b/backends/platform/tizen/audio.cpp @@ -23,18 +23,11 @@  #include <FSysSettingInfo.h>  #include <FAppAppRegistry.h> -#include "backends/platform/bada/audio.h" -#include "backends/platform/bada/system.h" +#include "backends/platform/tizen/audio.h" +#include "backends/platform/tizen/system.h" -#define TIMER_INCREMENT		 10 -#define TIMER_INTERVAL		 40 -#define MIN_TIMER_INTERVAL 10 -#define MAX_TIMER_INTERVAL 160 -#define INIT_LEVEL				 3 -#define CONFIG_KEY				 L"audiovol" - -// sound level pre-sets -const int levels[] = {0, 1, 10, 45, 70, 99}; +#define TIMER_INTERVAL 10 +#define VOLUME 99  AudioThread::AudioThread() :  	_mixer(0), @@ -51,9 +44,7 @@ AudioThread::AudioThread() :  Audio::MixerImpl *AudioThread::Construct(OSystem *system) {  	logEntered(); -	if (IsFailed(Thread::Construct(THREAD_TYPE_EVENT_DRIVEN, -																 DEFAULT_STACK_SIZE, -																 THREAD_PRIORITY_HIGH))) { +	if (IsFailed(EventDrivenThread::Construct(DEFAULT_STACK_SIZE, THREAD_PRIORITY_HIGH))) {  		AppLog("Failed to create AudioThread");  		return NULL;  	} @@ -69,7 +60,7 @@ AudioThread::~AudioThread() {  bool AudioThread::isSilentMode() {  	bool silentMode;  	String key(L"SilentMode"); -	Osp::System::SettingInfo::GetValue(key, silentMode); +	Tizen::System::SettingInfo::GetValue(key, silentMode);  	return silentMode;  } @@ -79,59 +70,16 @@ void AudioThread::setMute(bool on) {  		if (on) {  			_timer->Cancel();  		} else { -			_timer->Start(_interval); -		} -	} -} - -int AudioThread::setVolume(bool up, bool minMax) { -	int level = -1; -	int numLevels = sizeof(levels) / sizeof(levels[0]); - -	if (_audioOut) { -		int volume = _audioOut->GetVolume(); -		if (minMax) { -			level = up ? numLevels - 1 : 0; -			volume = levels[level]; -		} else { -			// adjust volume to be one of the preset values -			for (int i = 0; i < numLevels && level == -1; i++) { -				if (volume == levels[i]) { -					level = i; -					if (up) { -						if (i + 1 < numLevels) { -							level = i + 1; -						} -					} else if (i > 0) { -						level = i - 1; -					} -				} -			} - -			// default to INIT_LEVEL when current not preset value -			if (level == -1) { -				level = INIT_LEVEL; -			} -			volume = levels[level]; -		} - -		_audioOut->SetVolume(volume); - -		// remember the chosen setting -		AppRegistry *registry = Application::GetInstance()->GetAppRegistry(); -		if (registry) { -			registry->Set(CONFIG_KEY, volume); +			_timer->StartAsRepeatable(_interval);  		}  	} -	return level;  }  bool AudioThread::OnStart(void) {  	logEntered(); -	_audioOut = new Osp::Media::AudioOut(); -	if (!_audioOut || -			IsFailed(_audioOut->Construct(*this))) { +	_audioOut = new Tizen::Media::AudioOut(); +	if (!_audioOut || IsFailed(_audioOut->Construct(*this))) {  		AppLog("Failed to create AudioOut");  		return false;  	} @@ -144,8 +92,7 @@ bool AudioThread::OnStart(void) {  	}  	if (IsFailed(_audioOut->Prepare(AUDIO_TYPE_PCM_S16_LE, -																 AUDIO_CHANNEL_TYPE_STEREO, -																 sampleRate))) { +			AUDIO_CHANNEL_TYPE_STEREO, sampleRate))) {  		AppLog("Failed to prepare AudioOut %d", sampleRate);  		return false;  	} @@ -164,26 +111,14 @@ bool AudioThread::OnStart(void) {  		return false;  	} -	if (IsFailed(_timer->Start(_interval))) { +	if (IsFailed(_timer->StartAsRepeatable(_interval))) {  		AppLog("failed to start audio timer");  		return false;  	} -	// get the volume from the app-registry -	int volume = levels[INIT_LEVEL]; -	AppRegistry *registry = Application::GetInstance()->GetAppRegistry(); -	if (registry) { -		if (E_KEY_NOT_FOUND == registry->Get(CONFIG_KEY, volume)) { -			registry->Add(CONFIG_KEY, volume); -			volume = levels[INIT_LEVEL]; -		} else { -			AppLog("Setting volume: %d", volume); -		} -	} -  	_muted = false;  	_mixer->setReady(true); -	_audioOut->SetVolume(isSilentMode() ? 0 : volume); +	_audioOut->SetVolume(isSilentMode() ? 0 : VOLUME);  	_audioOut->Start();  	return true;  } @@ -206,20 +141,20 @@ void AudioThread::OnStop(void) {  	}  } -void AudioThread::OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r) { +void AudioThread::OnAudioOutErrorOccurred(Tizen::Media::AudioOut &src, result r) {  	logEntered();  } -void AudioThread::OnAudioOutInterrupted(Osp::Media::AudioOut &src) { +void AudioThread::OnAudioOutInterrupted(Tizen::Media::AudioOut &src) {  	logEntered();  } -void AudioThread::OnAudioOutReleased(Osp::Media::AudioOut &src) { +void AudioThread::OnAudioOutReleased(Tizen::Media::AudioOut &src) {  	logEntered();  	_audioOut->Start();  } -void AudioThread::OnAudioOutBufferEndReached(Osp::Media::AudioOut &src) { +void AudioThread::OnAudioOutBufferEndReached(Tizen::Media::AudioOut &src) {  	if (_ready > 0) {  		_playing = _tail;  		_audioOut->WriteBuffer(_audioBuffer[_tail]); @@ -228,10 +163,6 @@ void AudioThread::OnAudioOutBufferEndReached(Osp::Media::AudioOut &src) {  	} else {  		// audio buffer empty: decrease timer inverval  		_playing = -1; -		_interval -= TIMER_INCREMENT; -		if (_interval < MIN_TIMER_INTERVAL) { -			_interval = MIN_TIMER_INTERVAL; -		}  	}  } @@ -243,18 +174,8 @@ void AudioThread::OnTimerExpired(Timer &timer) {  			_head = (_head + 1) % NUM_AUDIO_BUFFERS;  			_ready++;  		} -	} else { -		// audio buffer full: increase timer inverval -		_interval += TIMER_INCREMENT; -		if (_interval > MAX_TIMER_INTERVAL) { -			_interval = MAX_TIMER_INTERVAL; -		}  	} -  	if (_ready && _playing == -1) {  		OnAudioOutBufferEndReached(*_audioOut);  	} - -	_timer->Start(_interval);  } - diff --git a/backends/platform/bada/audio.h b/backends/platform/tizen/audio.h index 72c537a942..8d7835042d 100644 --- a/backends/platform/bada/audio.h +++ b/backends/platform/tizen/audio.h @@ -20,8 +20,8 @@   *   */ -#ifndef BADA_AUDIO_H -#define BADA_AUDIO_H +#ifndef TIZEN_AUDIO_H +#define TIZEN_AUDIO_H  #include <FBase.h>  #include <FMedia.h> @@ -33,17 +33,19 @@  #include "common/system.h"  #include "audio/mixer_intern.h" -using namespace Osp::Base; -using namespace Osp::Base::Collection; -using namespace Osp::Base::Runtime; -using namespace Osp::Media; -using namespace Osp::Io; +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Media; +using namespace Tizen::Io;  #define NUM_AUDIO_BUFFERS 2 -class AudioThread: public Osp::Media::IAudioOutEventListener, -									 public Osp::Base::Runtime::ITimerEventListener, -									 public Osp::Base::Runtime::Thread { +class AudioThread: +	public Tizen::Media::IAudioOutEventListener, +	public Tizen::Base::Runtime::ITimerEventListener, +	public Tizen::Base::Runtime::EventDrivenThread { +  public:  	AudioThread(void);  	~AudioThread(void); @@ -51,21 +53,20 @@ public:  	Audio::MixerImpl *Construct(OSystem *system);  	bool isSilentMode();  	void setMute(bool on); -	int setVolume(bool up, bool minMax);  	bool OnStart(void);  	void OnStop(void); -	void OnAudioOutErrorOccurred(Osp::Media::AudioOut &src, result r); -	void OnAudioOutInterrupted(Osp::Media::AudioOut &src); -	void OnAudioOutReleased(Osp::Media::AudioOut &src); -	void OnAudioOutBufferEndReached(Osp::Media::AudioOut &src); +	void OnAudioOutErrorOccurred(Tizen::Media::AudioOut &src, result r); +	void OnAudioOutInterrupted(Tizen::Media::AudioOut &src); +	void OnAudioOutReleased(Tizen::Media::AudioOut &src); +	void OnAudioOutBufferEndReached(Tizen::Media::AudioOut &src);  	void OnTimerExpired(Timer &timer);  private:  	Audio::MixerImpl *_mixer; -	Osp::Base::Runtime::Timer *_timer; -	Osp::Media::AudioOut *_audioOut; -	Osp::Base::ByteBuffer _audioBuffer[NUM_AUDIO_BUFFERS]; +	Tizen::Base::Runtime::Timer *_timer; +	Tizen::Media::AudioOut *_audioOut; +	Tizen::Base::ByteBuffer _audioBuffer[NUM_AUDIO_BUFFERS];  	int _head, _tail, _ready, _interval, _playing;  	bool _muted;  }; diff --git a/backends/platform/tizen/form.cpp b/backends/platform/tizen/form.cpp new file mode 100644 index 0000000000..5050699ca9 --- /dev/null +++ b/backends/platform/tizen/form.cpp @@ -0,0 +1,419 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + * + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include <FApp.h> +#include <FSysSystemTime.h> + +#include "common/translation.h" +#include "base/main.h" + +#include "backends/platform/tizen/form.h" +#include "backends/platform/tizen/system.h" + +using namespace Tizen::Base::Collection; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Ui::Controls; + +// round down small Y touch values to 1 to allow the +// cursor to be positioned at the top of the screen +#define MIN_TOUCH_Y 20 + +// block for up to 2.5 seconds during shutdown to +// allow the game thread to exit gracefully. +#define EXIT_SLEEP_STEP 10 +#define EXIT_SLEEP 250 + +// +// TizenAppForm +// +TizenAppForm::TizenAppForm() : +	_gestureMode(false), +	_osdMessage(NULL), +	_gameThread(NULL), +	_eventQueueLock(NULL), +	_state(kInitState), +	_buttonState(kLeftButton), +	_shortcut(kShowKeypad) { +} + +result TizenAppForm::Construct() { +	TizenSystem *tizenSystem = NULL; +	result r = Form::Construct(FORM_STYLE_NORMAL); +	if (!IsFailed(r)) { +		tizenSystem = new TizenSystem(this); +		r = tizenSystem != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; +	} +	if (!IsFailed(r)) { +		r = tizenSystem->Construct(); +	} +	if (!IsFailed(r)) { +		_gameThread = new Thread(); +		r = _gameThread != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; +	} +	if (!IsFailed(r)) { +		r = _gameThread->Construct(*this); +	} +	if (!IsFailed(r)) { +		_eventQueueLock = new Mutex(); +		r = _eventQueueLock != NULL ? E_SUCCESS : E_OUT_OF_MEMORY; +	} +	if (!IsFailed(r)) { +		r = _eventQueueLock->Create(); +	} + +	if (!IsFailed(r)) { +		g_system = tizenSystem; +	} else { +		AppLog("Form startup failed"); +		delete tizenSystem; +		delete _gameThread; +		_gameThread = NULL; +	} +	return r; +} + +TizenAppForm::~TizenAppForm() { +	logEntered(); + +	if (_gameThread && _state != kErrorState) { +		terminate(); + +		_gameThread->Stop(); +		if (_state != kErrorState) { +			_gameThread->Join(); +		} + +		delete _gameThread; +		_gameThread = NULL; +	} + +	delete _eventQueueLock; +	_eventQueueLock = NULL; + +	logLeaving(); +} + +// +// abort the game thread +// +void TizenAppForm::terminate() { +	if (_state == kActiveState) { +		((TizenSystem *)g_system)->setMute(true); + +		_eventQueueLock->Acquire(); + +		Common::Event e; +		e.type = Common::EVENT_QUIT; +		_eventQueue.push(e); +		_state = kClosingState; + +		_eventQueueLock->Release(); + +		// block while thread ends +		AppLog("waiting for shutdown"); +		for (int i = 0; i < EXIT_SLEEP_STEP && _state == kClosingState; i++) { +			Thread::Sleep(EXIT_SLEEP); +		} + +		if (_state == kClosingState) { +			// failed to terminate - Join() will freeze +			_state = kErrorState; +		} +	} +} + +void TizenAppForm::exitSystem() { +	_state = kErrorState; + +	if (_gameThread) { +		_gameThread->Stop(); +		delete _gameThread; +		_gameThread = NULL; +	} +} + +result TizenAppForm::OnInitializing(void) { +	logEntered(); + +	AddOrientationEventListener(*this); +	AddTouchEventListener(*this); +	SetMultipointTouchEnabled(true); + +	// set focus to enable receiving key events +	SetEnabled(true); +	SetFocusable(true); +	SetFocus(); + +	return E_SUCCESS; +} + +result TizenAppForm::OnDraw(void) { +	logEntered(); +	return E_SUCCESS; +} + +void TizenAppForm::OnOrientationChanged(const Control &source, OrientationStatus orientationStatus) { +	logEntered(); +	if (_state == kInitState) { +		_state = kActiveState; +		_gameThread->Start(); +	} +} + +Tizen::Base::Object *TizenAppForm::Run() { +	logEntered(); + +	scummvm_main(0, 0); +	if (_state == kActiveState) { +		Tizen::App::Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT, NULL); +	} +	_state = kDoneState; +	return NULL; +} + +bool TizenAppForm::pollEvent(Common::Event &event) { +	bool result = false; + +	_eventQueueLock->Acquire(); +	if (!_eventQueue.empty()) { +		event = _eventQueue.pop(); +		result = true; +	} +	if (_osdMessage) { +		TizenSystem *system = (TizenSystem *)g_system; +		TizenGraphicsManager *graphics = system->getGraphics(); +		if (graphics) { +			graphics->displayMessageOnOSD(_osdMessage); +			_osdMessage = NULL; +		} +	} +	_eventQueueLock->Release(); + +	return result; +} + +void TizenAppForm::pushEvent(Common::EventType type, const Point ¤tPosition) { +	TizenSystem *system = (TizenSystem *)g_system; +	TizenGraphicsManager *graphics = system->getGraphics(); +	if (graphics) { +		// graphics could be NULL at startup or when +		// displaying the system error screen +		Common::Event e; +		e.type = type; +		e.mouse.x = currentPosition.x; +		e.mouse.y = currentPosition.y > MIN_TOUCH_Y ? currentPosition.y : 1; + +		bool moved = graphics->moveMouse(e.mouse.x, e.mouse.y); + +		_eventQueueLock->Acquire(); + +		if (moved && type != Common::EVENT_MOUSEMOVE) { +			Common::Event moveEvent; +			moveEvent.type = Common::EVENT_MOUSEMOVE; +			moveEvent.mouse = e.mouse; +			_eventQueue.push(moveEvent); +		} + +		_eventQueue.push(e); +		_eventQueueLock->Release(); +	} +} + +void TizenAppForm::pushKey(Common::KeyCode keycode) { +	if (_eventQueueLock) { +		Common::Event e; +		e.synthetic = false; +		e.kbd.keycode = keycode; +		e.kbd.ascii = keycode; +		e.kbd.flags = 0; + +		_eventQueueLock->Acquire(); +		e.type = Common::EVENT_KEYDOWN; +		_eventQueue.push(e); +		e.type = Common::EVENT_KEYUP; +		_eventQueue.push(e); +		_eventQueueLock->Release(); +	} +} + +void TizenAppForm::setButtonShortcut() { +	switch (_buttonState) { +	case kLeftButton: +		setMessage(_s("Right Click Once")); +		_buttonState = kRightButtonOnce; +		break; +	case kRightButtonOnce: +		setMessage(_s("Right Click")); +		_buttonState = kRightButton; +		break; +	case kRightButton: +		setMessage(_s("Move Only")); +		_buttonState = kMoveOnly; +		break; +	case kMoveOnly: +		setMessage(_s("Left Click")); +		_buttonState = kLeftButton; +		break; +	} +} + +void TizenAppForm::setMessage(const char *message) { +	if (_eventQueueLock) { +		_eventQueueLock->Acquire(); +		_osdMessage = message; +		_eventQueueLock->Release(); +	} +} + +void TizenAppForm::setShortcut() { +	logEntered(); +	// cycle to the next shortcut +	switch (_shortcut) { +	case kControlMouse: +		setMessage(_s("Escape Key")); +		_shortcut = kEscapeKey; +		break; + +	case kEscapeKey: +		setMessage(_s("Game Menu")); +		_shortcut = kGameMenu; +		break; + +	case kGameMenu: +		setMessage(_s("Show Keypad")); +		_shortcut = kShowKeypad; +		break; + +	case kShowKeypad: +		setMessage(_s("Control Mouse")); +		_shortcut = kControlMouse; +		break; +	} +} + +void TizenAppForm::invokeShortcut() { +	logEntered(); +	switch (_shortcut) { +	case kControlMouse: +		setButtonShortcut(); +		break; + +	case kEscapeKey: +		pushKey(Common::KEYCODE_ESCAPE); +		break; + +	case kGameMenu: +		_buttonState = kLeftButton; +		pushKey(Common::KEYCODE_F5); +		break; + +	case kShowKeypad: +		showKeypad(); +		break; +	} +} + +void TizenAppForm::showKeypad() { +	// display the soft keyboard +	if (_state == kActiveState) { +		_buttonState = kLeftButton; +		pushKey(Common::KEYCODE_F7); +	} +} + +int TizenAppForm::getTouchCount() { +	Tizen::Ui::TouchEventManager *touch = Tizen::Ui::TouchEventManager::GetInstance(); +	IListT<TouchEventInfo *> *touchList = touch->GetTouchInfoListN(); +	int touchCount = touchList->GetCount(); +	touchList->RemoveAll(); +	delete touchList; +	return touchCount; +} + +void TizenAppForm::OnTouchDoublePressed(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +	if (_buttonState != kMoveOnly) { +		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +	} +} + +void TizenAppForm::OnTouchFocusIn(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +} + +void TizenAppForm::OnTouchFocusOut(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +} + +void TizenAppForm::OnTouchLongPressed(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +	logEntered(); +	if (_buttonState != kLeftButton) { +		pushKey(Common::KEYCODE_RETURN); +	} +} + +void TizenAppForm::OnTouchMoved(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +	if (!_gestureMode) { +	  pushEvent(Common::EVENT_MOUSEMOVE, currentPosition); +	} +} + +void TizenAppForm::OnTouchPressed(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +	if (getTouchCount() > 1) { +		_gestureMode = true; +	} else if (_buttonState != kMoveOnly) { +		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONDOWN : Common::EVENT_RBUTTONDOWN, +							currentPosition); +	} +} + +void TizenAppForm::OnTouchReleased(const Control &source, +		const Point ¤tPosition, const TouchEventInfo &touchInfo) { +	if (_gestureMode) { +		int touchCount = getTouchCount(); +		if (touchCount == 1) { +			setShortcut(); +		} else { +			if (touchCount == 2) { +				invokeShortcut(); +			} +			_gestureMode = false; +		} +	} else if (_buttonState != kMoveOnly) { +		pushEvent(_buttonState == kLeftButton ? Common::EVENT_LBUTTONUP : Common::EVENT_RBUTTONUP, +							currentPosition); +		if (_buttonState == kRightButtonOnce) { +			_buttonState = kLeftButton; +		} +		// flick to skip dialog +		if (touchInfo.IsFlicked()) { +			pushKey(Common::KEYCODE_PERIOD); +		} +	} +} + diff --git a/backends/platform/tizen/form.h b/backends/platform/tizen/form.h new file mode 100644 index 0000000000..64c447d409 --- /dev/null +++ b/backends/platform/tizen/form.h @@ -0,0 +1,113 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + * + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TIZEN_FORM_H +#define TIZEN_FORM_H + +#include <FApp.h> +#include <FUi.h> +#include <FSystem.h> +#include <FBase.h> +#include <FUiITouchEventListener.h> +#include <FUiITextEventListener.h> + +#include "config.h" +#include "common/scummsys.h" +#include "common/events.h" +#include "common/queue.h" +#include "common/mutex.h" +#include "engines/engine.h" + +using namespace Tizen::Ui; +using namespace Tizen::Graphics; +using namespace Tizen::Base::Runtime; + +// +// TizenAppForm +// +class TizenAppForm : +	public Controls::Form, +	public IRunnable, +	public IOrientationEventListener, +	public ITouchEventListener { + +public: +	TizenAppForm(); +	virtual ~TizenAppForm(); + +	result Construct(); +	bool pollEvent(Common::Event &event); +	bool isClosing() { return _state == kClosingState; } +	bool isStarting() { return _state == kInitState; } +	void pushKey(Common::KeyCode keycode); +	void exitSystem(); +	void showKeypad(); + +private: +	Tizen::Base::Object *Run(); +	result OnInitializing(void); +	result OnDraw(void); +	void OnOrientationChanged(const Control &source, +			OrientationStatus orientationStatus); +	void OnTouchDoublePressed(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchFocusIn(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchFocusOut(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchLongPressed(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchMoved(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchPressed(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); +	void OnTouchReleased(const Control &source, +			const Point ¤tPosition, +			const TouchEventInfo &touchInfo); + +	void pushEvent(Common::EventType type, const Point ¤tPosition); +	void terminate(); +	void setButtonShortcut(); +	void setMessage(const char *message); +	void setShortcut(); +	void invokeShortcut(); +	int  getTouchCount(); +	bool gameActive() { return _state == kActiveState && g_engine != NULL && !g_engine->isPaused(); } + +	// event handling +	bool _gestureMode; +	const char *_osdMessage; +	Tizen::Base::Runtime::Thread *_gameThread; +	Tizen::Base::Runtime::Mutex *_eventQueueLock; +	Common::Queue<Common::Event> _eventQueue; +	enum { kInitState, kActiveState, kClosingState, kDoneState, kErrorState } _state; +	enum { kLeftButton, kRightButtonOnce, kRightButton, kMoveOnly } _buttonState; +	enum { kControlMouse, kEscapeKey, kGameMenu, kShowKeypad } _shortcut; +}; + +#endif diff --git a/backends/platform/bada/fs.cpp b/backends/platform/tizen/fs.cpp index 37ca496d18..f8b32f4239 100644 --- a/backends/platform/bada/fs.cpp +++ b/backends/platform/tizen/fs.cpp @@ -20,33 +20,38 @@   */  #include "config.h" -#include "backends/platform/bada/system.h" -#include "backends/platform/bada/fs.h" +#include "common/translation.h" +#include "backends/platform/tizen/system.h" +#include "backends/platform/tizen/fs.h" + +#include <FAppApp.h>  #define BUFFER_SIZE 1024 -// internal BADA paths -#define PATH_ROOT        "/" -#define PATH_HOME        "/Home" -#define PATH_HOME_SHARE  "/Home/Share" -#define PATH_HOME_SHARE2 "/Home/Share2" -#define PATH_HOME_X      "/Home/" -#define PATH_HOME_EXT    "/HomeExt" -#define PATH_MEDIA       "/Media" -#define PATH_CARD        "/Storagecard" -#define PATH_CARD_MEDIA  "/Storagecard/Media" +using namespace Tizen::App; + +// +// converts a Tizen (wchar) String into a scummVM (char) string +// +Common::String fromString(const Tizen::Base::String &in) { +	ByteBuffer *buf = StringUtil::StringToUtf8N(in); +	Common::String result((const char*)buf->GetPointer()); +	delete buf; +	return result; +}  // -// BadaFileStream +// TizenFileStream  // -class BadaFileStream : public Common::SeekableReadStream, -											 public Common::WriteStream, -											 public Common::NonCopyable { +class TizenFileStream : +	public Common::SeekableReadStream, +	public Common::WriteStream, +	public Common::NonCopyable {  public: -	static BadaFileStream *makeFromPath(const String &path, bool writeMode); +	static TizenFileStream *makeFromPath(const String &path, bool writeMode); -	BadaFileStream(File *file, bool writeMode); -	~BadaFileStream(); +	TizenFileStream(File *file, bool writeMode); +	~TizenFileStream();  	bool err() const;  	void clearErr(); @@ -61,81 +66,81 @@ public:  	uint32 read(void *dataPtr, uint32 dataSize);  private: -	byte buffer[BUFFER_SIZE]; -	uint32 bufferIndex; -	uint32 bufferLength; -	bool writeMode; -	File *file; +	byte _buffer[BUFFER_SIZE]; +	uint32 _bufferIndex; +	uint32 _bufferLength; +	bool _writeMode; +	File *_file;  }; -BadaFileStream::BadaFileStream(File *ioFile, bool writeMode) : -	bufferIndex(0), -	bufferLength(0), -	writeMode(writeMode), -	file(ioFile) { +TizenFileStream::TizenFileStream(File *ioFile, bool writeMode) : +	_bufferIndex(0), +	_bufferLength(0), +	_writeMode(writeMode), +	_file(ioFile) {  	AppAssert(ioFile != 0);  } -BadaFileStream::~BadaFileStream() { -	if (file) { -		if (writeMode) { +TizenFileStream::~TizenFileStream() { +	if (_file) { +		if (_writeMode) {  			flush();  		} -		delete file; +		delete _file;  	}  } -bool BadaFileStream::err() const { +bool TizenFileStream::err() const {  	result r = GetLastResult();  	return (r != E_SUCCESS && r != E_END_OF_FILE);  } -void BadaFileStream::clearErr() { +void TizenFileStream::clearErr() {  	SetLastResult(E_SUCCESS);  } -bool BadaFileStream::eos() const { -	return (bufferLength - bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE); +bool TizenFileStream::eos() const { +	return (_bufferLength - _bufferIndex == 0) && (GetLastResult() == E_END_OF_FILE);  } -int32 BadaFileStream::pos() const { -	return file->Tell() - (bufferLength - bufferIndex); +int32 TizenFileStream::pos() const { +	return _file->Tell() - (_bufferLength - _bufferIndex);  } -int32 BadaFileStream::size() const { -	int32 oldPos = file->Tell(); -	file->Seek(FILESEEKPOSITION_END, 0); +int32 TizenFileStream::size() const { +	int32 oldPos = _file->Tell(); +	_file->Seek(FILESEEKPOSITION_END, 0); -	int32 length = file->Tell(); -	SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, oldPos)); +	int32 length = _file->Tell(); +	SetLastResult(_file->Seek(FILESEEKPOSITION_BEGIN, oldPos));  	return length;  } -bool BadaFileStream::seek(int32 offs, int whence) { +bool TizenFileStream::seek(int32 offs, int whence) {  	bool result = false;  	switch (whence) {  	case SEEK_SET:  		// set from start of file -		SetLastResult(file->Seek(FILESEEKPOSITION_BEGIN, offs)); +		SetLastResult(_file->Seek(FILESEEKPOSITION_BEGIN, offs));  		result = (E_SUCCESS == GetLastResult());  		break;  	case SEEK_CUR:  		// set relative to offs -		if (bufferIndex < bufferLength && bufferIndex > (uint32)-offs) { +		if (_bufferIndex < _bufferLength && _bufferIndex > (uint32)-offs) {  			// re-position within the buffer  			SetLastResult(E_SUCCESS); -			bufferIndex += offs; +			_bufferIndex += offs;  			return true;  		} else { -			offs -= (bufferLength - bufferIndex); -			if (offs < 0 && file->Tell() + offs < 0) { +			offs -= (_bufferLength - _bufferIndex); +			if (offs < 0 && _file->Tell() + offs < 0) {  				// avoid negative positioning  				offs = 0;  			}  			if (offs != 0) { -				SetLastResult(file->Seek(FILESEEKPOSITION_CURRENT, offs)); +				SetLastResult(_file->Seek(FILESEEKPOSITION_CURRENT, offs));  				result = (E_SUCCESS == GetLastResult());  			} else {  				result = true; @@ -145,7 +150,7 @@ bool BadaFileStream::seek(int32 offs, int whence) {  	case SEEK_END:  		// set relative to end - positive will increase the file size -		SetLastResult(file->Seek(FILESEEKPOSITION_END, offs)); +		SetLastResult(_file->Seek(FILESEEKPOSITION_END, offs));  		result = (E_SUCCESS == GetLastResult());  		break; @@ -158,46 +163,46 @@ bool BadaFileStream::seek(int32 offs, int whence) {  		AppLog("seek failed");  	} -	bufferIndex = bufferLength = 0; +	_bufferIndex = _bufferLength = 0;  	return result;  } -uint32 BadaFileStream::read(void *ptr, uint32 len) { +uint32 TizenFileStream::read(void *ptr, uint32 len) {  	uint32 result = 0;  	if (!eos()) { -		if (bufferIndex < bufferLength) { +		if (_bufferIndex < _bufferLength) {  			// use existing buffer -			uint32 available = bufferLength - bufferIndex; +			uint32 available = _bufferLength - _bufferIndex;  			if (len <= available) {  				// use allocation -				memcpy((byte *)ptr, &buffer[bufferIndex], len); -				bufferIndex += len; +				memcpy((byte *)ptr, &_buffer[_bufferIndex], len); +				_bufferIndex += len;  				result = len;  			} else {  				// use remaining allocation -				memcpy((byte *)ptr, &buffer[bufferIndex], available); +				memcpy((byte *)ptr, &_buffer[_bufferIndex], available);  				uint32 remaining = len - available;  				result = available;  				if (remaining) { -					result += file->Read(((byte *)ptr) + available, remaining); +					result += _file->Read(((byte *)ptr) + available, remaining);  				} -				bufferIndex = bufferLength = 0; +				_bufferIndex = _bufferLength = 0;  			}  		} else if (len < BUFFER_SIZE) {  			// allocate and use buffer -			bufferIndex = 0; -			bufferLength = file->Read(buffer, BUFFER_SIZE); -			if (bufferLength) { -				if (bufferLength < len) { -					len = bufferLength; +			_bufferIndex = 0; +			_bufferLength = _file->Read(_buffer, BUFFER_SIZE); +			if (_bufferLength) { +				if (_bufferLength < len) { +					len = _bufferLength;  				} -				memcpy((byte *)ptr, buffer, len); -				result = bufferIndex = len; +				memcpy((byte *)ptr, _buffer, len); +				result = _bufferIndex = len;  			}  		} else { -			result = file->Read((byte *)ptr, len); -			bufferIndex = bufferLength = 0; +			result = _file->Read((byte *)ptr, len); +			_bufferIndex = _bufferLength = 0;  		}  	} else {  		AppLog("Attempted to read past EOS"); @@ -205,59 +210,77 @@ uint32 BadaFileStream::read(void *ptr, uint32 len) {  	return result;  } -uint32 BadaFileStream::write(const void *ptr, uint32 len) { -	result r = file->Write(ptr, len); +uint32 TizenFileStream::write(const void *ptr, uint32 len) { +	result r = _file->Write(ptr, len);  	SetLastResult(r);  	return (r == E_SUCCESS ? len : 0);  } -bool BadaFileStream::flush() { +bool TizenFileStream::flush() {  	logEntered(); -	SetLastResult(file->Flush()); +	SetLastResult(_file->Flush());  	return (E_SUCCESS == GetLastResult());  } -BadaFileStream *BadaFileStream::makeFromPath(const String &path, bool writeMode) { +TizenFileStream *TizenFileStream::makeFromPath(const String &path, bool writeMode) {  	File *ioFile = new File();  	String filePath = path;  	if (writeMode && (path[0] != '.' && path[0] != '/')) { -		filePath.Insert(PATH_HOME_X, 0); +		filePath.Insert(App::GetInstance()->GetAppDataPath() + L"/", 0);  	}  	AppLog("Open file %S", filePath.GetPointer()); - +	TizenFileStream *stream;  	result r = ioFile->Construct(filePath, writeMode ? L"w" : L"r", writeMode);  	if (r == E_SUCCESS) { -		return new BadaFileStream(ioFile, writeMode); +		stream = new TizenFileStream(ioFile, writeMode); +	} else { +		AppLog("Failed to open file"); +		delete ioFile; +		stream = NULL;  	} - -	AppLog("Failed to open file"); -	delete ioFile; -	return 0; -} - -// -// converts a bada (wchar) String into a scummVM (char) string -// -Common::String fromString(const Osp::Base::String &in) { -	ByteBuffer *buf = StringUtil::StringToUtf8N(in); -	Common::String result((const char*)buf->GetPointer()); -	delete buf; - -	return result; +	return stream;  }  // -// BadaFilesystemNode +// TizenFilesystemNode  // -BadaFilesystemNode::BadaFilesystemNode(const Common::String &nodePath) { +TizenFilesystemNode::TizenFilesystemNode(const Common::String &nodePath) {  	AppAssert(nodePath.size() > 0);  	init(nodePath);  } -BadaFilesystemNode::BadaFilesystemNode(const Common::String &root, -																			 const Common::String &nodePath) { +TizenFilesystemNode::TizenFilesystemNode(SystemPath systemPath) { +	switch (systemPath) { +	case kData: +		_unicodePath = App::GetInstance()->GetAppDataPath(); +		_displayName = _s("[ Data ]"); +		break; +	case kResource: +		_unicodePath = App::GetInstance()->GetAppResourcePath(); +		_displayName = _s("[ Resources ]"); +		break; +	case kSdCard: +		_unicodePath = Tizen::System::Environment::GetExternalStoragePath(); +		_displayName = _s("[ SDCard ]"); +		break; +	case kMedia: +		_unicodePath = Tizen::System::Environment::GetMediaPath(); +		_displayName = _s("[ Media ]"); +		break; +	case kShared: +		_unicodePath = App::GetInstance()->GetAppSharedPath(); +		_displayName = _s("[ Shared ]"); +		break; +	} +	_path = ::fromString(_unicodePath); +	_isValid = _isVirtualDir = !IsFailed(File::GetAttributes(_unicodePath, _attr)); +} + +TizenFilesystemNode::TizenFilesystemNode(const Common::String &root, const Common::String &nodePath) { +	AppLog("TizenFilesystemNode '%s' '%s'", root.c_str(), nodePath.c_str()); +  	// Make sure the string contains no slashes  	AppAssert(!nodePath.contains('/')); @@ -272,71 +295,54 @@ BadaFilesystemNode::BadaFilesystemNode(const Common::String &root,  	init(newPath);  } -void BadaFilesystemNode::init(const Common::String &nodePath) { +void TizenFilesystemNode::init(const Common::String &nodePath) {  	// Normalize the path (that is, remove unneeded slashes etc.)  	_path = Common::normalizePath(nodePath, '/');  	_displayName = Common::lastPathComponent(_path, '/');  	StringUtil::Utf8ToString(_path.c_str(), _unicodePath); -	_isVirtualDir = (_path == PATH_ROOT || -									 _path == PATH_HOME || -									 _path == PATH_HOME_SHARE || -									 _path == PATH_HOME_SHARE2 || -									 _path == PATH_CARD); +	_isVirtualDir = (_path == "/");  	_isValid = _isVirtualDir || !IsFailed(File::GetAttributes(_unicodePath, _attr));  } -bool BadaFilesystemNode::exists() const { +bool TizenFilesystemNode::exists() const {  	return _isValid;  } -bool BadaFilesystemNode::isReadable() const { +bool TizenFilesystemNode::isReadable() const {  	return _isVirtualDir || _isValid;  } -bool BadaFilesystemNode::isDirectory() const { +bool TizenFilesystemNode::isDirectory() const {  	return _isVirtualDir || (_isValid && _attr.IsDirectory());  } -bool BadaFilesystemNode::isWritable() const { -	bool result = (_isValid && !_isVirtualDir && !_attr.IsDirectory() && !_attr.IsReadOnly()); -	if (_path == PATH_HOME || -			_path == PATH_HOME_EXT || -			_path == PATH_HOME_SHARE || -			_path == PATH_HOME_SHARE2) { -		result = true; +bool TizenFilesystemNode::isWritable() const { +	bool result = (_isValid && !_attr.IsReadOnly()); +	if (_unicodePath == App::GetInstance()->GetAppResourcePath()) { +		result = false;  	}  	return result;  } -AbstractFSNode *BadaFilesystemNode::getChild(const Common::String &n) const { +AbstractFSNode *TizenFilesystemNode::getChild(const Common::String &n) const {  	AppAssert(!_path.empty());  	AppAssert(isDirectory()); -	return new BadaFilesystemNode(_path, n); +	return new TizenFilesystemNode(_path, n);  } -bool BadaFilesystemNode::getChildren(AbstractFSList &myList, -																		 ListMode mode, bool hidden) const { +bool TizenFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {  	AppAssert(isDirectory());  	bool result = false; -	if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly) { -		// present well known BADA file system areas -		if (_path == PATH_ROOT) { -			myList.push_back(new BadaFilesystemNode(PATH_HOME)); -			myList.push_back(new BadaFilesystemNode(PATH_HOME_EXT)); -			myList.push_back(new BadaFilesystemNode(PATH_MEDIA)); -			myList.push_back(new BadaFilesystemNode(PATH_CARD)); -			result = true; // no more entries -		} else if (_path == PATH_CARD) { -			myList.push_back(new BadaFilesystemNode(PATH_CARD_MEDIA)); -			result = true; // no more entries -		} else if (_path == PATH_HOME) { -			// ensure share path is always included -			myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE)); -			myList.push_back(new BadaFilesystemNode(PATH_HOME_SHARE2)); -		} +	if (_isVirtualDir && mode != Common::FSNode::kListFilesOnly && _path == "/") { +		// present well known TIZEN file system areas +		myList.push_back(new TizenFilesystemNode(kData)); +		myList.push_back(new TizenFilesystemNode(kResource)); +		myList.push_back(new TizenFilesystemNode(kSdCard)); +		myList.push_back(new TizenFilesystemNode(kMedia)); +		myList.push_back(new TizenFilesystemNode(kShared));  	}  	if (!result) { @@ -358,7 +364,7 @@ bool BadaFilesystemNode::getChildren(AbstractFSList &myList,  				DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();  				// skip 'invisible' files if necessary -				Osp::Base::String fileName = dirEntry.GetName(); +				Tizen::Base::String fileName = dirEntry.GetName();  				if (fileName[0] == '.' && !hidden) {  					continue; @@ -374,7 +380,7 @@ bool BadaFilesystemNode::getChildren(AbstractFSList &myList,  						(mode == Common::FSNode::kListDirectoriesOnly && !dirEntry.IsDirectory())) {  					continue;  				} -				myList.push_back(new BadaFilesystemNode(_path, fromString(fileName))); +				myList.push_back(new TizenFilesystemNode(_path, ::fromString(fileName)));  			}  		} @@ -392,9 +398,9 @@ bool BadaFilesystemNode::getChildren(AbstractFSList &myList,  	return result;  } -AbstractFSNode *BadaFilesystemNode::getParent() const { -	logEntered(); -	if (_path == PATH_ROOT) { +AbstractFSNode *TizenFilesystemNode::getParent() const { +  logEntered(); +	if (_path == "/") {  		return 0; // The filesystem root has no parent  	} @@ -412,22 +418,22 @@ AbstractFSNode *BadaFilesystemNode::getParent() const {  		// there simply is no parent.  		// TODO: We could also resolve this by assuming that the parent is the  		//			 current working directory, and returning a node referring to that. -		return 0; +		return NULL;  	} -	return new BadaFilesystemNode(Common::String(start, end)); +	return new TizenFilesystemNode(Common::String(start, end));  } -Common::SeekableReadStream *BadaFilesystemNode::createReadStream() { -	Common::SeekableReadStream *result = BadaFileStream::makeFromPath(_unicodePath, false); +Common::SeekableReadStream *TizenFilesystemNode::createReadStream() { +	Common::SeekableReadStream *result = TizenFileStream::makeFromPath(_unicodePath, false);  	if (result != NULL) {  		_isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));  	}  	return result;  } -Common::WriteStream *BadaFilesystemNode::createWriteStream() { -	Common::WriteStream *result = BadaFileStream::makeFromPath(_unicodePath, true); +Common::WriteStream *TizenFilesystemNode::createWriteStream() { +	Common::WriteStream *result = TizenFileStream::makeFromPath(_unicodePath, true);  	if (result != NULL) {  		_isValid = !IsFailed(File::GetAttributes(_unicodePath, _attr));  	} diff --git a/backends/platform/bada/fs.h b/backends/platform/tizen/fs.h index d7d368ac20..0356aaad33 100644 --- a/backends/platform/bada/fs.h +++ b/backends/platform/tizen/fs.h @@ -19,8 +19,8 @@   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   */ -#ifndef BADA_FILESYSTEM_H -#define BADA_FILESYSTEM_H +#ifndef TIZEN_FILESYSTEM_H +#define TIZEN_FILESYSTEM_H  #include <FBaseString.h>  #include <FBaseUtilStringUtil.h> @@ -32,23 +32,40 @@  #include "common/stream.h"  #include "backends/fs/abstract-fs.h" -using namespace Osp::Io; -using namespace Osp::Base; -using namespace Osp::Base::Utility; +using namespace Tizen::Io; +using namespace Tizen::Base; +using namespace Tizen::Base::Utility; + +// +// converts a Tizen (wchar) String into a scummVM (char) string +// +Common::String fromString(const Tizen::Base::String &in); + +// +// Enumerates the possible system paths +// +enum SystemPath { kData, kResource, kSdCard, kMedia, kShared };  /** - * Implementation of the ScummVM file system API based on BADA. + * Implementation of the ScummVM file system API based on TIZEN.   *   * Parts of this class are documented in the base interface class, AbstractFSNode.   */ -class BadaFilesystemNode : public AbstractFSNode { +class TizenFilesystemNode : public AbstractFSNode {  public:  	/** -	 * Creates a BadaFilesystemNode for a given path. +	 * Creates a TizenFilesystemNode for a given path. +	 * +	 * @param path the path the new node should point to. +	 */ +	TizenFilesystemNode(const Common::String &path); + +	/** +	 * Creates a TizenFilesystemNode from the given Tizen internal path  	 *  	 * @param path the path the new node should point to.  	 */ -	BadaFilesystemNode(const Common::String &path); +	TizenFilesystemNode(SystemPath systemPath);  	Common::String getDisplayName() const { return _displayName; }  	Common::String getName() const { return _displayName; } @@ -67,8 +84,7 @@ public:  	Common::WriteStream *createWriteStream();  protected: -	BadaFilesystemNode(const Common::String &root, -										 const Common::String &p); +	TizenFilesystemNode(const Common::String &root, const Common::String &p);  	void init(const Common::String &nodePath);  	Common::String _displayName; diff --git a/backends/platform/bada/graphics.cpp b/backends/platform/tizen/graphics.cpp index bd65c597c6..bf255cd264 100644 --- a/backends/platform/bada/graphics.cpp +++ b/backends/platform/tizen/graphics.cpp @@ -22,29 +22,40 @@  #include "graphics/fontman.h" -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/system.h" -#include "backends/platform/bada/graphics.h" +#include "backends/platform/tizen/form.h" +#include "backends/platform/tizen/system.h" +#include "backends/platform/tizen/graphics.h"  // -// BadaGraphicsManager +// TizenGraphicsManager  // -BadaGraphicsManager::BadaGraphicsManager(BadaAppForm *appForm) : +TizenGraphicsManager::TizenGraphicsManager(TizenAppForm *appForm) :  	_appForm(appForm),  	_eglDisplay(EGL_DEFAULT_DISPLAY),  	_eglSurface(EGL_NO_SURFACE), -	_eglConfig(0), +	_eglConfig(NULL),  	_eglContext(EGL_NO_CONTEXT),  	_initState(true) {  	assert(appForm != NULL);  	_videoMode.fullscreen = true;  } -const Graphics::Font *BadaGraphicsManager::getFontOSD() { +TizenGraphicsManager::~TizenGraphicsManager() { +	logEntered(); + +	if (_eglDisplay != EGL_NO_DISPLAY) { +		eglMakeCurrent(_eglDisplay, NULL, NULL, NULL); +		if (_eglContext != EGL_NO_CONTEXT) { +			eglDestroyContext(_eglDisplay, _eglContext); +		} +	} +} + +const Graphics::Font *TizenGraphicsManager::getFontOSD() {  	return FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);  } -bool BadaGraphicsManager::moveMouse(int16 &x, int16 &y) { +bool TizenGraphicsManager::moveMouse(int16 &x, int16 &y) {  	int16 currentX = _cursorState.x;  	int16 currentY = _cursorState.y; @@ -62,7 +73,7 @@ bool BadaGraphicsManager::moveMouse(int16 &x, int16 &y) {  	return (currentX != x || currentY != y);  } -Common::List<Graphics::PixelFormat> BadaGraphicsManager::getSupportedFormats() const { +Common::List<Graphics::PixelFormat> TizenGraphicsManager::getSupportedFormats() const {  	logEntered();  	Common::List<Graphics::PixelFormat> res; @@ -73,33 +84,37 @@ Common::List<Graphics::PixelFormat> BadaGraphicsManager::getSupportedFormats() c  	return res;  } -bool BadaGraphicsManager::hasFeature(OSystem::Feature f) { +bool TizenGraphicsManager::hasFeature(OSystem::Feature f) {  	bool result = (f == OSystem::kFeatureFullscreenMode || -								 f == OSystem::kFeatureVirtualKeyboard || -								 OpenGLGraphicsManager::hasFeature(f)); +			f == OSystem::kFeatureVirtualKeyboard || +			OpenGLGraphicsManager::hasFeature(f));  	return result;  } -void BadaGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { -	OpenGLGraphicsManager::setFeatureState(f, enable); +void TizenGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { +	if (f == OSystem::kFeatureVirtualKeyboard && enable) { +		_appForm->showKeypad(); +	} else { +		OpenGLGraphicsManager::setFeatureState(f, enable); +	}  } -void BadaGraphicsManager::setReady() { +void TizenGraphicsManager::setReady() {  	_initState = false;  } -void BadaGraphicsManager::updateScreen() { +void TizenGraphicsManager::updateScreen() {  	if (_transactionMode == kTransactionNone) {  		internUpdateScreen();  	}  } -bool BadaGraphicsManager::loadEgl() { +bool TizenGraphicsManager::loadEgl() {  	logEntered();  	EGLint numConfigs = 1;  	EGLint eglConfigList[] = { -		EGL_RED_SIZE,		5, +		EGL_RED_SIZE,	5,  		EGL_GREEN_SIZE, 6,  		EGL_BLUE_SIZE,	5,  		EGL_ALPHA_SIZE, 0, @@ -132,8 +147,7 @@ bool BadaGraphicsManager::loadEgl() {  		return false;  	} -	if (EGL_FALSE == eglChooseConfig(_eglDisplay, eglConfigList, -																	 &_eglConfig, 1, &numConfigs) || +	if (EGL_FALSE == eglChooseConfig(_eglDisplay, eglConfigList, &_eglConfig, 1, &numConfigs) ||  			EGL_SUCCESS != eglGetError()) {  		systemError("eglChooseConfig() failed");  		return false; @@ -144,15 +158,13 @@ bool BadaGraphicsManager::loadEgl() {  		return false;  	} -	_eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig, -																			(EGLNativeWindowType)_appForm, NULL); +	_eglSurface = eglCreateWindowSurface(_eglDisplay, _eglConfig, (EGLNativeWindowType)_appForm, NULL);  	if (EGL_NO_SURFACE == _eglSurface || EGL_SUCCESS != eglGetError()) {  		systemError("eglCreateWindowSurface() failed. EGL_NO_SURFACE");  		return false;  	} -	_eglContext = eglCreateContext(_eglDisplay, _eglConfig, -																EGL_NO_CONTEXT, eglContextList); +	_eglContext = eglCreateContext(_eglDisplay, _eglConfig, EGL_NO_CONTEXT, eglContextList);  	if (EGL_NO_CONTEXT == _eglContext ||  			EGL_SUCCESS != eglGetError()) {  		systemError("eglCreateContext() failed"); @@ -169,7 +181,7 @@ bool BadaGraphicsManager::loadEgl() {  	return true;  } -bool BadaGraphicsManager::loadGFXMode() { +bool TizenGraphicsManager::loadGFXMode() {  	logEntered();  	if (!loadEgl()) { @@ -181,35 +193,28 @@ bool BadaGraphicsManager::loadGFXMode() {  	_appForm->GetBounds(x, y, width, height);  	_videoMode.overlayWidth = _videoMode.hardwareWidth = width;  	_videoMode.overlayHeight = _videoMode.hardwareHeight = height; -	_videoMode.scaleFactor = 3; // for proportional sized cursor in the launcher +	_videoMode.scaleFactor = 4; // for proportional sized cursor in the launcher  	AppLog("screen size: %dx%d", _videoMode.hardwareWidth, _videoMode.hardwareHeight);  	return OpenGLGraphicsManager::loadGFXMode();  } -void BadaGraphicsManager::loadTextures() { +void TizenGraphicsManager::loadTextures() {  	logEntered(); -  	OpenGLGraphicsManager::loadTextures(); - -	// prevent image skew in some games, see: -	// http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall -	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);  } -void BadaGraphicsManager::internUpdateScreen() { +void TizenGraphicsManager::internUpdateScreen() {  	if (!_initState) {  		OpenGLGraphicsManager::internUpdateScreen();  		eglSwapBuffers(_eglDisplay, _eglSurface); -	} else { -		showSplash();  	}  } -void BadaGraphicsManager::unloadGFXMode() { +void TizenGraphicsManager::unloadGFXMode() {  	logEntered(); -	if (EGL_NO_DISPLAY != _eglDisplay) { +	if (_eglDisplay != EGL_NO_DISPLAY) {  		eglMakeCurrent(_eglDisplay, NULL, NULL, NULL);  		if (_eglContext != EGL_NO_CONTEXT) { @@ -227,35 +232,6 @@ void BadaGraphicsManager::unloadGFXMode() {  	}  	_eglConfig = NULL; -  	OpenGLGraphicsManager::unloadGFXMode();  	logLeaving();  } - -// display a simple splash screen until launcher is ready -void BadaGraphicsManager::showSplash() { -	Canvas canvas; -	canvas.Construct(); -	canvas.SetBackgroundColor(Color::COLOR_BLACK); -	canvas.Clear(); - -	int x = _videoMode.hardwareWidth / 3; -	int y = _videoMode.hardwareHeight / 3; - -	Font *pFont = new Font(); -	pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 55); -	canvas.SetFont(*pFont); -	canvas.SetForegroundColor(Color::COLOR_GREEN); -	canvas.DrawText(Point(x, y), L"ScummVM"); -	delete pFont; - -	pFont = new Font(); -	pFont->Construct(FONT_STYLE_ITALIC | FONT_STYLE_BOLD, 35); -	canvas.SetFont(*pFont); -	canvas.SetForegroundColor(Color::COLOR_WHITE); -	canvas.DrawText(Point(x + 70, y + 50), L"Loading ..."); -	delete pFont; - -	canvas.Show(); - -} diff --git a/backends/platform/bada/graphics.h b/backends/platform/tizen/graphics.h index b2aaca43bc..27e5a6aaeb 100644 --- a/backends/platform/bada/graphics.h +++ b/backends/platform/tizen/graphics.h @@ -20,8 +20,8 @@   *   */ -#ifndef BADA_GRAPHICS_H -#define BADA_GRAPHICS_H +#ifndef TIZEN_GRAPHICS_H +#define TIZEN_GRAPHICS_H  #include <FBase.h>  #include <FGraphics.h> @@ -33,15 +33,16 @@  #include "config.h"  #include "backends/graphics/opengl/opengl-graphics.h"  #include "graphics/font.h" -#include "backends/platform/bada/form.h" +#include "backends/platform/tizen/form.h" -using namespace Osp::Graphics; -using namespace Osp::Graphics::Opengl; -using namespace Osp::App; +using namespace Tizen::Graphics; +using namespace Tizen::Graphics::Opengl; +using namespace Tizen::App; -class BadaGraphicsManager : public OpenGLGraphicsManager { +class TizenGraphicsManager : public OpenGLGraphicsManager {  public: -	BadaGraphicsManager(BadaAppForm *appForm); +	TizenGraphicsManager(TizenAppForm *appForm); +	virtual ~TizenGraphicsManager();  	Common::List<Graphics::PixelFormat> getSupportedFormats() const;  	bool hasFeature(OSystem::Feature f); @@ -61,7 +62,7 @@ private:  	void showSplash();  	bool loadEgl(); -	BadaAppForm *_appForm; +	TizenAppForm *_appForm;  	EGLDisplay _eglDisplay;  	EGLSurface _eglSurface;  	EGLConfig	 _eglConfig; diff --git a/backends/platform/bada/main.cpp b/backends/platform/tizen/main.cpp index 8c40f24dd1..b12cc3adc9 100644 --- a/backends/platform/bada/main.cpp +++ b/backends/platform/tizen/main.cpp @@ -24,44 +24,28 @@  #include <FApp.h>  #include <FSystem.h> -#include "backends/platform/bada/portdefs.h" -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/system.h" -#include "backends/platform/bada/application.h" +#include "backends/platform/tizen/application.h" -using namespace Osp::Base; -using namespace Osp::Base::Collection; - -C_LINKAGE_BEGIN - -_EXPORT_ int OspMain(int argc, char *pArgv[]); +using namespace Tizen::Base; +using namespace Tizen::Base::Collection;  /** - * The entry function of bada application called by the operating system. + * The entry function of tizen application called by the operating system.   */ -int OspMain(int argc, char *pArgv[]) { +extern "C" _EXPORT_ int OspMain(int argc, char *pArgv[]) {  	result r = E_SUCCESS;  	AppLog("Application started."); -	ArrayList *pArgs = new ArrayList(); -	pArgs->Construct(); - +	ArrayList args(SingleObjectDeleter); +	args.Construct();  	for (int i = 0; i < argc; i++) { -		pArgs->Add(*(new String(pArgv[i]))); +		args.Add(new (std::nothrow) String(pArgv[i]));  	} -	r = Osp::App::Application::Execute(BadaScummVM::createInstance, pArgs); -	if (IsFailed(r)) { -		r &= 0x0000FFFF; -	} - -	pArgs->RemoveAll(true); -	delete pArgs; +	r = Tizen::App::UiApp::Execute(TizenScummVM::createInstance, &args); +	TryLog(r == E_SUCCESS, "[%s] Application execution failed", GetErrorMessage(r));  	AppLog("Application finished.");  	return static_cast<int>(r);  } -C_LINKAGE_END - - diff --git a/backends/platform/bada/missing.cpp b/backends/platform/tizen/missing.cpp index 10d45ca4b5..5ac55d0f6c 100644 --- a/backends/platform/bada/missing.cpp +++ b/backends/platform/tizen/missing.cpp @@ -26,7 +26,7 @@  #include <FSystem.h>  #include <FBase.h> -#include "backends/platform/bada/portdefs.h" +#include "backends/platform/tizen/portdefs.h"  #include <stdio.h>  #include <string.h> @@ -48,7 +48,7 @@ void __assert_func(const char *file, int line,  	systemError(buffer);  } -void stderr_fprintf(void*, const char *format, ...) { +void stderr_fprintf(void *, const char *format, ...) {  	va_list ap;  	char buffer[BUF_SIZE]; @@ -59,7 +59,7 @@ void stderr_fprintf(void*, const char *format, ...) {  	AppLog(buffer);  } -void stderr_vfprintf(void*, const char *format, va_list ap) { +void stderr_vfprintf(void *, const char *format, va_list ap) {  	char buffer[BUF_SIZE];  	vsnprintf(buffer, sizeof(buffer), format, ap);  	AppLog(buffer); @@ -79,35 +79,4 @@ int printf(const char *format, ...) {  	return result;  } -int sprintf(char *str, const char *format, ...) { -	va_list ap; -	int result; -	char buffer[BUF_SIZE]; - -	va_start(ap, format); -	result = vsnprintf(buffer, sizeof(buffer), format, ap); -	va_end(ap); - -	strcpy(str, buffer); - -	return result; -} - -char *strdup(const char *strSource) { -	char *buffer; -	int len = strlen(strSource) + 1; -	buffer = (char *)malloc(len); -	if (buffer) { -		memcpy(buffer, strSource, len); -	} -	return buffer; -} - -int vsprintf(char *str, const char *format, va_list ap) { -	char buffer[BUF_SIZE]; -	int result = vsnprintf(buffer, sizeof(buffer), format, ap); -	strcpy(str, buffer); -	return result; -} -  C_LINKAGE_END diff --git a/backends/platform/bada/portdefs.h b/backends/platform/tizen/portdefs.h index 813c5acde3..050ce7d1e0 100644 --- a/backends/platform/bada/portdefs.h +++ b/backends/platform/tizen/portdefs.h @@ -43,6 +43,9 @@   #define C_LINKAGE_END  #endif +// value missing from osp gl headers +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +  C_LINKAGE_BEGIN  // for libFLAC @@ -51,11 +54,11 @@ C_LINKAGE_BEGIN  #define fseeko fseek  #define ftello ftell -// overcome use of fprintf since bada/newlib (1.2) does not +// overcome use of fprintf since newlib (1.2) does not  // support stderr/stdout (undefined reference to `_impure_ptr'). -void stderr_fprintf(void*, const char *format, ...); -void stderr_vfprintf(void*, const char *format, va_list ap); +void stderr_fprintf(void *, const char *format, ...); +void stderr_vfprintf(void *, const char *format, va_list ap);  #undef fprintf  #undef vfprintf @@ -75,10 +78,7 @@ void stderr_vfprintf(void*, const char *format, va_list ap);  #define vfprintf stderr_vfprintf  int printf(const char *format, ...); -int sprintf(char *str, const char *format, ...);  int simple_sscanf(const char *buffer, const char *format, ...); -char *strdup(const char *s1); -int vsprintf(char *str, const char *format, va_list ap);  C_LINKAGE_END diff --git a/backends/platform/bada/sscanf.cpp b/backends/platform/tizen/sscanf.cpp index aa846698f6..aa846698f6 100644 --- a/backends/platform/bada/sscanf.cpp +++ b/backends/platform/tizen/sscanf.cpp diff --git a/backends/platform/bada/system.cpp b/backends/platform/tizen/system.cpp index 3f862c2571..54d92146e5 100644 --- a/backends/platform/bada/system.cpp +++ b/backends/platform/tizen/system.cpp @@ -34,53 +34,53 @@  #include "backends/audiocd/default/default-audiocd.h"  #include "backends/mutex/mutex.h"  #include "backends/fs/fs-factory.h" -#include "backends/timer/bada/timer.h" +#include "backends/timer/tizen/timer.h" -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/system.h" -#include "backends/platform/bada/graphics.h" -#include "backends/platform/bada/audio.h" +#include "backends/platform/tizen/form.h" +#include "backends/platform/tizen/system.h" +#include "backends/platform/tizen/graphics.h" +#include "backends/platform/tizen/audio.h" -using namespace Osp::Base; -using namespace Osp::Base::Runtime; -using namespace Osp::Locales; -using namespace Osp::Ui::Controls; -using namespace Osp::System; +using namespace Tizen::Base; +using namespace Tizen::Base::Runtime; +using namespace Tizen::Locales; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::System; -#define DEFAULT_CONFIG_FILE "/Home/scummvm.ini" -#define RESOURCE_PATH       "/Res" +#define DEFAULT_CONFIG_FILE "scummvm.ini"  #define MUTEX_BUFFER_SIZE 5  // -// BadaFilesystemFactory +// TizenFilesystemFactory  // -class BadaFilesystemFactory : public FilesystemFactory { +class TizenFilesystemFactory : public FilesystemFactory {  	AbstractFSNode *makeRootFileNode() const;  	AbstractFSNode *makeCurrentDirectoryFileNode() const;  	AbstractFSNode *makeFileNodePath(const Common::String &path) const;  }; -AbstractFSNode *BadaFilesystemFactory::makeRootFileNode() const { -	return new BadaFilesystemNode("/"); +AbstractFSNode *TizenFilesystemFactory::makeRootFileNode() const { +	return new TizenFilesystemNode("/");  } -AbstractFSNode *BadaFilesystemFactory::makeCurrentDirectoryFileNode() const { -	return new BadaFilesystemNode("/Home"); +AbstractFSNode *TizenFilesystemFactory::makeCurrentDirectoryFileNode() const { +	return new TizenFilesystemNode("/");  } -AbstractFSNode *BadaFilesystemFactory::makeFileNodePath(const Common::String &path) const { +AbstractFSNode *TizenFilesystemFactory::makeFileNodePath(const Common::String &path) const {  	AppAssert(!path.empty()); -	return new BadaFilesystemNode(path); +	return new TizenFilesystemNode(path);  }  // -// BadaSaveFileManager +// TizenSaveFileManager  // -struct BadaSaveFileManager : public DefaultSaveFileManager { +struct TizenSaveFileManager : public DefaultSaveFileManager {  	bool removeSavefile(const Common::String &filename);  }; -bool BadaSaveFileManager::removeSavefile(const Common::String &filename) { +bool TizenSaveFileManager::removeSavefile(const Common::String &filename) {  	Common::String savePathName = getSavePath();  	checkPath(Common::FSNode(savePathName)); @@ -95,18 +95,18 @@ bool BadaSaveFileManager::removeSavefile(const Common::String &filename) {  	String unicodeFileName;  	StringUtil::Utf8ToString(file.getPath().c_str(), unicodeFileName); -	switch (Osp::Io::File::Remove(unicodeFileName)) { +	switch (Tizen::Io::File::Remove(unicodeFileName)) {  	case E_SUCCESS:  		return true;  	case E_ILLEGAL_ACCESS:  		setError(Common::kWritePermissionDenied, "Search or write permission denied: " + -						 file.getName()); +					file.getName());  		break;  	default:  		setError(Common::kPathDoesNotExist, "removeSavefile: '" + file.getName() + -						 "' does not exist or path is invalid"); +					"' does not exist or path is invalid");  		break;  	} @@ -114,40 +114,40 @@ bool BadaSaveFileManager::removeSavefile(const Common::String &filename) {  }  // -// BadaMutexManager +// TizenMutexManager  // -struct BadaMutexManager : public MutexManager { -	BadaMutexManager(); -	~BadaMutexManager(); +struct TizenMutexManager : public MutexManager { +	TizenMutexManager(); +	~TizenMutexManager();  	OSystem::MutexRef createMutex();  	void lockMutex(OSystem::MutexRef mutex);  	void unlockMutex(OSystem::MutexRef mutex);  	void deleteMutex(OSystem::MutexRef mutex);  private: -	Mutex *buffer[MUTEX_BUFFER_SIZE]; +	Mutex *_buffer[MUTEX_BUFFER_SIZE];  }; -BadaMutexManager::BadaMutexManager() { +TizenMutexManager::TizenMutexManager() {  	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { -		buffer[i] = NULL; +		_buffer[i] = NULL;  	}  } -BadaMutexManager::~BadaMutexManager() { +TizenMutexManager::~TizenMutexManager() {  	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { -		if (buffer[i] != NULL) { -			delete buffer[i]; +		if (_buffer[i] != NULL) { +			delete _buffer[i];  		}  	}  } -OSystem::MutexRef BadaMutexManager::createMutex() { +OSystem::MutexRef TizenMutexManager::createMutex() {  	Mutex *mutex = new Mutex();  	mutex->Create();  	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { -		if (buffer[i] == NULL) { -			buffer[i] = mutex; +		if (_buffer[i] == NULL) { +			_buffer[i] = mutex;  			break;  		}  	} @@ -155,22 +155,22 @@ OSystem::MutexRef BadaMutexManager::createMutex() {  	return (OSystem::MutexRef) mutex;  } -void BadaMutexManager::lockMutex(OSystem::MutexRef mutex) { +void TizenMutexManager::lockMutex(OSystem::MutexRef mutex) {  	Mutex *m = (Mutex *)mutex;  	m->Acquire();  } -void BadaMutexManager::unlockMutex(OSystem::MutexRef mutex) { +void TizenMutexManager::unlockMutex(OSystem::MutexRef mutex) {  	Mutex *m = (Mutex *)mutex;  	m->Release();  } -void BadaMutexManager::deleteMutex(OSystem::MutexRef mutex) { +void TizenMutexManager::deleteMutex(OSystem::MutexRef mutex) {  	Mutex *m = (Mutex *)mutex;  	for (int i = 0; i < MUTEX_BUFFER_SIZE; i++) { -		if (buffer[i] == m) { -			buffer[i] = NULL; +		if (_buffer[i] == m) { +			_buffer[i] = NULL;  		}  	} @@ -178,84 +178,101 @@ void BadaMutexManager::deleteMutex(OSystem::MutexRef mutex) {  }  // -// BadaEventManager +// TizenEventManager  // -struct BadaEventManager : public DefaultEventManager { -	BadaEventManager(Common::EventSource *boss); +struct TizenEventManager : public DefaultEventManager { +	TizenEventManager(Common::EventSource *boss);  	void init();  	int shouldQuit() const;  }; -BadaEventManager::BadaEventManager(Common::EventSource *boss) : +TizenEventManager::TizenEventManager(Common::EventSource *boss) :  	DefaultEventManager(boss) {  } -void BadaEventManager::init() { +void TizenEventManager::init() {  	DefaultEventManager::init();  	// theme and vkbd should have now loaded - clear the splash screen -	BadaSystem *system = (BadaSystem *)g_system; -	BadaGraphicsManager *graphics = system->getGraphics(); +	TizenSystem *system = (TizenSystem *)g_system; +	TizenGraphicsManager *graphics = system->getGraphics();  	if (graphics) {  		graphics->setReady(); -		graphics->updateScreen();  	}  } -int BadaEventManager::shouldQuit() const { -	BadaSystem *system = (BadaSystem *)g_system; +int TizenEventManager::shouldQuit() const { +	TizenSystem *system = (TizenSystem *)g_system;  	return DefaultEventManager::shouldQuit() || system->isClosing();  }  // -// BadaSystem +// TizenAppFrame - avoid drawing the misplaced UiTheme at startup  // -BadaSystem::BadaSystem(BadaAppForm *appForm) : +struct TizenAppFrame : Frame { +	result OnDraw(void) { +		logEntered(); +		TizenAppForm *form = (TizenAppForm *)GetCurrentForm(); +		if (form->isStarting()) { +			Canvas *canvas = GetCanvasN(); +			canvas->SetBackgroundColor(Color::GetColor(COLOR_ID_BLACK)); +			canvas->Clear(); +			delete canvas; +		} +		return E_SUCCESS; +	} +}; + +// +// TizenSystem +// +TizenSystem::TizenSystem(TizenAppForm *appForm) :  	_appForm(appForm),  	_audioThread(0),  	_epoch(0) {  } -result BadaSystem::Construct(void) { +result TizenSystem::Construct(void) {  	logEntered(); -	_fsFactory = new BadaFilesystemFactory(); +	_fsFactory = new TizenFilesystemFactory();  	if (!_fsFactory) {  		return E_OUT_OF_MEMORY;  	} +	_resourcePath = fromString(App::GetInstance()->GetAppResourcePath());  	return E_SUCCESS;  } -BadaSystem::~BadaSystem() { +TizenSystem::~TizenSystem() {  	logEntered();  } -result BadaSystem::initModules() { +result TizenSystem::initModules() {  	logEntered(); -	_mutexManager = new BadaMutexManager(); +	_mutexManager = new TizenMutexManager();  	if (!_mutexManager) {  		return E_OUT_OF_MEMORY;  	} -	_timerManager = new BadaTimerManager(); +	_timerManager = new TizenTimerManager();  	if (!_timerManager) {  		return E_OUT_OF_MEMORY;  	} -	_savefileManager = new BadaSaveFileManager(); +	_savefileManager = new TizenSaveFileManager();  	if (!_savefileManager) {  		return E_OUT_OF_MEMORY;  	} -	_graphicsManager = (GraphicsManager *)new BadaGraphicsManager(_appForm); +	_graphicsManager = (GraphicsManager *)new TizenGraphicsManager(_appForm);  	if (!_graphicsManager) {  		return E_OUT_OF_MEMORY;  	}  	// depends on _graphicsManager when ENABLE_VKEYBD enabled -	_eventManager = new BadaEventManager(this); +	_eventManager = new TizenEventManager(this);  	if (!_eventManager) {  		return E_OUT_OF_MEMORY;  	} @@ -284,19 +301,21 @@ result BadaSystem::initModules() {  	return E_SUCCESS;  } -void BadaSystem::initBackend() { +void TizenSystem::initBackend() {  	logEntered(); +	Common::String dataPath = fromString(App::GetInstance()->GetAppDataPath()); +  	// use the mobile device theme -	ConfMan.set("gui_theme", "/Res/scummmobile"); +	ConfMan.set("gui_theme", _resourcePath + "scummmodern"); -	// allow bada virtual keypad pack to be found -	ConfMan.set("vkeybdpath", "/Res/vkeybd_bada"); +	// allow tizen virtual keypad pack to be found +	ConfMan.set("vkeybdpath", _resourcePath + "vkeybd_bada");  	ConfMan.set("vkeybd_pack_name", "vkeybd_bada");  	// set default save path to writable area  	if (!ConfMan.hasKey("savepath")) { -		ConfMan.set("savepath", "/Home/Share"); +		ConfMan.set("savepath", dataPath);  	}  	// default to no auto-save @@ -314,85 +333,93 @@ void BadaSystem::initBackend() {  		AppLog("initModules failed");  	} else {  		OSystem::initBackend(); -	} -	// replace kBigGUIFont using the large font from the scummmobile theme -	Common::File fontFile; -	Common::String fileName = "/Res/scummmobile/helvB14-iso-8859-1.fcc"; -	BadaFilesystemNode file(fileName); -	if (file.exists()) { -		Common::SeekableReadStream *stream = file.createReadStream(); -		if (stream) { -			if (fontFile.open(stream, fileName)) { +		// replace kBigGUIFont for the vkbd and on-screen messages +		Common::String fontCacheFile = dataPath + "helvR24.fcc"; +		TizenFilesystemNode file(fontCacheFile); +		if (!file.exists()) { +			Common::String bdfFile = _resourcePath + "fonts/helvR24.bdf"; +			TizenFilesystemNode file(bdfFile); +			if (file.exists()) { +				Common::SeekableReadStream *stream = file.createReadStream(); +				Common::File fontFile; +				if (stream && fontFile.open(stream, bdfFile)) { +					Graphics::BdfFont *font = Graphics::BdfFont::loadFont(fontFile); +					Graphics::BdfFont::cacheFontData(*font, fontCacheFile); +					FontMan.setFont(Graphics::FontManager::kBigGUIFont, font); +				} +			} +		} else { +			Common::SeekableReadStream *stream = file.createReadStream(); +			Common::File fontFile; +			if (stream && fontFile.open(stream, fontCacheFile)) {  				Graphics::BdfFont *font = Graphics::BdfFont::loadFromCache(fontFile);  				if (font) { -					// use this font for the vkbd and on-screen messages  					FontMan.setFont(Graphics::FontManager::kBigGUIFont, font);  				}  			}  		}  	} -  	logLeaving();  } -void BadaSystem::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { +void TizenSystem::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {  	// allow translations.dat and game .DAT files to be found -	s.addDirectory(RESOURCE_PATH, RESOURCE_PATH, priority); +	s.addDirectory(_resourcePath, _resourcePath, priority);  } -void BadaSystem::destroyBackend() { +void TizenSystem::destroyBackend() {  	closeAudio();  	delete _graphicsManager; -	_graphicsManager = 0; +	_graphicsManager = NULL;  	delete _savefileManager; -	_savefileManager = 0; +	_savefileManager = NULL;  	delete _fsFactory; -	_fsFactory = 0; +	_fsFactory = NULL;  	delete _mixer; -	_mixer = 0; +	_mixer = NULL;  	delete _audiocdManager; -	_audiocdManager = 0; +	_audiocdManager = NULL;  	delete _timerManager; -	_timerManager = 0; +	_timerManager = NULL;  	delete _eventManager; -	_eventManager = 0; +	_eventManager = NULL;  	delete _mutexManager; -	_mutexManager = 0; +	_mutexManager = NULL;  } -bool BadaSystem::pollEvent(Common::Event &event) { +bool TizenSystem::pollEvent(Common::Event &event) {  	return _appForm->pollEvent(event);  } -uint32 BadaSystem::getMillis() { +uint32 TizenSystem::getMillis(bool skipRecord) {  	long long result, ticks = 0;  	SystemTime::GetTicks(ticks);  	result = ticks - _epoch;  	return result;  } -void BadaSystem::delayMillis(uint msecs) { +void TizenSystem::delayMillis(uint msecs) {  	if (!_appForm->isClosing()) {  		Thread::Sleep(msecs);  	}  } -void BadaSystem::updateScreen() { +void TizenSystem::updateScreen() {  	if (_graphicsManager != NULL) {  		_graphicsManager->updateScreen();  	}  } -void BadaSystem::getTimeAndDate(TimeDate &td) const { +void TizenSystem::getTimeAndDate(TimeDate &td) const {  	DateTime currentTime;  	if (E_SUCCESS == SystemTime::GetCurrentTime(WALL_TIME, currentTime)) { @@ -410,11 +437,11 @@ void BadaSystem::getTimeAndDate(TimeDate &td) const {  	}  } -void BadaSystem::fatalError() { +void TizenSystem::fatalError() {  	systemError("ScummVM: Fatal internal error.");  } -void BadaSystem::exitSystem() { +void TizenSystem::exitSystem() {  	if (_appForm) {  		closeAudio();  		closeGraphics(); @@ -422,7 +449,7 @@ void BadaSystem::exitSystem() {  	}  } -void BadaSystem::logMessage(LogMessageType::Type type, const char *message) { +void TizenSystem::logMessage(LogMessageType::Type type, const char *message) {  	if (type == LogMessageType::kError) {  		systemError(message);  	} else { @@ -430,69 +457,70 @@ void BadaSystem::logMessage(LogMessageType::Type type, const char *message) {  	}  } -Common::SeekableReadStream *BadaSystem::createConfigReadStream() { -	BadaFilesystemNode file(DEFAULT_CONFIG_FILE); +Common::SeekableReadStream *TizenSystem::createConfigReadStream() { +	TizenFilesystemNode file(fromString(App::GetInstance()->GetAppDataPath()) + DEFAULT_CONFIG_FILE);  	return file.createReadStream();  } -Common::WriteStream *BadaSystem::createConfigWriteStream() { -	BadaFilesystemNode file(DEFAULT_CONFIG_FILE); +Common::WriteStream *TizenSystem::createConfigWriteStream() { +	TizenFilesystemNode file(fromString(App::GetInstance()->GetAppDataPath()) + DEFAULT_CONFIG_FILE);  	return file.createWriteStream();  } -void BadaSystem::closeAudio() { +void TizenSystem::closeAudio() {  	if (_audioThread) { -		_audioThread->Stop(); +		_audioThread->Quit();  		_audioThread->Join();  		delete _audioThread; -		_audioThread = 0; +		_audioThread = NULL;  	}  } -void BadaSystem::closeGraphics() { +void TizenSystem::closeGraphics() {  	if (_graphicsManager) {  		delete _graphicsManager; -		_graphicsManager = 0; +		_graphicsManager = NULL;  	}  } -void BadaSystem::setMute(bool on) { +void TizenSystem::setMute(bool on) {  	// only change mute after eventManager init() has completed  	if (_audioThread) { -		BadaGraphicsManager *graphics = getGraphics(); +		TizenGraphicsManager *graphics = getGraphics();  		if (graphics && graphics->isReady()) {  			_audioThread->setMute(on);  		}  	}  } -int BadaSystem::setVolume(bool up, bool minMax) { -	int level = -1; -	if (_audioThread) { -		level = _audioThread->setVolume(up, minMax); -	} -	return level; -} -  //  // create the ScummVM system  // -BadaAppForm *systemStart(Osp::App::Application *app) { +TizenAppForm *systemStart(Tizen::App::Application *app) {  	logEntered(); -	BadaAppForm *appForm = new BadaAppForm(); +	Frame *appFrame = new (std::nothrow) TizenAppFrame(); +	if (!appFrame || appFrame->Construct() == E_FAILURE) { +		AppLog("Failed to create appFrame"); +		return NULL; +	} +	app->AddFrame(*appFrame); + +	TizenAppForm *appForm = new TizenAppForm();  	if (!appForm) {  		AppLog("Failed to create appForm");  		return NULL;  	}  	if (E_SUCCESS != appForm->Construct() || -			E_SUCCESS != app->GetAppFrame()->GetFrame()->AddControl(*appForm)) { +		E_SUCCESS != appFrame->AddControl(*appForm)) {  		delete appForm;  		AppLog("Failed to construct appForm");  		return NULL;  	} +	appFrame->SetCurrentForm(appForm); +	logLeaving();  	return appForm;  } @@ -502,13 +530,18 @@ BadaAppForm *systemStart(Osp::App::Application *app) {  void systemError(const char *message) {  	AppLog("Fatal system error: %s", message); -	ArrayList *args = new ArrayList(); -	args->Construct(); -	args->Add(*(new String(message))); -	Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR, args); +	if (strspn(message, "Config file buggy:") > 0) { +		Tizen::Io::File::Remove(DEFAULT_CONFIG_FILE); +		Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR_CONFIG, NULL); +	} else { +		ArrayList *args = new ArrayList(); +		args->Construct(); +		args->Add(*(new String(message))); +		Application::GetInstance()->SendUserEvent(USER_MESSAGE_EXIT_ERR, args); +	}  	if (g_system) { -		BadaSystem *system = (BadaSystem *)g_system; +		TizenSystem *system = (TizenSystem *)g_system;  		system->exitSystem();  	}  } diff --git a/backends/platform/bada/system.h b/backends/platform/tizen/system.h index c28686cb3d..b38940cc95 100644 --- a/backends/platform/bada/system.h +++ b/backends/platform/tizen/system.h @@ -20,8 +20,8 @@   *   */ -#ifndef BADA_SYSTEM_H -#define BADA_SYSTEM_H +#ifndef TIZEN_SYSTEM_H +#define TIZEN_SYSTEM_H  #include <FApp.h>  #include <FGraphics.h> @@ -34,47 +34,46 @@  #include "common/scummsys.h"  #include "backends/modular-backend.h" -#include "backends/platform/bada/fs.h" -#include "backends/platform/bada/form.h" -#include "backends/platform/bada/audio.h" -#include "backends/platform/bada/graphics.h" +#include "backends/platform/tizen/fs.h" +#include "backends/platform/tizen/form.h" +#include "backends/platform/tizen/audio.h" +#include "backends/platform/tizen/graphics.h"  #if defined(_DEBUG) -#define logEntered() AppLog("%s entered (%s %d)", \ -														 __FUNCTION__, __FILE__, __LINE__); -#define logLeaving() AppLog("%s leaving (%s %d)", \ -														 __FUNCTION__, __FILE__, __LINE__); +#define logEntered() AppLog("%s entered (%s %d)", __FUNCTION__, __FILE__, __LINE__); +#define logLeaving() AppLog("%s leaving (%s %d)", __FUNCTION__, __FILE__, __LINE__);  #else  #define logEntered()  #define logLeaving()  #endif -BadaAppForm *systemStart(Osp::App::Application *app); +TizenAppForm *systemStart(Tizen::App::Application *app);  void systemError(const char *message); -#define USER_MESSAGE_EXIT			1000 -#define USER_MESSAGE_EXIT_ERR 1001 +#define USER_MESSAGE_EXIT		1000 +#define USER_MESSAGE_EXIT_ERR		1001 +#define USER_MESSAGE_EXIT_ERR_CONFIG 1002  // -// BadaSystem +// TizenSystem  // -class BadaSystem : public ModularBackend, -									 Common::EventSource { +class TizenSystem : +	public ModularBackend, +	Common::EventSource {  public: -	BadaSystem(BadaAppForm *appForm); -	~BadaSystem(); +	TizenSystem(TizenAppForm *appForm); +	~TizenSystem();  	result Construct();  	void closeAudio();  	void closeGraphics();  	void destroyBackend();  	void setMute(bool on); -	int setVolume(bool up, bool minMax);  	void exitSystem();  	bool isClosing() { return _appForm->isClosing(); } -	BadaGraphicsManager *getGraphics() { -		return (BadaGraphicsManager *)_graphicsManager; +	TizenGraphicsManager *getGraphics() { +		return (TizenGraphicsManager *)_graphicsManager;  	}  private: @@ -83,7 +82,7 @@ private:  	void updateScreen();  	bool pollEvent(Common::Event &event); -	uint32 getMillis(); +	uint32 getMillis(bool skipRecord = false);  	void delayMillis(uint msecs);  	void getTimeAndDate(TimeDate &t) const;  	void fatalError(); @@ -94,9 +93,10 @@ private:  	Common::SeekableReadStream *createConfigReadStream();  	Common::WriteStream *createConfigWriteStream(); -	BadaAppForm *_appForm; +	TizenAppForm *_appForm;  	AudioThread *_audioThread;  	long long _epoch; +	Common::String _resourcePath;  };  #endif diff --git a/backends/platform/tizen/tizen.mk b/backends/platform/tizen/tizen.mk new file mode 100644 index 0000000000..d8925b62dc --- /dev/null +++ b/backends/platform/tizen/tizen.mk @@ -0,0 +1,7 @@ +# port files built under eclipse + +MODULE := backends/platform/tizen + +$(EXECUTABLE): $(OBJS) +	rm -f $@ +	arm-linux-gnueabi-ar Tru $@ $(OBJS) diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp index 22a6495f8f..9d3a7473e3 100644 --- a/backends/platform/wii/osystem.cpp +++ b/backends/platform/wii/osystem.cpp @@ -203,7 +203,7 @@ bool OSystem_Wii::getFeatureState(Feature f) {  	}  } -uint32 OSystem_Wii::getMillis() { +uint32 OSystem_Wii::getMillis(bool skipRecord) {  	return ticks_to_millisecs(diff_ticks(_startup_time, gettime()));  } diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index 5d6998d0b6..287c70ad6b 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -193,7 +193,7 @@ public:  								const Graphics::PixelFormat *format);  	virtual bool pollEvent(Common::Event &event); -	virtual uint32 getMillis(); +	virtual uint32 getMillis(bool skipRecord = false);  	virtual void delayMillis(uint msecs);  	virtual MutexRef createMutex(); diff --git a/backends/saves/recorder/recorder-saves.cpp b/backends/saves/recorder/recorder-saves.cpp new file mode 100644 index 0000000000..49b4672913 --- /dev/null +++ b/backends/saves/recorder/recorder-saves.cpp @@ -0,0 +1,35 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "backends/saves/recorder/recorder-saves.h" +#include "gui/EventRecorder.h" +#include "common/savefile.h" + +Common::InSaveFile *RecorderSaveFileManager::openForLoading(const Common::String &filename) { +	Common::InSaveFile *result = g_eventRec.processSaveStream(filename); +	return result; +} + +Common::StringArray RecorderSaveFileManager::listSaveFiles(const Common::String &pattern) { +	return g_eventRec.listSaveFiles(pattern); +} + diff --git a/backends/saves/recorder/recorder-saves.h b/backends/saves/recorder/recorder-saves.h new file mode 100644 index 0000000000..692aeca329 --- /dev/null +++ b/backends/saves/recorder/recorder-saves.h @@ -0,0 +1,36 @@ +/* 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. + * + * 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 2 + * of the License, or (at your option) any later version. + + * 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 + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKEND_SAVES_RECORDER_H +#define BACKEND_SAVES_RECORDER_H + +#include "backends/saves/default/default-saves.h" + +/** + * Provides a savefile manager implementation for event recorder. + */ +class RecorderSaveFileManager : public DefaultSaveFileManager { +	virtual Common::StringArray listSaveFiles(const Common::String &pattern); +	virtual Common::InSaveFile *openForLoading(const Common::String &filename); +}; + +#endif diff --git a/backends/timer/default/default-timer.cpp b/backends/timer/default/default-timer.cpp index 9f56d58b12..ce93320f3d 100644 --- a/backends/timer/default/default-timer.cpp +++ b/backends/timer/default/default-timer.cpp @@ -80,7 +80,7 @@ DefaultTimerManager::~DefaultTimerManager() {  void DefaultTimerManager::handler() {  	Common::StackLock lock(_mutex); -	const uint32 curTime = g_system->getMillis(); +	uint32 curTime = g_system->getMillis(true);  	// Repeat as long as there is a TimerSlot that is scheduled to fire.  	TimerSlot *slot = _head->next; diff --git a/backends/timer/bada/timer.cpp b/backends/timer/tizen/timer.cpp index e41ecd4864..fa226ce747 100644 --- a/backends/timer/bada/timer.cpp +++ b/backends/timer/tizen/timer.cpp @@ -20,15 +20,14 @@   *   */ -#if defined(BADA) +#if defined(TIZEN) -#include "backends/timer/bada/timer.h" +#include "backends/timer/tizen/timer.h"  // -// TimerSlot +// TimerSlot - an event driven thread  // -TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback, -										 uint32 interval, void *refCon) : +TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback, uint32 interval, void *refCon) :  	_timer(0),  	_callback(callback),  	_interval(interval), @@ -36,16 +35,17 @@ TimerSlot::TimerSlot(Common::TimerManager::TimerProc callback,  }  TimerSlot::~TimerSlot() { +	delete _timer;  }  bool TimerSlot::OnStart() { -	_timer = new Osp::Base::Runtime::Timer(); +	_timer = new Tizen::Base::Runtime::Timer();  	if (!_timer || IsFailed(_timer->Construct(*this))) {  		AppLog("Failed to create timer");  		return false;  	} -	if (IsFailed(_timer->Start(_interval))) { +	if (IsFailed(_timer->StartAsRepeatable(_interval))) {  		AppLog("failed to start timer");  		return false;  	} @@ -65,28 +65,28 @@ void TimerSlot::OnStop() {  void TimerSlot::OnTimerExpired(Timer &timer) {  	_callback(_refCon); -	timer.Start(_interval);  }  // -// BadaTimerManager +// TizenTimerManager  // -BadaTimerManager::BadaTimerManager() { +TizenTimerManager::TizenTimerManager() {  } -BadaTimerManager::~BadaTimerManager() { -	for (Common::List<TimerSlot>::iterator slot = _timers.begin(); -			 slot != _timers.end(); ) { -		slot->Stop(); -		slot = _timers.erase(slot); +TizenTimerManager::~TizenTimerManager() { +	for (Common::List<TimerSlot *>::iterator it = _timers.begin(); it != _timers.end(); ) { +		TimerSlot *slot = (*it); +		slot->Quit(); +		slot->Join(); +		delete slot; +		it = _timers.erase(it);  	}  } -bool BadaTimerManager::installTimerProc(TimerProc proc, int32 interval, void *refCon, -																				const Common::String &id) { +bool TizenTimerManager::installTimerProc(TimerProc proc, int32 interval, void *refCon, const Common::String &id) {  	TimerSlot *slot = new TimerSlot(proc, interval / 1000, refCon); -	if (IsFailed(slot->Construct(THREAD_TYPE_EVENT_DRIVEN))) { +	if (IsFailed(slot->Construct())) {  		AppLog("Failed to create timer thread");  		delete slot;  		return false; @@ -98,16 +98,18 @@ bool BadaTimerManager::installTimerProc(TimerProc proc, int32 interval, void *re  		return false;  	} -	_timers.push_back(*slot); +	_timers.push_back(slot);  	return true;  } -void BadaTimerManager::removeTimerProc(TimerProc proc) { -	for (Common::List<TimerSlot>::iterator slot = _timers.begin(); -			 slot != _timers.end(); ++slot) { +void TizenTimerManager::removeTimerProc(TimerProc proc) { +	for (Common::List<TimerSlot *>::iterator it = _timers.begin(); it != _timers.end(); ++it) { +		TimerSlot *slot = (*it);  		if (slot->_callback == proc) { -			slot->Stop(); -			slot = _timers.erase(slot); +			slot->Quit(); +			slot->Join(); +			delete slot; +			it = _timers.erase(it);  		}  	}  } diff --git a/backends/timer/bada/timer.h b/backends/timer/tizen/timer.h index 826064d7ff..4b2596401a 100644 --- a/backends/timer/bada/timer.h +++ b/backends/timer/tizen/timer.h @@ -20,20 +20,18 @@   *   */ -#ifndef BADA_TIMER_H -#define BADA_TIMER_H +#ifndef TIZEN_TIMER_H +#define TIZEN_TIMER_H  #include <FBase.h>  #include "common/timer.h"  #include "common/list.h" -using namespace Osp::Base::Runtime; +using namespace Tizen::Base::Runtime; -struct TimerSlot: public ITimerEventListener, public Thread { -	TimerSlot(Common::TimerManager::TimerProc callback, -						uint32 interval, -						void *refCon); +struct TimerSlot: public EventDrivenThread, public ITimerEventListener { +	TimerSlot(Common::TimerManager::TimerProc callback, uint32 interval, void *refCon);  	~TimerSlot();  	bool OnStart(void); @@ -46,17 +44,16 @@ struct TimerSlot: public ITimerEventListener, public Thread {  	void *_refCon;  }; -class BadaTimerManager : public Common::TimerManager { +class TizenTimerManager : public Common::TimerManager {  public: -	BadaTimerManager(); -	~BadaTimerManager(); +	TizenTimerManager(); +	~TizenTimerManager(); -	bool installTimerProc(TimerProc proc, int32 interval, void *refCon, -												const Common::String &id); +	bool installTimerProc(TimerProc proc, int32 interval, void *refCon, const Common::String &id);  	void removeTimerProc(TimerProc proc);  private: -	Common::List<TimerSlot> _timers; +	Common::List<TimerSlot *> _timers;  };  #endif | 
