aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/gui
diff options
context:
space:
mode:
authorFilippos Karapetis2009-10-21 19:19:03 +0000
committerFilippos Karapetis2009-10-21 19:19:03 +0000
commitb105d690e398b47063b332245a783190f2cc84de (patch)
tree304b3c0fc5c2538430f949f77ec8075d3f7894ee /engines/sci/gui
parent95cefe311c29a5ea81ac17db25ecf142bd8352de (diff)
downloadscummvm-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.cpp2
-rw-r--r--engines/sci/gui/gui_animate.cpp72
-rw-r--r--engines/sci/gui/gui_animate.h37
-rw-r--r--engines/sci/gui/gui_gfx.cpp2
-rw-r--r--engines/sci/gui/gui_helpers.h8
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