[Scummvm-cvs-logs] SF.net SVN: scummvm:[53741] scummvm/trunk/backends/platform/psp
bluddy at users.sourceforge.net
bluddy at users.sourceforge.net
Sat Oct 23 21:01:34 CEST 2010
Revision: 53741
http://scummvm.svn.sourceforge.net/scummvm/?rev=53741&view=rev
Author: bluddy
Date: 2010-10-23 19:01:34 +0000 (Sat, 23 Oct 2010)
Log Message:
-----------
PSP: Fix up imageViewer to pause game
The only real way to pause the game is to take over the event loop, which is a little sad... Also fixed a possible crash when loading an image that was to big, by only rendering when we have _init set.
Modified Paths:
--------------
scummvm/trunk/backends/platform/psp/image_viewer.cpp
scummvm/trunk/backends/platform/psp/image_viewer.h
scummvm/trunk/backends/platform/psp/osys_psp.cpp
Modified: scummvm/trunk/backends/platform/psp/image_viewer.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/image_viewer.cpp 2010-10-23 16:01:40 UTC (rev 53740)
+++ scummvm/trunk/backends/platform/psp/image_viewer.cpp 2010-10-23 19:01:34 UTC (rev 53741)
@@ -27,13 +27,16 @@
#include "common/str.h"
#include "common/stream.h"
#include "common/archive.h"
+#include "common/events.h"
#include "common/ptr.h"
#include "gui/message.h"
#include "engines/engine.h"
#include "backends/platform/psp/input.h"
+#include "backends/platform/psp/display_manager.h"
#include "backends/platform/psp/display_client.h"
#include "backends/platform/psp/image_viewer.h"
#include "backends/platform/psp/png_loader.h"
+#include "backends/platform/psp/thread.h"
static const char *imageName = "psp_image";
#define PSP_SCREEN_HEIGHT 272
@@ -112,13 +115,13 @@
}
void ImageViewer::unload() {
+ _init = false;
delete _buffer;
delete _palette;
delete _renderer;
_buffer = 0;
_palette = 0;
_renderer = 0;
- _init = false;
}
void ImageViewer::resetOnEngineDone() {
@@ -127,32 +130,47 @@
void ImageViewer::setVisible(bool visible) {
DEBUG_ENTER_FUNC();
+
if (_visible == visible)
return;
-
- if (!g_engine) // we can only run the image viewer when there's an engine
- return; // otherwise we won't know where to open the image
// from here on, we're making the loader visible
- if (visible && load(_imageNum ? _imageNum : 1)) { // load the 1st image or the current
- g_engine->pauseEngine(true);
+ if (visible && g_engine) { // we can only run the image viewer when there's an engine
+ g_engine->pauseEngine(true);
+
+ load(_imageNum ? _imageNum : 1); // load the 1st image or the current
+ }
+
+ if (visible && _init) { // we managed to load
_visible = true;
- setDirty();
setViewerButtons(true);
GUI::TimedMessageDialog dialog("Image Viewer", 1000);
dialog.runModal();
- } else { // all other cases
+
+ runLoop(); // only listen to viewer events
+ } else { // we were asked to make invisible or failed to load
_visible = false;
- setDirty();
unload();
setViewerButtons(false);
- if (g_engine->isPaused())
+ if (g_engine && g_engine->isPaused())
g_engine->pauseEngine(false);
}
+ setDirty();
}
+// This is the only way we can truly pause the games
+// Sad but true.
+void ImageViewer::runLoop() {
+ while (_visible) {
+ Common::Event event;
+ PspThread::delayMillis(30);
+ _inputHandler->getAllInputs(event);
+ _displayManager->renderAll();
+ }
+}
+
void ImageViewer::setViewerButtons(bool active) {
_inputHandler->setImageViewerMode(active);
}
@@ -191,27 +209,29 @@
}
void ImageViewer::render() {
- assert(_buffer);
- assert(_renderer);
+ if (_init) {
+ assert(_buffer);
+ assert(_renderer);
- // move the image slightly. Note that we count on the renderer's timing
- switch (_movement) {
- case EVENT_MOVE_LEFT:
- moveImageX(-2);
- break;
- case EVENT_MOVE_UP:
- moveImageY(-2);
- break;
- case EVENT_MOVE_RIGHT:
- moveImageX(2);
- break;
- case EVENT_MOVE_DOWN:
- moveImageY(2);
- break;
- default:
- break;
- }
- _renderer->render();
+ // move the image slightly. Note that we count on the renderer's timing
+ switch (_movement) {
+ case EVENT_MOVE_LEFT:
+ moveImageX(-2);
+ break;
+ case EVENT_MOVE_UP:
+ moveImageY(-2);
+ break;
+ case EVENT_MOVE_RIGHT:
+ moveImageX(2);
+ break;
+ case EVENT_MOVE_DOWN:
+ moveImageY(2);
+ break;
+ default:
+ break;
+ }
+ _renderer->render();
+ }
}
void ImageViewer::modifyZoom(bool up) {
Modified: scummvm/trunk/backends/platform/psp/image_viewer.h
===================================================================
--- scummvm/trunk/backends/platform/psp/image_viewer.h 2010-10-23 16:01:40 UTC (rev 53740)
+++ scummvm/trunk/backends/platform/psp/image_viewer.h 2010-10-23 19:01:34 UTC (rev 53741)
@@ -59,6 +59,7 @@
Event _movement;
InputHandler *_inputHandler;
+ DisplayManager *_displayManager;
void setFullScreenImageParams();
void loadNextImage();
@@ -69,6 +70,7 @@
void moveImageY(int val);
bool load(int imageNum);
void unload();
+ void runLoop(); // to get total pausing we have to do our own loop
void setZoom(float value);
void setOffsetParams();
@@ -80,14 +82,15 @@
ImageViewer() : _buffer(0), _palette(0), _visible(false),
_dirty(false), _init(false), _imageNum(0),
_zoomFactor(0.0f), _visibleHeight(0.0f), _visibleWidth(0.0f),
- _centerX(0.0f), _centerY(0.0f), _movement(EVENT_MOVE_STOP) {}
+ _centerX(0.0f), _centerY(0.0f), _movement(EVENT_MOVE_STOP),
+ _inputHandler(0), _displayManager(0) {}
~ImageViewer() { unload(); } // deallocate images
bool load();
void render();
bool isVisible() { return _visible; }
bool isDirty() { return _dirty; }
void setDirty() { _dirty = true; }
- void setClean() { if (_movement == EVENT_MOVE_STOP) // otherwise we want to keep rendering
+ void setClean() { if (!_visible) // otherwise we want to keep rendering
_dirty = false;
}
void resetOnEngineDone();
@@ -96,6 +99,7 @@
// pointer setters
void setInputHandler(InputHandler *inputHandler) { _inputHandler = inputHandler; }
+ void setDisplayManager(DisplayManager *displayManager) { _displayManager = displayManager; }
};
#endif /* PSP_IMAGE_VIEWER_H */
\ No newline at end of file
Modified: scummvm/trunk/backends/platform/psp/osys_psp.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/osys_psp.cpp 2010-10-23 16:01:40 UTC (rev 53740)
+++ scummvm/trunk/backends/platform/psp/osys_psp.cpp 2010-10-23 19:01:34 UTC (rev 53741)
@@ -87,6 +87,7 @@
// Set pointers for image viewer
_imageViewer.setInputHandler(&_inputHandler);
+ _imageViewer.setDisplayManager(&_displayManager);
_savefile = new PSPSaveFileManager;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list