aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/gui/gui_view.cpp17
-rw-r--r--engines/sci/gui/gui_view.h5
2 files changed, 19 insertions, 3 deletions
diff --git a/engines/sci/gui/gui_view.cpp b/engines/sci/gui/gui_view.cpp
index f795565483..a656a1c9e9 100644
--- a/engines/sci/gui/gui_view.cpp
+++ b/engines/sci/gui/gui_view.cpp
@@ -181,12 +181,27 @@ int16 SciGUIview::getHeight(uint16 loopNo, uint16 cellNo) {
}
sciViewCellInfo *SciGUIview::getCellInfo(uint16 loopNo, uint16 cellNo) {
- loopNo = CLIP<int16>(loopNo, 0, _loopCount -1);
+ loopNo = CLIP<int16>(loopNo, 0, _loopCount - 1);
if (cellNo >= _loop[loopNo].cellCount)
cellNo = 0;
return _loopCount ? &_loop[loopNo].cell[cellNo] : NULL;
}
+sciViewLoopInfo *SciGUIview::getLoopInfo(uint16 loopNo) {
+ loopNo = CLIP<int16>(loopNo, 0, _loopCount - 1);
+ return _loopCount ? &_loop[loopNo] : NULL;
+}
+
+void SciGUIview::getCellRect(uint16 loopNo, uint16 cellNo, int16 x, int16 y, int16 z, Common::Rect *outRect) {
+ sciViewCellInfo *cellInfo = getCellInfo(loopNo, cellNo);
+ if (cellInfo) {
+ outRect->left = x + cellInfo->displaceX - (cellInfo->width >> 1);
+ outRect->right = outRect->left + cellInfo->width;
+ outRect->bottom = y + cellInfo->displaceY - z + 1;
+ outRect->top = outRect->bottom - cellInfo->height;
+ }
+}
+
void SciGUIview::unpackView(uint16 loopNo, uint16 cellNo, byte *outPtr, uint16 pixelCount) {
byte *rlePtr = _resourceData + _loop[loopNo].cell[cellNo].offsetRLE;
byte *literalPtr = _resourceData + _loop[loopNo].cell[cellNo].offsetLiteral;
diff --git a/engines/sci/gui/gui_view.h b/engines/sci/gui/gui_view.h
index bdecd59124..c89ab000f9 100644
--- a/engines/sci/gui/gui_view.h
+++ b/engines/sci/gui/gui_view.h
@@ -51,8 +51,9 @@ public:
sciResourceId getResourceId();
int16 getWidth(uint16 loopNo, uint16 cellNo);
int16 getHeight(uint16 loopNo, uint16 cellNo);
- sciViewCellInfo *getCellInfo(uint16 loop, uint16 cel);
- sciViewLoopInfo *getLoopInfo(uint16 loop);
+ sciViewCellInfo *getCellInfo(uint16 loopNo, uint16 cellNo);
+ sciViewLoopInfo *getLoopInfo(uint16 loopNo);
+ void getCellRect(uint16 loopNo, uint16 cellNo, int16 x, int16 y, int16 z, Common::Rect *outRect);
byte *getBitmap(uint16 loopNo, uint16 cellNo);
void draw(Common::Rect rect, Common::Rect clipRect, uint16 loopNo, uint16 cellNo, byte priority, uint16 paletteNo);