MACVENTURE: Fix some of the offsets

This commit is contained in:
Borja Lorente 2016-08-05 18:15:20 +02:00
parent 47916aca62
commit 28bf4f1168
4 changed files with 33 additions and 19 deletions

View file

@ -50,6 +50,8 @@ Common::String windowTypeName(MVWindowType windowType) {
return "ZoomDoc";
case kZoomNoGrow:
return "ZoomNoGrow";
case kInvWindow:
return "InvWindow";
case kRDoc16:
return "RDoc16";
case kRDoc4:

View file

@ -218,7 +218,11 @@ void Gui::initWindows() {
// In-game Output Console
_outConsoleWindow = _wm.addWindow(true, true, false);
_outConsoleWindow->setDimensions(getWindowData(kOutConsoleWindow).bounds);
// HACK We have to hand-create the dimensions, otherwise they don't fit
const WindowData &wd = getWindowData(kOutConsoleWindow);
Common::Rect dimensions = wd.bounds;
dimensions.setWidth(dimensions.width() - borderBounds(wd.type).rightOffset);
_outConsoleWindow->setDimensions(dimensions);
_outConsoleWindow->setActive(false);
_outConsoleWindow->setCallback(outConsoleWindowCallback, this);
loadBorders(_outConsoleWindow, findWindowData(kOutConsoleWindow).type);
@ -306,15 +310,15 @@ WindowReference Gui::createInventoryWindow(ObjID objRef) {
if (_windowData->back().refcon < 0x80) { // There is already another inventory window
newData.bounds = _windowData->back().bounds; // Inventory windows are always last
newData.bounds.translate(newData.bounds.left + settings.invOffsetX, newData.bounds.top + settings.invOffsetY);
}
else {
} else {
BorderBounds bbs = borderBounds(kInvWindow);
newData.bounds = Common::Rect(
settings.invLeft,
settings.invTop,
settings.invLeft - bbs.leftOffset,
settings.invTop - bbs.topOffset,
settings.invLeft + settings.invWidth,
settings.invTop + settings.invHeight);
}
newData.type = kZoomDoc;
newData.type = kInvWindow;
newData.hasCloseBox = true;
newData.visible = true;
newData.objRef = objRef;
@ -431,11 +435,13 @@ bool Gui::loadWindows() {
bottom = res->readUint16BE();
right = res->readUint16BE();
data.type = (MVWindowType)res->readUint16BE();
BorderBounds bbs = borderBounds(data.type);
data.bounds = Common::Rect(
left - borderBounds(data.type).leftOffset,
top - borderBounds(data.type).topOffset,
right + borderBounds(data.type).rightOffset * 2,
bottom + borderBounds(data.type).bottomOffset * 2);
left - bbs.leftOffset,
top - bbs.topOffset,
right + bbs.rightOffset,
bottom + bbs.bottomOffset);
data.visible = res->readUint16BE();
data.hasCloseBox = res->readUint16BE();
data.refcon = (WindowReference)id; id++;
@ -492,11 +498,14 @@ bool Gui::loadControls() {
res->read(data.title, data.titleLength);
data.title[data.titleLength] = '\0';
}
if (data.type != kControlExitBox)
data.border = commandsBorder;
if (data.type != kControlExitBox) {
BorderBounds bbs = borderBounds(getWindowData(kCommandsWindow).type);
// We just want to move the button, not change it's size
data.bounds = Common::Rect(left + bbs.leftOffset, top + bbs.topOffset, right + bbs.leftOffset, bottom + bbs.topOffset);
} else {
data.bounds = Common::Rect(left, top, right, bottom);
}
Common::Rect bounds(left, top, right, bottom); // For some reason, if I remove this it segfaults
data.bounds = Common::Rect(left + data.border, top + data.border, right + data.border, bottom + data.border);
i++;
}

View file

@ -31,22 +31,23 @@ BorderBounds borderBounds(MVWindowType type) {
case MacVenture::kDBox:
break;
case MacVenture::kPlainDBox:
return BorderBounds(1, 1, 1, 2);
return BorderBounds(3, 3, 3, 3);
case MacVenture::kAltBox:
return BorderBounds(0, 0, 0, 0); // Hand-tested
break;
case MacVenture::kNoGrowDoc:
return BorderBounds(1, 17, 1, 1);
return BorderBounds(1, 20, 1, 1);
case MacVenture::kMovableDBox:
break;
case MacVenture::kZoomDoc:
return BorderBounds(1, 19, 17, 17);
return BorderBounds(1, 20, 17, 1);
case MacVenture::kZoomNoGrow:
break;
case MacVenture::kInvWindow:
return BorderBounds(1, 20, 17, 17);
case MacVenture::kRDoc16:
break;
case MacVenture::kRDoc4:
return BorderBounds(1, 19, 1, 1);
return BorderBounds(1, 20, 1, 1);
case MacVenture::kRDoc6:
break;
case MacVenture::kRDoc10:

View file

@ -50,6 +50,8 @@ enum MVWindowType {
kMovableDBox = 0x05,
kZoomDoc = 0x08,
kZoomNoGrow = 0x0c,
// WebVenture assigns arbitrary kinds post-loading
kInvWindow = 0x0e,
kRDoc16 = 0x10,
kRDoc4 = 0x12,
kRDoc6 = 0x14,