diff options
| -rw-r--r-- | engines/titanic/pet_control/pet_gfx_element.h | 6 | ||||
| -rw-r--r-- | engines/titanic/pet_control/pet_starfield.cpp | 23 | ||||
| -rw-r--r-- | engines/titanic/pet_control/pet_starfield.h | 9 | 
3 files changed, 25 insertions, 13 deletions
| diff --git a/engines/titanic/pet_control/pet_gfx_element.h b/engines/titanic/pet_control/pet_gfx_element.h index 91d9b9ccb2..3d2a06db97 100644 --- a/engines/titanic/pet_control/pet_gfx_element.h +++ b/engines/titanic/pet_control/pet_gfx_element.h @@ -67,6 +67,12 @@ public:  	 * Get the game object associated with this item  	 */  	virtual CGameObject *getObject() const; + +	/** +	 * Gets the explicit bounds set for the graphic element, +	 * ignoring any associated sub-object bounds +	 */ +	const Rect &getRawBounds() const { return _bounds; }  };  } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_starfield.cpp b/engines/titanic/pet_control/pet_starfield.cpp index bbe892464f..7476c6eda2 100644 --- a/engines/titanic/pet_control/pet_starfield.cpp +++ b/engines/titanic/pet_control/pet_starfield.cpp @@ -94,7 +94,7 @@ bool CPetStarfield::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {  			_petControl->displayMessage(SUPPLY_GALACTIC_REFERENCE);  		}  	} else if (!_btnSetDest.MouseButtonDownMsg(msg->_mousePos)) { -		return elementsMouseDown(msg); +		return markersMouseDown(msg);  	}  	return true; @@ -216,33 +216,36 @@ void CPetStarfield::makePetDirty() {  	_petControl->makeDirty();  } -bool CPetStarfield::elementsMouseDown(CMouseButtonDownMsg *msg) { -	if (elementMouseButton(0, msg, _leds[0].getBounds())) +bool CPetStarfield::markersMouseDown(CMouseButtonDownMsg *msg) { +	if (markerMouseDown(0, msg, _leds[0].getRawBounds()))  		return true; -	if (elementMouseButton(1, msg, _leds[2].getBounds())) +	if (markerMouseDown(1, msg, _leds[2].getRawBounds()))  		return true; -	if (elementMouseButton(2, msg, _leds[4].getBounds())) +	if (markerMouseDown(2, msg, _leds[4].getRawBounds()))  		return true;  	return false;  } -bool CPetStarfield::elementMouseButton(int index, CMouseButtonDownMsg *msg, const Rect &rect) { +bool CPetStarfield::markerMouseDown(int index, CMouseButtonDownMsg *msg, const Rect &rect) {  	if (!rect.contains(msg->_mousePos))  		return false;  	switch (_markerStates[index]) { -	case 1: +	case MS_FLICKERING: +		// Marker is flickering, so lock it in  		if (_petControl->_remoteTarget) {  			CPETStarFieldLockMsg lockMsg(1);  			lockMsg.execute(_petControl->_remoteTarget);  		}  		break; -	case 2: -		if (index < 2 && _markerStates[index] >= 2) { +	case MS_HIGHLIGHTED: +		// Marker is locked in. If the most recently locked marker +		// is clicked on, allow it to be unlocked +		if (index == 2 || _markerStates[index + 1] != MS_HIGHLIGHTED) {  			if (_petControl->_remoteTarget) { -				CPETStarFieldLockMsg lockMsg(1); +				CPETStarFieldLockMsg lockMsg(0);  				lockMsg.execute(_petControl->_remoteTarget);  			}  		} diff --git a/engines/titanic/pet_control/pet_starfield.h b/engines/titanic/pet_control/pet_starfield.h index deefae74c6..a0aa1c762a 100644 --- a/engines/titanic/pet_control/pet_starfield.h +++ b/engines/titanic/pet_control/pet_starfield.h @@ -56,11 +56,14 @@ private:  	void drawButton(MarkerState state, int index, CScreenManager *screenManager);  	/** -	 * Mouse down handling for Nav elements +	 * Handles clicking on any of the three locked star LED markers  	 */ -	bool elementsMouseDown(CMouseButtonDownMsg *msg); +	bool markersMouseDown(CMouseButtonDownMsg *msg); -	bool elementMouseButton(int index, CMouseButtonDownMsg *msg, const Rect &rect); +	/** +	 * Handles clicking on a specific locked star LED marker +	 */ +	bool markerMouseDown(int index, CMouseButtonDownMsg *msg, const Rect &rect);  public:  	CPetStarfield(); | 
