[Scummvm-git-logs] scummvm master -> 33d07334eba07d0f17fb3e209f67146b188882c7
djsrv
dservilla at gmail.com
Mon Jul 27 16:53:19 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
33d07334eb DIRECTOR: Replace isFocusable with respondsToEvent
Commit: 33d07334eba07d0f17fb3e209f67146b188882c7
https://github.com/scummvm/scummvm/commit/33d07334eba07d0f17fb3e209f67146b188882c7
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-27T12:51:51-04:00
Commit Message:
DIRECTOR: Replace isFocusable with respondsToEvent
Changed paths:
engines/director/events.cpp
engines/director/score.cpp
engines/director/score.h
engines/director/sprite.cpp
engines/director/sprite.h
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 39bbf6b344..b1cfa2404f 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -143,7 +143,7 @@ bool Movie::processEvent(Common::Event &event) {
// D3 doesn't have both mouse up and down.
// But we still want to know if the mouse is down for press effects.
- spriteId = sc->getSpriteIDFromPos(pos, true);
+ spriteId = sc->getSpriteIDFromPos(pos, kEventMouseDown);
_currentMouseDownSpriteId = spriteId;
_currentClickOnSpriteId = spriteId;
@@ -167,7 +167,7 @@ bool Movie::processEvent(Common::Event &event) {
case Common::EVENT_LBUTTONUP:
pos = _stage->getMousePos();
- spriteId = sc->getSpriteIDFromPos(pos, true);
+ spriteId = sc->getSpriteIDFromPos(pos, kEventMouseUp);
if (!sc->getChannelById(_currentMouseDownSpriteId)->getBbox().contains(pos))
_currentMouseDownSpriteId = 0;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 8cf2f29424..559d985746 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -511,12 +511,12 @@ void Score::screenShot() {
newSurface->free();
}
-uint16 Score::getSpriteIDFromPos(Common::Point pos, bool firstActive) {
+uint16 Score::getSpriteIDFromPos(Common::Point pos, LEvent respondsToEvent) {
int unfocusableSprite = 0;
for (int i = _channels.size() - 1; i >= 0; i--)
if (_channels[i]->isMouseIn(pos)) {
- if (!firstActive || _channels[i]->_sprite->isFocusable())
+ if (respondsToEvent == kEventNone || _channels[i]->_sprite->respondsToEvent(respondsToEvent))
return i;
else if (unfocusableSprite == 0)
unfocusableSprite = i;
diff --git a/engines/director/score.h b/engines/director/score.h
index 95dd6d2a84..6e0ada35d9 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -95,7 +95,7 @@ public:
int getCurrentLabelNumber();
int getNextLabelNumber(int referenceFrame);
- uint16 getSpriteIDFromPos(Common::Point pos, bool firstActive = false);
+ uint16 getSpriteIDFromPos(Common::Point pos, LEvent respondsToEvent = kEventNone);
bool checkSpriteIntersection(uint16 spriteId, Common::Point pos);
Common::List<Channel *> getSpriteIntersections(const Common::Rect &r);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index a9e187b763..0636fa0f0f 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -29,6 +29,7 @@
#include "director/score.h"
#include "director/sprite.h"
#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-object.h"
namespace Director {
@@ -97,15 +98,28 @@ void Sprite::updateCast() {
_cast->setEditable(_editable);
}
-bool Sprite::isFocusable() {
- if (_moveable || _puppet || _scriptId)
+bool Sprite::respondsToEvent(LEvent event) {
+ if (_moveable && (event == kEventMouseDown || event == kEventMouseUp))
+ return true;
+
+ ScriptContext *spriteScript = _movie->getScriptContext(kScoreScript, _scriptId);
+ if (spriteScript) {
+ if (((event == kEventMouseDown && _immediate) || (event == kEventMouseUp && !_immediate))
+ && spriteScript->_eventHandlers.contains(kEventGeneric))
+ return true;
+ if (spriteScript->_eventHandlers.contains(event))
+ return true;
+ }
+
+ ScriptContext *castScript = _movie->getScriptContext(kCastScript, _castId);
+ if (castScript && castScript->_eventHandlers.contains(event))
return true;
return false;
}
bool Sprite::shouldHilite() {
- if (isFocusable() && ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte)))
+ if ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte))
if (g_director->getVersion() < 4 && !_moveable)
if (_movie->getScriptContext(kScoreScript, _scriptId) ||
_movie->getScriptContext(kCastScript, _castId))
diff --git a/engines/director/sprite.h b/engines/director/sprite.h
index eb2fc3cab9..dbeaf2cc67 100644
--- a/engines/director/sprite.h
+++ b/engines/director/sprite.h
@@ -67,7 +67,7 @@ public:
void updateCast();
- bool isFocusable();
+ bool respondsToEvent(LEvent event);
bool shouldHilite();
uint16 getPattern();
More information about the Scummvm-git-logs
mailing list