[Scummvm-git-logs] scummvm master -> 3f3e618bcc5c7fc5855c7aa5b35302710287a81c
OMGPizzaGuy
noreply at scummvm.org
Fri Dec 23 00:58:37 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0d3e44915d ULTIMA8: use correct coords for gump onDragStop
3f3e618bcc ULTIMA8: Implement resizeable gump and use for minimap
Commit: 0d3e44915d8c9cfc354b3f973a86a6b1f5f52f6f
https://github.com/scummvm/scummvm/commit/0d3e44915d8c9cfc354b3f973a86a6b1f5f52f6f
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2022-12-22T18:58:11-06:00
Commit Message:
ULTIMA8: use correct coords for gump onDragStop
Changed paths:
engines/ultima/ultima8/kernel/mouse.cpp
diff --git a/engines/ultima/ultima8/kernel/mouse.cpp b/engines/ultima/ultima8/kernel/mouse.cpp
index 90ed1cf39bc..fac228e1cbe 100644
--- a/engines/ultima/ultima8/kernel/mouse.cpp
+++ b/engines/ultima/ultima8/kernel/mouse.cpp
@@ -481,7 +481,7 @@ void Mouse::stopDragging(int mx, int my) {
assert(parent); // can't drag root gump
int32 px = mx, py = my;
parent->ScreenSpaceToGump(px, py);
- gump->onDragStop(mx, my);
+ gump->onDragStop(px, py);
} else if (item) {
// for an item: notify gumps
if (_dragging != DRAG_INVALID) {
Commit: 3f3e618bcc5c7fc5855c7aa5b35302710287a81c
https://github.com/scummvm/scummvm/commit/3f3e618bcc5c7fc5855c7aa5b35302710287a81c
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2022-12-22T18:58:11-06:00
Commit Message:
ULTIMA8: Implement resizeable gump and use for minimap
Changed paths:
engines/ultima/ultima8/gumps/gump.cpp
engines/ultima/ultima8/gumps/gump.h
engines/ultima/ultima8/gumps/minimap_gump.cpp
engines/ultima/ultima8/gumps/minimap_gump.h
engines/ultima/ultima8/gumps/resizable_gump.cpp
engines/ultima/ultima8/gumps/resizable_gump.h
diff --git a/engines/ultima/ultima8/gumps/gump.cpp b/engines/ultima/ultima8/gumps/gump.cpp
index a29d1bebcc4..42834af7f03 100644
--- a/engines/ultima/ultima8/gumps/gump.cpp
+++ b/engines/ultima/ultima8/gumps/gump.cpp
@@ -377,6 +377,12 @@ void Gump::setRelativePosition(Gump::Position pos, int xoffset, int yoffset) {
case BOTTOM_CENTER:
Move(rect.width() / 2 - _dims.width() / 2 + xoffset, rect.height() - _dims.height() + yoffset);
break;
+ case LEFT_CENTER:
+ Move(xoffset, rect.height() / 2 - _dims.height() / 2 + yoffset);
+ break;
+ case RIGHT_CENTER:
+ Move(rect.width() - _dims.width() + xoffset, rect.height() / 2 - _dims.height() / 2 + yoffset);
+ break;
default:
break;
}
diff --git a/engines/ultima/ultima8/gumps/gump.h b/engines/ultima/ultima8/gumps/gump.h
index c7a7cdf95ad..0a31d329679 100644
--- a/engines/ultima/ultima8/gumps/gump.h
+++ b/engines/ultima/ultima8/gumps/gump.h
@@ -225,7 +225,9 @@ public:
BOTTOM_LEFT = 4,
BOTTOM_RIGHT = 5,
TOP_CENTER = 6,
- BOTTOM_CENTER = 7
+ BOTTOM_CENTER = 7,
+ LEFT_CENTER = 8,
+ RIGHT_CENTER = 9
};
//! Moves this gump to a relative location on the parent gump
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.cpp b/engines/ultima/ultima8/gumps/minimap_gump.cpp
index 018b2eca651..f9c0db16f6e 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.cpp
+++ b/engines/ultima/ultima8/gumps/minimap_gump.cpp
@@ -33,11 +33,12 @@ namespace Ultima8 {
DEFINE_RUNTIME_CLASSTYPE_CODE(MiniMapGump)
-MiniMapGump::MiniMapGump(int x, int y) :
- Gump(x, y, 120, 120, 0, FLAG_DRAGGABLE, LAYER_NORMAL), _minimaps(), _ax(0), _ay(0) {
+MiniMapGump::MiniMapGump(int x, int y) : ResizableGump(x, y, 120, 120), _minimaps(), _ax(0), _ay(0) {
+ setMinSize(60, 60);
}
-MiniMapGump::MiniMapGump() : Gump(), _minimaps(), _ax(0), _ay(0) {
+MiniMapGump::MiniMapGump() : ResizableGump(), _minimaps(), _ax(0), _ay(0) {
+ setMinSize(60, 60);
}
MiniMapGump::~MiniMapGump(void) {
diff --git a/engines/ultima/ultima8/gumps/minimap_gump.h b/engines/ultima/ultima8/gumps/minimap_gump.h
index 1d27830c7f4..d4d29599dc9 100644
--- a/engines/ultima/ultima8/gumps/minimap_gump.h
+++ b/engines/ultima/ultima8/gumps/minimap_gump.h
@@ -22,7 +22,7 @@
#ifndef ULTIMA8_GUMPS_MINIMAPGUMP_H
#define ULTIMA8_GUMPS_MINIMAPGUMP_H
-#include "ultima/ultima8/gumps/gump.h"
+#include "ultima/ultima8/gumps/resizable_gump.h"
#include "ultima/ultima8/misc/classtype.h"
namespace Ultima {
@@ -30,7 +30,7 @@ namespace Ultima8 {
class MiniMap;
-class MiniMapGump : public Gump {
+class MiniMapGump : public ResizableGump {
private:
Common::HashMap<uint32, MiniMap *> _minimaps;
int32 _ax, _ay;
diff --git a/engines/ultima/ultima8/gumps/resizable_gump.cpp b/engines/ultima/ultima8/gumps/resizable_gump.cpp
index d178c3b8757..4b4b870b0d7 100644
--- a/engines/ultima/ultima8/gumps/resizable_gump.cpp
+++ b/engines/ultima/ultima8/gumps/resizable_gump.cpp
@@ -20,15 +20,115 @@
*/
#include "ultima/ultima8/gumps/resizable_gump.h"
+#include "ultima/ultima8/kernel/mouse.h"
namespace Ultima {
namespace Ultima8 {
-ResizableGump::ResizableGump(int x, int y, int width, int height) : Gump(x, y, width, height) {
+#define RESIZE_BORDER 5
+
+ResizableGump::ResizableGump(int x, int y, int width, int height)
+ : Gump(x, y, width, height, 0, FLAG_DRAGGABLE, LAYER_NORMAL), _dragPosition(Gump::CENTER), _minWidth(20), _minHeight(20) {
+}
+
+ResizableGump::ResizableGump() : Gump(), _dragPosition(Gump::CENTER), _minWidth(20), _minHeight(20) {
}
ResizableGump::~ResizableGump() {
}
+bool ResizableGump::onDragStart(int32 mx, int32 my) {
+ if (Gump::onDragStart(mx, my)) {
+ ParentToGump(mx, my);
+ if (mx < _dims.left + RESIZE_BORDER && my < _dims.top + RESIZE_BORDER) {
+ _dragPosition = Gump::TOP_LEFT;
+ } else if (mx >= _dims.right - RESIZE_BORDER && my < _dims.top + RESIZE_BORDER) {
+ _dragPosition = Gump::TOP_RIGHT;
+ } else if (mx < _dims.left + RESIZE_BORDER && my >= _dims.bottom - RESIZE_BORDER) {
+ _dragPosition = Gump::BOTTOM_LEFT;
+ } else if (mx >= _dims.right - RESIZE_BORDER && my >= _dims.bottom - RESIZE_BORDER) {
+ _dragPosition = Gump::BOTTOM_RIGHT;
+ } else if (my < _dims.top + RESIZE_BORDER) {
+ _dragPosition = Gump::TOP_CENTER;
+ } else if (my >= _dims.bottom - RESIZE_BORDER) {
+ _dragPosition = Gump::BOTTOM_CENTER;
+ } else if (mx < _dims.left + RESIZE_BORDER) {
+ _dragPosition = Gump::LEFT_CENTER;
+ } else if (mx >= _dims.right - RESIZE_BORDER) {
+ _dragPosition = Gump::RIGHT_CENTER;
+ } else {
+ _dragPosition = Gump::CENTER;
+ }
+ return true;
+ }
+ return false;
+}
+
+void ResizableGump::onDrag(int32 mx, int32 my) {
+ int32 x = _x;
+ int32 y = _y;
+ int32 w = _dims.width();
+ int32 h = _dims.height();
+
+ int32 dx, dy;
+ Mouse::get_instance()->getDraggingOffset(dx, dy);
+
+ int32 px = mx, py = my;
+ ParentToGump(px, py);
+
+ switch (_dragPosition) {
+ case Gump::CENTER:
+ x = mx - dx;
+ y = my - dy;
+ break;
+ case Gump::TOP_LEFT:
+ w -= px - dx;
+ h -= py - dy;
+ x = mx - dx;
+ y = my - dy;
+ break;
+ case Gump::TOP_RIGHT:
+ w = px;
+ h -= py - dy;
+ y = my - dy;
+ break;
+ case Gump::BOTTOM_LEFT:
+ w -= px - dx;
+ h = py;
+ x = mx - dx;
+ break;
+ case Gump::BOTTOM_RIGHT:
+ w = px;
+ h = py;
+ break;
+ case Gump::TOP_CENTER:
+ h -= py - dy;
+ y = my - dy;
+ break;
+ case Gump::BOTTOM_CENTER:
+ h = py;
+ break;
+ case Gump::LEFT_CENTER:
+ w -= px - dx;
+ x = mx - dx;
+ break;
+ case Gump::RIGHT_CENTER:
+ w = px;
+ break;
+ default:
+ break;
+ }
+
+ if (w >= _minWidth) {
+ _dims.setWidth(w);
+ _x = x;
+ }
+
+ if (h >= _minHeight) {
+ _dims.setHeight(h);
+ _y = y;
+ }
+}
+
} // End of namespace Ultima8
} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/gumps/resizable_gump.h b/engines/ultima/ultima8/gumps/resizable_gump.h
index 9d6fb336973..c13999d2e6f 100644
--- a/engines/ultima/ultima8/gumps/resizable_gump.h
+++ b/engines/ultima/ultima8/gumps/resizable_gump.h
@@ -32,9 +32,23 @@ namespace Ultima8 {
* An example of such would be the Console and the GameMap gumps
*/
class ResizableGump : public Gump {
+private:
+ Gump::Position _dragPosition;
+ int32 _minWidth;
+ int32 _minHeight;
+
public:
+ ResizableGump();
ResizableGump(int x, int y, int width, int height);
~ResizableGump() override;
+
+ void setMinSize(int minWidth, int minHeight) {
+ _minWidth = minWidth;
+ _minHeight = minHeight;
+ }
+
+ bool onDragStart(int32 mx, int32 my) override;
+ void onDrag(int32 mx, int32 my) override;
};
} // End of namespace Ultima8
More information about the Scummvm-git-logs
mailing list