aboutsummaryrefslogtreecommitdiff
path: root/engines/macventure/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/macventure/gui.cpp')
-rw-r--r--engines/macventure/gui.cpp48
1 files changed, 23 insertions, 25 deletions
diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index b449855fc0..6833de7dfc 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -696,22 +696,34 @@ void Gui::drawWindowTitle(WindowReference target, Graphics::ManagedSurface * sur
void Gui::drawDraggedObject() {
if (_draggedObj.id != 0 &&
- _engine->isObjVisible(_draggedObj.id)) {
+ _engine->isObjVisible(_draggedObj.id)) {
ensureAssetLoaded(_draggedObj.id);
ImageAsset *asset = _assets[_draggedObj.id];
- _draggedSurface.create(asset->getWidth(), asset->getHeight(), _screen.format);
+ // In case of overflow from the right/top
+ uint w = asset->getWidth() + MIN((int16)0, _draggedObj.pos.x);
+ uint h = asset->getHeight() + MIN((int16)0, _draggedObj.pos.y);
- asset->blitInto(&_draggedSurface, 0, 0, kBlitBIC);
+ // In case of overflow from the bottom/left
+ if (_draggedObj.pos.x > 0 && _draggedObj.pos.x + w > kScreenWidth) { w = kScreenWidth - _draggedObj.pos.x; }
+ if (_draggedObj.pos.y > 0 && _draggedObj.pos.y + h > kScreenHeight) { h = kScreenHeight - _draggedObj.pos.y; }
+
+ _draggedSurface.create(w, h, _screen.format);
+
+ asset->blitInto(&_draggedSurface, MIN((int16)0, _draggedObj.pos.x), MIN((int16)0, _draggedObj.pos.y), kBlitBIC);
+
+ Common::Point target = _draggedObj.pos;
+ if (target.x < 0) { target.x = 0; }
+ if (target.y < 0) { target.y = 0; }
g_system->copyRectToScreen(
- _draggedSurface.getPixels(),
+ _draggedSurface.getBasePtr(0, 0),
_draggedSurface.pitch,
- _draggedObj.pos.x,
- _draggedObj.pos.y,
+ target.x,
+ target.y,
_draggedSurface.w,
- _draggedSurface.h);
-
+ _draggedSurface.h
+ );
}
}
@@ -846,25 +858,11 @@ void Gui::saveInto(int slot) {
}
void Gui::moveDraggedObject(Common::Point target) {
- Common::Point newPos = target + _draggedObj.mouseOffset;
- bool movement = false;
- // If we overflow, move the mouseOffset, not the position.
- if (newPos.x < 0 || newPos.x + _assets[_draggedObj.id]->getWidth() >= kScreenWidth) {
- _draggedObj.mouseOffset.x = _draggedObj.pos.x - target.x;
- } else {
- _draggedObj.pos.x = newPos.x;
- movement = true;
- }
-
- if (newPos.y < 0 || newPos.y + _assets[_draggedObj.id]->getHeight() >= kScreenHeight) {
- _draggedObj.mouseOffset.y = _draggedObj.pos.y - target.y;
- } else {
- _draggedObj.pos.y = newPos.y;
- movement = true;
- }
+ ensureAssetLoaded(_draggedObj.id);
+ _draggedObj.pos = target + _draggedObj.mouseOffset;
// TODO FInd more elegant way of making pow2
- _draggedObj.hasMoved = movement && (_draggedObj.startPos.sqrDist(_draggedObj.pos) >= (kDragThreshold * kDragThreshold));
+ _draggedObj.hasMoved = (_draggedObj.startPos.sqrDist(_draggedObj.pos) >= (kDragThreshold * kDragThreshold));
debug(4, "Dragged obj position: (%d, %d), mouse offset: (%d, %d), hasMoved: %d, dist: %d, threshold: %d",
_draggedObj.pos.x, _draggedObj.pos.y,