diff options
author | Filippos Karapetis | 2009-10-21 19:19:03 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-10-21 19:19:03 +0000 |
commit | b105d690e398b47063b332245a783190f2cc84de (patch) | |
tree | 304b3c0fc5c2538430f949f77ec8075d3f7894ee /engines/sci/gui | |
parent | 95cefe311c29a5ea81ac17db25ecf142bd8352de (diff) | |
download | scummvm-rg350-b105d690e398b47063b332245a783190f2cc84de.tar.gz scummvm-rg350-b105d690e398b47063b332245a783190f2cc84de.tar.bz2 scummvm-rg350-b105d690e398b47063b332245a783190f2cc84de.zip |
- Removed kShow() and the related code it uses - it's a debugging function, and we have the same functionality in the debug console
- Merged the view signal flags from kernel.h and gui_animate.h, and named them appropriately. Also, updated the notes next to them, cause some were incorrectly marked as not used in our engine
- Added a note about a hack used in the old GUI in the view signal flags
- Moved the control state flags inside gui_helpers.h
svn-id: r45310
Diffstat (limited to 'engines/sci/gui')
-rw-r--r-- | engines/sci/gui/gui.cpp | 2 | ||||
-rw-r--r-- | engines/sci/gui/gui_animate.cpp | 72 | ||||
-rw-r--r-- | engines/sci/gui/gui_animate.h | 37 | ||||
-rw-r--r-- | engines/sci/gui/gui_gfx.cpp | 2 | ||||
-rw-r--r-- | engines/sci/gui/gui_helpers.h | 8 |
5 files changed, 66 insertions, 55 deletions
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp index f93901b5fe..1ad267f05d 100644 --- a/engines/sci/gui/gui.cpp +++ b/engines/sci/gui/gui.cpp @@ -598,7 +598,7 @@ bool SciGui::canBeHere(reg_t curObject, reg_t listReference) { signal = GET_SEL32V(segMan, curObject, signal); controlMask = GET_SEL32V(segMan, curObject, illegalBits); result = (_gfx->onControl(SCI_SCREEN_MASK_CONTROL, checkRect) & controlMask) ? false : true; - if ((result) && (signal & (SCI_ANIMATE_SIGNAL_IGNOREACTOR | SCI_ANIMATE_SIGNAL_REMOVEVIEW)) == 0) { + if ((result) && (signal & (kSignalIgnoreActor | kSignalRemoveView)) == 0) { List *list = _s->_segMan->lookupList(listReference); if (!list) error("kCanBeHere called with non-list as parameter"); diff --git a/engines/sci/gui/gui_animate.cpp b/engines/sci/gui/gui_animate.cpp index cab34a2a21..23af6f5796 100644 --- a/engines/sci/gui/gui_animate.cpp +++ b/engines/sci/gui/gui_animate.cpp @@ -75,7 +75,7 @@ bool SciGuiAnimate::invoke(List *list, int argc, reg_t *argv) { return false; signal = GET_SEL32V(segMan, curObject, signal); - if (!(signal & SCI_ANIMATE_SIGNAL_FROZEN)) { + if (!(signal & kSignalFrozen)) { // Call .doit method of that object invoke_selector(_s, curObject, _s->_kernel->_selectorCache.doit, kContinueOnInvalidSelector, argv, argc, __FILE__, __LINE__, 0); // Lookup node again, since the nodetable it was in may have been reallocated @@ -194,22 +194,22 @@ void SciGuiAnimate::fill(byte &old_picNotValid) { signal = listEntry->signal; // Calculate current priority according to y-coordinate - if (!(signal & SCI_ANIMATE_SIGNAL_FIXEDPRIORITY)) { + if (!(signal & kSignalFixedPriority)) { listEntry->priority = _gfx->CoordinateToPriority(listEntry->y); PUT_SEL32V(segMan, curObject, priority, listEntry->priority); } - if (signal & SCI_ANIMATE_SIGNAL_NOUPDATE) { - if (signal & (SCI_ANIMATE_SIGNAL_FORCEUPDATE | SCI_ANIMATE_SIGNAL_VIEWUPDATED) - || (signal & SCI_ANIMATE_SIGNAL_HIDDEN && !(signal & SCI_ANIMATE_SIGNAL_REMOVEVIEW)) - || (!(signal & SCI_ANIMATE_SIGNAL_HIDDEN) && signal & SCI_ANIMATE_SIGNAL_REMOVEVIEW) - || (signal & SCI_ANIMATE_SIGNAL_ALWAYSUPDATE)) + if (signal & kSignalNoUpdate) { + if (signal & (kSignalForceUpdate | kSignalViewUpdated) + || (signal & kSignalHidden && !(signal & kSignalRemoveView)) + || (!(signal & kSignalHidden) && signal & kSignalRemoveView) + || (signal & kSignalAlwaysUpdate)) old_picNotValid++; - signal &= 0xFFFF ^ SCI_ANIMATE_SIGNAL_STOPUPDATE; + signal &= 0xFFFF ^ kSignalStopUpdate; } else { - if (signal & SCI_ANIMATE_SIGNAL_STOPUPDATE || signal & SCI_ANIMATE_SIGNAL_ALWAYSUPDATE) + if (signal & kSignalStopUpdate || signal & kSignalAlwaysUpdate) old_picNotValid++; - signal &= 0xFFFF ^ SCI_ANIMATE_SIGNAL_FORCEUPDATE; + signal &= 0xFFFF ^ kSignalForceUpdate; } listEntry->signal = signal; @@ -237,8 +237,8 @@ void SciGuiAnimate::update() { curObject = listEntry->object; signal = listEntry->signal; - if (signal & SCI_ANIMATE_SIGNAL_NOUPDATE) { - if (!(signal & SCI_ANIMATE_SIGNAL_REMOVEVIEW)) { + if (signal & kSignalNoUpdate) { + if (!(signal & kSignalRemoveView)) { bitsHandle = GET_SEL32(segMan, curObject, underBits); if (_screen->_picNotValid != 1) { _gfx->BitsRestore(bitsHandle); @@ -248,10 +248,10 @@ void SciGuiAnimate::update() { } PUT_SEL32V(segMan, curObject, underBits, 0); } - signal &= 0xFFFF ^ SCI_ANIMATE_SIGNAL_FORCEUPDATE; - signal &= signal & SCI_ANIMATE_SIGNAL_VIEWUPDATED ? 0xFFFF ^ (SCI_ANIMATE_SIGNAL_VIEWUPDATED | SCI_ANIMATE_SIGNAL_NOUPDATE) : 0xFFFF; - } else if (signal & SCI_ANIMATE_SIGNAL_STOPUPDATE) { - signal = (signal & (0xFFFF ^ SCI_ANIMATE_SIGNAL_STOPUPDATE)) | SCI_ANIMATE_SIGNAL_NOUPDATE; + signal &= 0xFFFF ^ kSignalForceUpdate; + signal &= signal & kSignalViewUpdated ? 0xFFFF ^ (kSignalViewUpdated | kSignalNoUpdate) : 0xFFFF; + } else if (signal & kSignalStopUpdate) { + signal = (signal & (0xFFFF ^ kSignalStopUpdate)) | kSignalNoUpdate; } listEntry->signal = signal; listIterator--; @@ -264,13 +264,13 @@ void SciGuiAnimate::update() { curObject = listEntry->object; signal = listEntry->signal; - if (signal & SCI_ANIMATE_SIGNAL_ALWAYSUPDATE) { + if (signal & kSignalAlwaysUpdate) { // draw corresponding cel _gfx->drawCel(listEntry->viewId, listEntry->loopNo, listEntry->celNo, listEntry->celRect, listEntry->priority, listEntry->paletteNo); listEntry->showBitsFlag = true; - signal &= 0xFFFF ^ (SCI_ANIMATE_SIGNAL_STOPUPDATE | SCI_ANIMATE_SIGNAL_VIEWUPDATED | SCI_ANIMATE_SIGNAL_NOUPDATE | SCI_ANIMATE_SIGNAL_FORCEUPDATE); - if ((signal & SCI_ANIMATE_SIGNAL_IGNOREACTOR) == 0) { + signal &= 0xFFFF ^ (kSignalStopUpdate | kSignalViewUpdated | kSignalNoUpdate | kSignalForceUpdate); + if ((signal & kSignalIgnoreActor) == 0) { rect = listEntry->celRect; rect.top = CLIP<int16>(_gfx->PriorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1); _gfx->FillRect(rect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15); @@ -287,12 +287,12 @@ void SciGuiAnimate::update() { curObject = listEntry->object; signal = listEntry->signal; - if (signal & SCI_ANIMATE_SIGNAL_NOUPDATE) { - if (signal & SCI_ANIMATE_SIGNAL_HIDDEN) { - signal |= SCI_ANIMATE_SIGNAL_REMOVEVIEW; + if (signal & kSignalNoUpdate) { + if (signal & kSignalHidden) { + signal |= kSignalRemoveView; } else { - signal &= 0xFFFF ^ SCI_ANIMATE_SIGNAL_REMOVEVIEW; - if (signal & SCI_ANIMATE_SIGNAL_IGNOREACTOR) + signal &= 0xFFFF ^ kSignalRemoveView; + if (signal & kSignalIgnoreActor) bitsHandle = _gfx->BitsSave(listEntry->celRect, SCI_SCREEN_MASK_VISUAL|SCI_SCREEN_MASK_PRIORITY); else bitsHandle = _gfx->BitsSave(listEntry->celRect, SCI_SCREEN_MASK_ALL); @@ -310,12 +310,12 @@ void SciGuiAnimate::update() { curObject = listEntry->object; signal = listEntry->signal; - if (signal & SCI_ANIMATE_SIGNAL_NOUPDATE && !(signal & SCI_ANIMATE_SIGNAL_HIDDEN)) { + if (signal & kSignalNoUpdate && !(signal & kSignalHidden)) { // draw corresponding cel _gfx->drawCel(listEntry->viewId, listEntry->loopNo, listEntry->celNo, listEntry->celRect, listEntry->priority, listEntry->paletteNo); listEntry->showBitsFlag = true; - if ((signal & SCI_ANIMATE_SIGNAL_IGNOREACTOR) == 0) { + if ((signal & kSignalIgnoreActor) == 0) { rect = listEntry->celRect; rect.top = CLIP<int16>(_gfx->PriorityToCoordinate(listEntry->priority) - 1, rect.top, rect.bottom - 1); _gfx->FillRect(rect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15); @@ -340,7 +340,7 @@ void SciGuiAnimate::drawCels() { curObject = listEntry->object; signal = listEntry->signal; - if (!(signal & (SCI_ANIMATE_SIGNAL_NOUPDATE | SCI_ANIMATE_SIGNAL_HIDDEN | SCI_ANIMATE_SIGNAL_ALWAYSUPDATE))) { + if (!(signal & (kSignalNoUpdate | kSignalHidden | kSignalAlwaysUpdate))) { // Save background bitsHandle = _gfx->BitsSave(listEntry->celRect, SCI_SCREEN_MASK_ALL); PUT_SEL32(segMan, curObject, underBits, bitsHandle); @@ -349,8 +349,8 @@ void SciGuiAnimate::drawCels() { _gfx->drawCel(listEntry->viewId, listEntry->loopNo, listEntry->celNo, listEntry->celRect, listEntry->priority, listEntry->paletteNo); listEntry->showBitsFlag = true; - if (signal & SCI_ANIMATE_SIGNAL_REMOVEVIEW) { - signal &= 0xFFFF ^ SCI_ANIMATE_SIGNAL_REMOVEVIEW; + if (signal & kSignalRemoveView) { + signal &= 0xFFFF ^ kSignalRemoveView; } listEntry->signal = signal; @@ -385,8 +385,8 @@ void SciGuiAnimate::updateScreen(byte oldPicNotValid) { curObject = listEntry->object; signal = listEntry->signal; - if (listEntry->showBitsFlag || !(signal & (SCI_ANIMATE_SIGNAL_REMOVEVIEW | SCI_ANIMATE_SIGNAL_NOUPDATE) || - (!(signal & SCI_ANIMATE_SIGNAL_REMOVEVIEW) && (signal & SCI_ANIMATE_SIGNAL_NOUPDATE) && oldPicNotValid))) { + if (listEntry->showBitsFlag || !(signal & (kSignalRemoveView | kSignalNoUpdate) || + (!(signal & kSignalRemoveView) && (signal & kSignalNoUpdate) && oldPicNotValid))) { lsRect.left = GET_SEL32V(segMan, curObject, lsLeft); lsRect.top = GET_SEL32V(segMan, curObject, lsTop); lsRect.right = GET_SEL32V(segMan, curObject, lsRight); @@ -408,8 +408,8 @@ void SciGuiAnimate::updateScreen(byte oldPicNotValid) { PUT_SEL32V(segMan, curObject, lsBottom, workerRect.bottom); _gfx->BitsShow(workerRect); - if (signal & SCI_ANIMATE_SIGNAL_HIDDEN) { - listEntry->signal |= SCI_ANIMATE_SIGNAL_REMOVEVIEW; + if (signal & kSignalHidden) { + listEntry->signal |= kSignalRemoveView; } } @@ -448,12 +448,12 @@ void SciGuiAnimate::restoreAndDelete(int argc, reg_t *argv) { // We read out signal here again, this is not by accident but to ensure that we got an up-to-date signal signal = GET_SEL32V(segMan, curObject, signal); - if ((signal & (SCI_ANIMATE_SIGNAL_NOUPDATE | SCI_ANIMATE_SIGNAL_REMOVEVIEW)) == 0) { + if ((signal & (kSignalNoUpdate | kSignalRemoveView)) == 0) { _gfx->BitsRestore(GET_SEL32(segMan, curObject, underBits)); PUT_SEL32V(segMan, curObject, underBits, 0); } - if (signal & SCI_ANIMATE_SIGNAL_DISPOSEME) { + if (signal & kSignalDisposeMe) { // Call .delete_ method of that object invoke_selector(_s, curObject, _s->_kernel->_selectorCache.delete_, kContinueOnInvalidSelector, argv, argc, __FILE__, __LINE__, 0); } @@ -489,7 +489,7 @@ void SciGuiAnimate::addToPicDrawCels(List *list) { // draw corresponding cel _gfx->drawCel(listEntry->viewId, listEntry->loopNo, listEntry->celNo, listEntry->celRect, listEntry->priority, listEntry->paletteNo); - if ((listEntry->signal & SCI_ANIMATE_SIGNAL_IGNOREACTOR) == 0) { + if ((listEntry->signal & kSignalIgnoreActor) == 0) { listEntry->celRect.top = CLIP<int16>(_gfx->PriorityToCoordinate(listEntry->priority) - 1, listEntry->celRect.top, listEntry->celRect.bottom - 1); _gfx->FillRect(listEntry->celRect, SCI_SCREEN_MASK_CONTROL, 0, 0, 15); } diff --git a/engines/sci/gui/gui_animate.h b/engines/sci/gui/gui_animate.h index 19bee34597..92230b7ebc 100644 --- a/engines/sci/gui/gui_animate.h +++ b/engines/sci/gui/gui_animate.h @@ -30,23 +30,26 @@ namespace Sci { -enum { - SCI_ANIMATE_SIGNAL_STOPUPDATE = 0x0001, - SCI_ANIMATE_SIGNAL_VIEWUPDATED = 0x0002, - SCI_ANIMATE_SIGNAL_NOUPDATE = 0x0004, - SCI_ANIMATE_SIGNAL_HIDDEN = 0x0008, - SCI_ANIMATE_SIGNAL_FIXEDPRIORITY = 0x0010, - SCI_ANIMATE_SIGNAL_ALWAYSUPDATE = 0x0020, - SCI_ANIMATE_SIGNAL_FORCEUPDATE = 0x0040, - SCI_ANIMATE_SIGNAL_REMOVEVIEW = 0x0080, - SCI_ANIMATE_SIGNAL_FROZEN = 0x0100, - SCI_ANIMATE_SIGNAL_EXTRAACTOR = 0x0200, // unused by us, defines all actors that may be included into the background if speed to slow - SCI_ANIMATE_SIGNAL_BLOCKED = 0x0400, // unused by us, defines an actor that tried to move but was blocked - SCI_ANIMATE_SIGNAL_FIXEDLOOP = 0x0800, // unused by us - SCI_ANIMATE_SIGNAL_FIXEDCEL = 0x1000, // unused by us - SCI_ANIMATE_SIGNAL_IGNOREHORIZON = 0x2000, // unused by us, defines actor that can ignore horizon - SCI_ANIMATE_SIGNAL_IGNOREACTOR = 0x4000, - SCI_ANIMATE_SIGNAL_DISPOSEME = 0x8000 +// Flags for the signal selector +enum ViewSignals { + kSignalStopUpdate = 0x0001, + kSignalViewUpdated = 0x0002, + kSignalNoUpdate = 0x0004, + kSignalHidden = 0x0008, + kSignalFixedPriority = 0x0010, + kSignalAlwaysUpdate = 0x0020, + kSignalForceUpdate = 0x0040, + kSignalRemoveView = 0x0080, + kSignalFrozen = 0x0100, + kSignalExtraActor = 0x0200, // unused by us, defines all actors that may be included into the background if speed to slow + kSignalHitObstacle = 0x0400, // used in the actor movement code by kDoBresen() + kSignalDoesntTurn = 0x0800, // used by _k_dirloop() to determine if an actor can turn or not + kSignalNoCycler = 0x1000, // unused by us + kSignalIgnoreHorizon = 0x2000, // unused by us, defines actor that can ignore horizon + kSignalIgnoreActor = 0x4000, + kSignalDisposeMe = 0x8000, + + kSignalStopUpdHack = 0x20000000 // View has been stop-updated (again???) - a hack used by the old GUI code only, for dynamic views }; class SciGuiGfx; diff --git a/engines/sci/gui/gui_gfx.cpp b/engines/sci/gui/gui_gfx.cpp index 7e5e6147e7..f2de19f9b1 100644 --- a/engines/sci/gui/gui_gfx.cpp +++ b/engines/sci/gui/gui_gfx.cpp @@ -1012,7 +1012,7 @@ bool SciGuiGfx::CanBeHereCheckRectList(reg_t checkObject, Common::Rect checkRect curObject = curNode->value; if (curObject != checkObject) { signal = GET_SEL32V(segMan, curObject, signal); - if ((signal & (SCI_ANIMATE_SIGNAL_IGNOREACTOR | SCI_ANIMATE_SIGNAL_REMOVEVIEW | SCI_ANIMATE_SIGNAL_NOUPDATE)) == 0) { + if ((signal & (kSignalIgnoreActor | kSignalRemoveView | kSignalNoUpdate)) == 0) { curRect.left = GET_SEL32V(segMan, curObject, brLeft); curRect.top = GET_SEL32V(segMan, curObject, brTop); curRect.right = GET_SEL32V(segMan, curObject, brRight); diff --git a/engines/sci/gui/gui_helpers.h b/engines/sci/gui/gui_helpers.h index 65ba397f23..efc9548dcb 100644 --- a/engines/sci/gui/gui_helpers.h +++ b/engines/sci/gui/gui_helpers.h @@ -116,6 +116,14 @@ struct GuiPalSchedule { uint32 schedule; }; +/** Button and frame control flags. */ +enum controlStateFlags { + kControlStateEnabled = 0x0001, ///< 0001 - enabled buttons (used by the interpreter) + kControlStateDisabled = 0x0004, ///< 0010 - grayed out buttons (used by the interpreter) + kControlStateFramed = 0x0008, ///< 1000 - widgets surrounded by a frame (used by the interpreter) + kControlStateDitherFramed = 0x1000 ///< 0001 0000 0000 0000 - widgets surrounded by a dithered frame (used in kgraphics) +}; + } // End of namespace Sci #endif |