mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-04 17:29:11 +00:00
SCI: remaining cursor functions now also directly called
svn-id: r47914
This commit is contained in:
parent
16efee3c0d
commit
f967318225
@ -101,7 +101,7 @@ static reg_t kSetCursorSci0(EngineState *s, int argc, reg_t *argv) {
|
||||
if (argc >= 4) {
|
||||
pos.y = argv[3].toSint16();
|
||||
pos.x = argv[2].toSint16();
|
||||
s->_gui->setCursorPos(pos);
|
||||
s->_gfxCursor->kernelSetPos(pos);
|
||||
}
|
||||
|
||||
if ((argc >= 2) && (argv[1].toSint16() == 0)) {
|
||||
@ -136,12 +136,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) {
|
||||
pos.y = argv[1].toSint16();
|
||||
pos.x = argv[0].toSint16();
|
||||
|
||||
#ifdef ENABLE_SCI32
|
||||
if (s->_gui32)
|
||||
s->_gui32->setCursorPos(pos);
|
||||
else
|
||||
#endif
|
||||
s->_gui->setCursorPos(pos);
|
||||
s->_gfxCursor->kernelSetPos(pos);
|
||||
break;
|
||||
case 4: {
|
||||
int16 top = argv[0].toSint16();
|
||||
@ -151,12 +146,7 @@ static reg_t kSetCursorSci11(EngineState *s, int argc, reg_t *argv) {
|
||||
|
||||
if ((right >= left) && (bottom >= top)) {
|
||||
Common::Rect rect = Common::Rect(left, top, right, bottom);
|
||||
#ifdef ENABLE_SCI32
|
||||
if (s->_gui32)
|
||||
s->_gui32->setCursorZone(rect);
|
||||
else
|
||||
#endif
|
||||
s->_gui->setCursorZone(rect);
|
||||
s->_gfxCursor->kernelSetMoveZone(rect);
|
||||
} else {
|
||||
warning("kSetCursor: Ignoring invalid mouse zone (%i, %i)-(%i, %i)", left, top, right, bottom);
|
||||
}
|
||||
@ -193,7 +183,7 @@ reg_t kMoveCursor(EngineState *s, int argc, reg_t *argv) {
|
||||
if (argc == 2) {
|
||||
pos.y = argv[1].toSint16();
|
||||
pos.x = argv[0].toSint16();
|
||||
s->_gui->setCursorPos(pos);
|
||||
s->_gfxCursor->kernelSetPos(pos);
|
||||
}
|
||||
return s->r_acc;
|
||||
}
|
||||
|
@ -65,6 +65,19 @@ Common::Rect GfxCoordAdjuster16::onControl(Common::Rect rect) {
|
||||
return adjustedRect;
|
||||
}
|
||||
|
||||
void GfxCoordAdjuster16::setCursorPos(Common::Point &pos) {
|
||||
pos.y += _ports->getPort()->top;
|
||||
pos.x += _ports->getPort()->left;
|
||||
}
|
||||
|
||||
void GfxCoordAdjuster16::moveCursor(Common::Point &pos) {
|
||||
pos.y += _ports->_picWind->rect.top;
|
||||
pos.x += _ports->_picWind->rect.left;
|
||||
|
||||
pos.y = CLIP<int16>(pos.y, _ports->_picWind->rect.top, _ports->_picWind->rect.bottom - 1);
|
||||
pos.x = CLIP<int16>(pos.x, _ports->_picWind->rect.left, _ports->_picWind->rect.right - 1);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_SCI32
|
||||
GfxCoordAdjuster32::GfxCoordAdjuster32(SegManager *segMan)
|
||||
: _segMan(segMan) {
|
||||
|
@ -47,7 +47,8 @@ public:
|
||||
virtual void kernelLocalToGlobal(int16 &x, int16 &y, reg_t planeObject = NULL_REG) { };
|
||||
|
||||
virtual Common::Rect onControl(Common::Rect rect) { return rect; };
|
||||
|
||||
virtual void setCursorPos(Common::Point &pos) { };
|
||||
virtual void moveCursor(Common::Point &pos) { };
|
||||
private:
|
||||
};
|
||||
|
||||
@ -60,6 +61,8 @@ public:
|
||||
void kernelLocalToGlobal(int16 &x, int16 &y, reg_t planeObject = NULL_REG);
|
||||
|
||||
Common::Rect onControl(Common::Rect rect);
|
||||
void setCursorPos(Common::Point &pos);
|
||||
void moveCursor(Common::Point &pos);
|
||||
|
||||
private:
|
||||
GfxPorts *_ports;
|
||||
|
@ -28,9 +28,11 @@
|
||||
#include "common/events.h"
|
||||
|
||||
#include "sci/sci.h"
|
||||
#include "sci/event.h"
|
||||
#include "sci/engine/state.h"
|
||||
#include "sci/graphics/palette.h"
|
||||
#include "sci/graphics/screen.h"
|
||||
#include "sci/graphics/coordadjuster.h"
|
||||
#include "sci/graphics/view.h"
|
||||
#include "sci/graphics/cursor.h"
|
||||
|
||||
@ -42,7 +44,7 @@ GfxCursor::GfxCursor(ResourceManager *resMan, GfxPalette *palette, GfxScreen *sc
|
||||
_upscaledHires = _screen->getUpscaledHires();
|
||||
// center mouse cursor
|
||||
setPosition(Common::Point(_screen->getDisplayWidth() / 2, _screen->getDisplayHeight() / 2));
|
||||
setMoveZone(Common::Rect(0, 0, _screen->getDisplayWidth(), _screen->getDisplayHeight()));
|
||||
kernelSetMoveZone(Common::Rect(0, 0, _screen->getDisplayWidth(), _screen->getDisplayHeight()));
|
||||
|
||||
_isVisible = true;
|
||||
}
|
||||
@ -51,6 +53,11 @@ GfxCursor::~GfxCursor() {
|
||||
purgeCache();
|
||||
}
|
||||
|
||||
void GfxCursor::init(GfxCoordAdjuster *coordAdjuster, SciEvent *event) {
|
||||
_coordAdjuster = coordAdjuster;
|
||||
_event = event;
|
||||
}
|
||||
|
||||
void GfxCursor::kernelShow() {
|
||||
CursorMan.showMouse(true);
|
||||
_isVisible = true;
|
||||
@ -224,4 +231,27 @@ void GfxCursor::refreshPosition() {
|
||||
setPosition(mousePoint);
|
||||
}
|
||||
|
||||
void GfxCursor::kernelSetMoveZone(Common::Rect zone) {
|
||||
_moveZone = zone;
|
||||
}
|
||||
|
||||
void GfxCursor::kernelSetPos(Common::Point pos) {
|
||||
_coordAdjuster->setCursorPos(pos);
|
||||
kernelMoveCursor(pos);
|
||||
}
|
||||
|
||||
void GfxCursor::kernelMoveCursor(Common::Point pos) {
|
||||
_coordAdjuster->moveCursor(pos);
|
||||
if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) {
|
||||
warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x);
|
||||
return;
|
||||
}
|
||||
|
||||
setPosition(pos);
|
||||
|
||||
// Trigger event reading to make sure the mouse coordinates will
|
||||
// actually have changed the next time we read them.
|
||||
_event->get(SCI_EVENT_PEEK);
|
||||
}
|
||||
|
||||
} // End of namespace Sci
|
||||
|
@ -45,6 +45,8 @@ public:
|
||||
GfxCursor(ResourceManager *resMan, GfxPalette *palette, GfxScreen *screen);
|
||||
~GfxCursor();
|
||||
|
||||
void init(GfxCoordAdjuster *coordAdjuster, SciEvent *event);
|
||||
|
||||
void kernelShow();
|
||||
void kernelHide();
|
||||
bool isVisible();
|
||||
@ -59,7 +61,10 @@ public:
|
||||
*
|
||||
* @param[in] rect The rectangle
|
||||
*/
|
||||
void setMoveZone(Common::Rect zone) { _moveZone = zone; }
|
||||
void kernelSetMoveZone(Common::Rect zone);
|
||||
|
||||
void kernelSetPos(Common::Point pos);
|
||||
void kernelMoveCursor(Common::Point pos);
|
||||
|
||||
private:
|
||||
void purgeCache();
|
||||
@ -67,6 +72,8 @@ private:
|
||||
ResourceManager *_resMan;
|
||||
GfxScreen *_screen;
|
||||
GfxPalette *_palette;
|
||||
GfxCoordAdjuster *_coordAdjuster;
|
||||
SciEvent *_event;
|
||||
|
||||
bool _upscaledHires;
|
||||
|
||||
|
@ -56,6 +56,7 @@ SciGui::SciGui(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCa
|
||||
|
||||
_coordAdjuster = new GfxCoordAdjuster16(_ports);
|
||||
_s->_gfxCoordAdjuster = _coordAdjuster;
|
||||
_cursor->init(_coordAdjuster, _s->_event);
|
||||
_compare = new GfxCompare(_s->_segMan, _s->_kernel, _cache, _screen, _coordAdjuster);
|
||||
_s->_gfxCompare = _compare;
|
||||
_transitions = new GfxTransitions(this, _screen, _palette, _s->resMan->isVGA());
|
||||
@ -269,35 +270,6 @@ void SciGui::shakeScreen(uint16 shakeCount, uint16 directions) {
|
||||
}
|
||||
}
|
||||
|
||||
void SciGui::setCursorPos(Common::Point pos) {
|
||||
pos.y += _ports->getPort()->top;
|
||||
pos.x += _ports->getPort()->left;
|
||||
moveCursor(pos);
|
||||
}
|
||||
|
||||
void SciGui::moveCursor(Common::Point pos) {
|
||||
pos.y += _ports->_picWind->rect.top;
|
||||
pos.x += _ports->_picWind->rect.left;
|
||||
|
||||
pos.y = CLIP<int16>(pos.y, _ports->_picWind->rect.top, _ports->_picWind->rect.bottom - 1);
|
||||
pos.x = CLIP<int16>(pos.x, _ports->_picWind->rect.left, _ports->_picWind->rect.right - 1);
|
||||
|
||||
if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) {
|
||||
warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x);
|
||||
return;
|
||||
}
|
||||
|
||||
_cursor->setPosition(pos);
|
||||
|
||||
// Trigger event reading to make sure the mouse coordinates will
|
||||
// actually have changed the next time we read them.
|
||||
_s->_event->get(SCI_EVENT_PEEK);
|
||||
}
|
||||
|
||||
void SciGui::setCursorZone(Common::Rect zone) {
|
||||
_cursor->setMoveZone(zone);
|
||||
}
|
||||
|
||||
reg_t SciGui::portraitLoad(Common::String resourceName) {
|
||||
//Portrait *myPortrait = new Portrait(_s->resMan, _screen, _palette, resourceName);
|
||||
return NULL_REG;
|
||||
|
@ -76,10 +76,6 @@ public:
|
||||
|
||||
virtual void shakeScreen(uint16 shakeCount, uint16 directions);
|
||||
|
||||
virtual void setCursorPos(Common::Point pos);
|
||||
virtual void moveCursor(Common::Point pos);
|
||||
void setCursorZone(Common::Rect zone);
|
||||
|
||||
virtual reg_t portraitLoad(Common::String resourceName);
|
||||
virtual void portraitShow(Common::String resourceName, Common::Point position, uint16 resourceNum, uint16 noun, uint16 verb, uint16 cond, uint16 seq);
|
||||
virtual void portraitUnload(uint16 portraitId);
|
||||
|
@ -51,6 +51,7 @@ SciGui32::SciGui32(EngineState *state, GfxScreen *screen, GfxPalette *palette, G
|
||||
|
||||
_coordAdjuster = new GfxCoordAdjuster32(_s->_segMan);
|
||||
_s->_gfxCoordAdjuster = _coordAdjuster;
|
||||
_cursor->init(_coordAdjuster, _s->_event);
|
||||
_compare = new GfxCompare(_s->_segMan, _s->_kernel, _cache, _screen, _coordAdjuster);
|
||||
_s->_gfxCompare = _compare;
|
||||
_paint32 = new GfxPaint32(_s->resMan, _s->_segMan, _s->_kernel, _cache, _screen, _palette);
|
||||
@ -92,35 +93,6 @@ void SciGui32::shakeScreen(uint16 shakeCount, uint16 directions) {
|
||||
}
|
||||
}
|
||||
|
||||
void SciGui32::setCursorPos(Common::Point pos) {
|
||||
//pos.y += _gfx->GetPort()->top;
|
||||
//pos.x += _gfx->GetPort()->left;
|
||||
moveCursor(pos);
|
||||
}
|
||||
|
||||
void SciGui32::moveCursor(Common::Point pos) {
|
||||
// pos.y += _windowMgr->_picWind->rect.top;
|
||||
// pos.x += _windowMgr->_picWind->rect.left;
|
||||
|
||||
// pos.y = CLIP<int16>(pos.y, _windowMgr->_picWind->rect.top, _windowMgr->_picWind->rect.bottom - 1);
|
||||
// pos.x = CLIP<int16>(pos.x, _windowMgr->_picWind->rect.left, _windowMgr->_picWind->rect.right - 1);
|
||||
|
||||
if (pos.x > _screen->getWidth() || pos.y > _screen->getHeight()) {
|
||||
warning("attempt to place cursor at invalid coordinates (%d, %d)", pos.y, pos.x);
|
||||
return;
|
||||
}
|
||||
|
||||
_cursor->setPosition(pos);
|
||||
|
||||
// Trigger event reading to make sure the mouse coordinates will
|
||||
// actually have changed the next time we read them.
|
||||
_s->_event->get(SCI_EVENT_PEEK);
|
||||
}
|
||||
|
||||
void SciGui32::setCursorZone(Common::Rect zone) {
|
||||
_cursor->setMoveZone(zone);
|
||||
}
|
||||
|
||||
void SciGui32::drawRobot(GuiResourceId robotId) {
|
||||
Robot *test = new Robot(_s->resMan, _screen, robotId);
|
||||
test->draw();
|
||||
|
@ -50,15 +50,6 @@ public:
|
||||
|
||||
void shakeScreen(uint16 shakeCount, uint16 directions);
|
||||
|
||||
void setNowSeen(reg_t objectReference);
|
||||
bool canBeHere(reg_t curObject, reg_t listReference);
|
||||
bool isItSkip(GuiResourceId viewId, int16 loopNo, int16 celNo, Common::Point position);
|
||||
void baseSetter(reg_t object);
|
||||
|
||||
void setCursorPos(Common::Point pos);
|
||||
void moveCursor(Common::Point pos);
|
||||
void setCursorZone(Common::Rect zone);
|
||||
|
||||
void drawRobot(GuiResourceId robotId);
|
||||
|
||||
// FIXME: Don't store EngineState
|
||||
|
Loading…
x
Reference in New Issue
Block a user