From d7b786ea41838b6c3fe950fe01c97b97daca711d Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Mon, 2 Oct 2006 04:46:50 +0000 Subject: Implemented "iconify window" opcode. This, of course, needs support in the backend to work, and so far it's only done in the SDL backend. See the new kFeatureIconifyWindow flag. (This is patch #1568775.) svn-id: r24060 --- backends/platform/sdl/sdl.cpp | 7 ++++++- common/system.cpp | 1 - common/system.h | 7 ++++++- engines/agos/agos.h | 2 +- engines/agos/items.cpp | 8 ++++++-- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index ca00349020..5f76d21c9d 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -227,7 +227,8 @@ bool OSystem_SDL::hasFeature(Feature f) { (f == kFeatureFullscreenMode) || (f == kFeatureAspectRatioCorrection) || (f == kFeatureAutoComputeDirtyRects) || - (f == kFeatureCursorHasPalette); + (f == kFeatureCursorHasPalette) || + (f == kFeatureIconifyWindow); } void OSystem_SDL::setFeatureState(Feature f, bool enable) { @@ -244,6 +245,10 @@ void OSystem_SDL::setFeatureState(Feature f, bool enable) { else _modeFlags &= ~DF_WANT_RECT_OPTIM; break; + case kFeatureIconifyWindow: + if (enable) + SDL_WM_IconifyWindow(); + break; default: break; } diff --git a/common/system.cpp b/common/system.cpp index 22bbb9aba4..614dff6199 100644 --- a/common/system.cpp +++ b/common/system.cpp @@ -83,4 +83,3 @@ void OSystem::stopCD() { void OSystem::updateCD() { } - diff --git a/common/system.h b/common/system.h index 91ea05b928..9508520cc1 100644 --- a/common/system.h +++ b/common/system.h @@ -128,7 +128,12 @@ public: * This should only be set if it offers at least 3-4 bits of accuracy, * as opposed to a single alpha bit. */ - kFeatureOverlaySupportsAlpha + kFeatureOverlaySupportsAlpha, + + /** + * Set to true to iconify the window. + */ + kFeatureIconifyWindow }; /** diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 8f0aba39c2..1f11c69690 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1088,7 +1088,7 @@ public: void o3_b3NotZero(); // Opcodes, Puzzle Pack only - void o4_opcode30(); + void o4_iconifyWindow(); void o4_restoreOopsPosition(); void o4_checkTiles(); void o4_loadMouseImage(); diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 95925669c6..5953abd45e 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -435,7 +435,7 @@ void AGOSEngine::setupPuzzleOpcodes(OpcodeProc *op) { setupAGOSOpcodes(op); op[23] = &AGOSEngine::o3_chance; - op[30] = &AGOSEngine::o4_opcode30; + op[30] = &AGOSEngine::o4_iconifyWindow; op[32] = &AGOSEngine::o4_restoreOopsPosition; op[37] = &AGOSEngine::o4_checkTiles; op[38] = &AGOSEngine::o4_loadMouseImage; @@ -2440,9 +2440,13 @@ void AGOSEngine::o3_b3NotZero() { // Puzzle Pack Opcodes // ----------------------------------------------------------------------- -void AGOSEngine::o4_opcode30() { +void AGOSEngine::o4_iconifyWindow() { // 30 getNextItemPtr(); + if (_clockStopped != 0) + _gameTime += time(NULL) - _clockStopped; + _clockStopped = 0; + _system->setFeatureState(OSystem::kFeatureIconifyWindow, true); } void AGOSEngine::o4_restoreOopsPosition() { -- cgit v1.2.3