LAB: Use Common::Rect in functions related to flowText (WIP)
This commit is contained in:
parent
605c2e553b
commit
054a7a1e19
9 changed files with 104 additions and 90 deletions
|
@ -188,12 +188,11 @@ int DisplayMan::flowText(
|
|||
bool centerh, // Whether to center the text horizontally
|
||||
bool centerv, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *str) { // The text itself
|
||||
if (fillBack) {
|
||||
setPen(backPen);
|
||||
rectFill(x1, y1, x2, y2);
|
||||
rectFill(textRect);
|
||||
}
|
||||
|
||||
if (!str)
|
||||
|
@ -203,9 +202,9 @@ int DisplayMan::flowText(
|
|||
|
||||
TextFont *msgFont = font;
|
||||
uint16 fontHeight = textHeight(msgFont) + spacing;
|
||||
uint16 numLines = (y2 - y1 + 1) / fontHeight;
|
||||
uint16 width = x2 - x1 + 1;
|
||||
uint16 y = y1;
|
||||
uint16 numLines = (textRect.height() + 1) / fontHeight;
|
||||
uint16 width = textRect.width() + 1;
|
||||
uint16 y = textRect.top;
|
||||
char lineBuffer[256];
|
||||
|
||||
if (centerv && output) {
|
||||
|
@ -218,14 +217,14 @@ int DisplayMan::flowText(
|
|||
}
|
||||
|
||||
if (actlines <= numLines)
|
||||
y += ((y2 - y1 + 1) - (actlines * fontHeight)) / 2;
|
||||
y += ((textRect.height() + 1) - (actlines * fontHeight)) / 2;
|
||||
}
|
||||
|
||||
int len = 0;
|
||||
while (numLines && str[0]) {
|
||||
getLine(msgFont, lineBuffer, &str, width);
|
||||
|
||||
uint16 x = x1;
|
||||
uint16 x = textRect.left;
|
||||
len += strlen(lineBuffer);
|
||||
|
||||
if (centerh)
|
||||
|
@ -252,12 +251,10 @@ int DisplayMan::flowTextScaled(
|
|||
bool centerX, // Whether to center the text horizontally
|
||||
bool centerY, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *str) {
|
||||
return flowText(font, spacing, penColor, backPen, fillBack, centerX, centerY, output,
|
||||
_vm->_utils->vgaScaleX(x1), _vm->_utils->vgaScaleY(y1),
|
||||
_vm->_utils->vgaScaleX(x2), _vm->_utils->vgaScaleY(y2), str);
|
||||
Common::Rect scaledRect = _vm->_utils->vgaRectScale(textRect.left, textRect.top, textRect.right, textRect.bottom);
|
||||
return flowText(font, spacing, penColor, backPen, fillBack, centerX, centerY, output, scaledRect, str);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -272,8 +269,7 @@ int DisplayMan::flowTextToMem(Image *destIm,
|
|||
bool centerh, // Whether to center the text horizontally
|
||||
bool centerv, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *str) { // The text itself
|
||||
byte *saveDisplayBuffer = _currentDisplayBuffer;
|
||||
uint32 bytesPerPage = _screenBytesPerPage;
|
||||
|
@ -281,7 +277,7 @@ int DisplayMan::flowTextToMem(Image *destIm,
|
|||
_currentDisplayBuffer = destIm->_imageData;
|
||||
_screenBytesPerPage = (uint32)destIm->_width * (int32)destIm->_height;
|
||||
|
||||
int res = flowText(font, spacing, penColor, backPen, fillBack, centerh, centerv, output, x1, y1, x2, y2, str);
|
||||
int res = flowText(font, spacing, penColor, backPen, fillBack, centerh, centerv, output, textRect, str);
|
||||
|
||||
_screenBytesPerPage = bytesPerPage;
|
||||
_currentDisplayBuffer = saveDisplayBuffer;
|
||||
|
@ -324,7 +320,7 @@ int DisplayMan::longDrawMessage(const char *str) {
|
|||
createBox(198);
|
||||
_vm->_event->mouseShow();
|
||||
|
||||
return flowTextScaled(_vm->_msgFont, 0, 1, 7, false, true, true, true, 6, 155, 313, 195, str);
|
||||
return flowTextScaled(_vm->_msgFont, 0, 1, 7, false, true, true, true, Common::Rect(6, 155, 313, 195), str);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -479,22 +475,22 @@ void DisplayMan::setPen(byte penNum) {
|
|||
/**
|
||||
* Fills in a rectangle.
|
||||
*/
|
||||
void DisplayMan::rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
||||
int w = x2 - x1 + 1;
|
||||
int h = y2 - y1 + 1;
|
||||
void DisplayMan::rectFill(Common::Rect fillRect) {
|
||||
int width = fillRect.width() + 1;
|
||||
int height = fillRect.height() + 1;
|
||||
|
||||
if (x1 + w > _screenWidth)
|
||||
w = _screenWidth - x1;
|
||||
if (fillRect.left + width > _screenWidth)
|
||||
width = _screenWidth - fillRect.left;
|
||||
|
||||
if (y1 + h > _screenHeight)
|
||||
h = _screenHeight - y1;
|
||||
if (fillRect.top + height > _screenHeight)
|
||||
height = _screenHeight - fillRect.top;
|
||||
|
||||
if ((w > 0) && (h > 0)) {
|
||||
char *d = (char *)getCurrentDrawingBuffer() + y1 * _screenWidth + x1;
|
||||
if ((width > 0) && (height > 0)) {
|
||||
char *d = (char *)getCurrentDrawingBuffer() + fillRect.top * _screenWidth + fillRect.left;
|
||||
|
||||
while (h-- > 0) {
|
||||
while (height-- > 0) {
|
||||
char *dd = d;
|
||||
int ww = w;
|
||||
int ww = width;
|
||||
|
||||
while (ww-- > 0) {
|
||||
*dd++ = _curPen;
|
||||
|
@ -505,8 +501,12 @@ void DisplayMan::rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
|||
}
|
||||
}
|
||||
|
||||
void DisplayMan::rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
||||
rectFill(Common::Rect(x1, y1, x2, y2));
|
||||
}
|
||||
|
||||
void DisplayMan::rectFillScaled(uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
||||
rectFill(_vm->_utils->vgaScaleX(x1), _vm->_utils->vgaScaleY(y1), _vm->_utils->vgaScaleX(x2), _vm->_utils->vgaScaleY(y2));
|
||||
rectFill(_vm->_utils->vgaRectScale(x1, y1, x2, y2));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -92,6 +92,7 @@ public:
|
|||
void drawMessage(const char *str);
|
||||
void setPen(byte pennum);
|
||||
void rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
|
||||
void rectFill(Common::Rect fillRect);
|
||||
void rectFillScaled(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
|
||||
// Window text stuff
|
||||
int flowText(TextFont *font, // the TextAttr pointer
|
||||
|
@ -102,8 +103,7 @@ public:
|
|||
bool centerh, // Whether to center the text horizontally
|
||||
bool centerv, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *text); // The text itself
|
||||
|
||||
int flowTextScaled(
|
||||
|
@ -115,8 +115,7 @@ public:
|
|||
bool centerh, // Whether to center the text horizontally
|
||||
bool centerv, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *text); // The text itself
|
||||
|
||||
int flowTextToMem(Image *destIm,
|
||||
|
@ -128,8 +127,7 @@ public:
|
|||
bool centerh, // Whether to center the text horizontally
|
||||
bool centerv, // Whether to center the text vertically
|
||||
bool output, // Whether to output any text
|
||||
uint16 x1, uint16 y1, // Cords
|
||||
uint16 x2, uint16 y2,
|
||||
Common::Rect textRect, // Cords
|
||||
const char *str); // The text itself
|
||||
|
||||
void drawHLine(uint16 x, uint16 y1, uint16 y2);
|
||||
|
|
|
@ -198,46 +198,55 @@ bool LabEngine::doCloseUp(CloseDataPtr closePtr) {
|
|||
if (!closePtr)
|
||||
return false;
|
||||
|
||||
int monltmargin, monrtmargin, montopmargin, lutertmargin;
|
||||
int luteRight;
|
||||
Common::Rect textRect;
|
||||
|
||||
if (getPlatform() != Common::kPlatformWindows) {
|
||||
monltmargin = 0;
|
||||
monrtmargin = 319;
|
||||
montopmargin = 0;
|
||||
lutertmargin = 124;
|
||||
textRect.left = 0;
|
||||
textRect.right = 319;
|
||||
textRect.top = 0;
|
||||
textRect.bottom = 165;
|
||||
luteRight = 124;
|
||||
} else {
|
||||
monltmargin = 2;
|
||||
monrtmargin = 317;
|
||||
montopmargin = 2;
|
||||
lutertmargin = 128;
|
||||
textRect.left = 2;
|
||||
textRect.right = 317;
|
||||
textRect.top = 2;
|
||||
textRect.bottom = 165;
|
||||
luteRight = 128;
|
||||
}
|
||||
|
||||
switch (closePtr->_closeUpType) {
|
||||
case kMonitorMuseum:
|
||||
case kMonitorLibrary:
|
||||
case kMonitorWindow:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, monltmargin, montopmargin, monrtmargin, 165);
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorGramophone:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, monltmargin, montopmargin, 171, 165);
|
||||
textRect.right = 171;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorUnicycle:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, 100, montopmargin, monrtmargin, 165);
|
||||
textRect.left = 100;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorStatue:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, 117, montopmargin, monrtmargin, 165);
|
||||
textRect.left = 117;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorTalisman:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, monltmargin, montopmargin, 184, 165);
|
||||
textRect.right = 184;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorLute:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, monltmargin, montopmargin, lutertmargin, 165);
|
||||
textRect.right = luteRight;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorClock:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, monltmargin, montopmargin, 206, 165);
|
||||
textRect.right = 206;
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, false, textRect);
|
||||
break;
|
||||
case kMonitorTerminal:
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, true, monltmargin, montopmargin, monrtmargin, 165);
|
||||
doMonitor(closePtr->_graphicName, closePtr->_message, true, textRect);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
|
|
|
@ -103,7 +103,7 @@ void Intro::doPictText(const char *filename, TextFont *msgFont, bool isScreen) {
|
|||
_vm->_graphics->setPen(7);
|
||||
_vm->_graphics->rectFillScaled(10, 10, 310, 190);
|
||||
|
||||
charDrawn = _vm->_graphics->flowTextScaled(msgFont, (!_vm->_isHiRes) * -1, 5, 7, false, false, true, true, 14, 11, 306, 189, (char *)curText);
|
||||
charDrawn = _vm->_graphics->flowTextScaled(msgFont, (!_vm->_isHiRes) * -1, 5, 7, false, false, true, true, Common::Rect(14, 11, 306, 189), (char *)curText);
|
||||
_vm->_graphics->fade(true, 0);
|
||||
} else
|
||||
charDrawn = _vm->_graphics->longDrawMessage((char *)curText);
|
||||
|
|
|
@ -205,7 +205,7 @@ private:
|
|||
void doJournal();
|
||||
bool doMainView(CloseDataPtr *closePtrList);
|
||||
void doMap(uint16 curRoom);
|
||||
void doMonitor(char *background, char *textfile, bool isinteractive, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
|
||||
void doMonitor(char *background, char *textfile, bool isinteractive, Common::Rect textRect);
|
||||
void doNotes();
|
||||
bool doOperateRuleSub(int16 itemNum, int16 roomNum, CloseDataPtr closePtr, CloseDataPtr *setCloseList, bool allowDefaults);
|
||||
bool doOperateRule(Common::Point pos, int16 ItemNum, CloseDataPtr *closePtrList);
|
||||
|
@ -216,7 +216,7 @@ private:
|
|||
void drawJournal(uint16 wipenum, bool needFade);
|
||||
void drawJournalText();
|
||||
void drawMap(uint16 curRoom, uint16 curMsg, uint16 floorNum, bool fadeOut, bool fadeIn);
|
||||
void drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16 y1, uint16 x2, uint16 y2, bool isinteractive);
|
||||
void drawMonText(char *text, TextFont *monitorFont, Common::Rect textRect, bool isinteractive);
|
||||
void drawRoomMap(uint16 curRoom, bool drawMarkFl);
|
||||
void drawRoomMessage(uint16 curInv, CloseDataPtr closePtr);
|
||||
void drawStaticMessage(byte index);
|
||||
|
@ -245,7 +245,7 @@ private:
|
|||
uint16 processArrow(uint16 curDirection, uint16 arrow);
|
||||
void processJournal();
|
||||
void processMap(uint16 curRoom);
|
||||
void processMonitor(char *ntext, TextFont *monitorFont, bool isInteractive, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
|
||||
void processMonitor(char *ntext, TextFont *monitorFont, bool isInteractive, Common::Rect textRect);
|
||||
Common::Rect roomCoords(uint16 curRoom);
|
||||
bool saveRestoreGame();
|
||||
void setCurrentClose(Common::Point pos, CloseDataPtr *closePtrList, bool useAbsoluteCoords);
|
||||
|
|
|
@ -405,16 +405,17 @@ void LabEngine::drawMap(uint16 curRoom, uint16 curMsg, uint16 floorNum, bool fad
|
|||
_imgHugeMaze->drawImage(_utils->mapScaleX(524), _utils->mapScaleY(97));
|
||||
} else if (floorNum == kFloorSurMaze) {
|
||||
char *sptr = (char *)_resource->getStaticText(kTextSurmazeMessage).c_str();
|
||||
_graphics->flowText(_msgFont, 0, 7, 0, true, true, true, true, _utils->mapScaleX(360), 0, _utils->mapScaleX(660), _utils->mapScaleY(450), sptr);
|
||||
Common::Rect textRect = Common::Rect(_utils->mapScaleX(360), 0, _utils->mapScaleX(660), _utils->mapScaleY(450));
|
||||
_graphics->flowText(_msgFont, 0, 7, 0, true, true, true, true, textRect, sptr);
|
||||
}
|
||||
|
||||
if ((floorNum >= kFloorLower) && (floorNum <= kFloorCarnival)) {
|
||||
char *sptr = (char *)_resource->getStaticText(floorNum - 1).c_str();
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, 14, 75, 134, 97, sptr);
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, Common::Rect(14, 75, 134, 97), sptr);
|
||||
}
|
||||
|
||||
if (_rooms[curMsg]._roomMsg)
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, 14, 148, 134, 186, _rooms[curMsg]._roomMsg);
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, Common::Rect(14, 148, 134, 186), _rooms[curMsg]._roomMsg);
|
||||
|
||||
if (fadeIn)
|
||||
_graphics->fade(true, 0);
|
||||
|
@ -558,7 +559,7 @@ void LabEngine::processMap(uint16 curRoom) {
|
|||
_event->mouseHide();
|
||||
_graphics->setPen(3);
|
||||
_graphics->rectFillScaled(13, 148, 135, 186);
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, 14, 148, 134, 186, sptr);
|
||||
_graphics->flowTextScaled(_msgFont, 0, 5, 3, true, true, true, true, Common::Rect(14, 148, 134, 186), sptr);
|
||||
|
||||
if (_maps[oldMsg]._pageNumber == curFloor)
|
||||
drawRoomMap(oldMsg, (bool)(oldMsg == curRoom));
|
||||
|
|
|
@ -54,7 +54,8 @@ void LabEngine::doNotes() {
|
|||
TextFont *noteFont = _resource->getFont("P:Note.fon");
|
||||
char *noteText = _resource->getText("Lab:Rooms/Notes");
|
||||
|
||||
_graphics->flowText(noteFont, -2 + _utils->svgaCord(1), 0, 0, false, false, true, true, _utils->vgaScaleX(25) + _utils->svgaCord(15), _utils->vgaScaleY(50), _utils->vgaScaleX(295) - _utils->svgaCord(15), _utils->vgaScaleY(148), noteText);
|
||||
Common::Rect textRect = Common::Rect(_utils->vgaScaleX(25) + _utils->svgaCord(15), _utils->vgaScaleY(50), _utils->vgaScaleX(295) - _utils->svgaCord(15), _utils->vgaScaleY(148));
|
||||
_graphics->flowText(noteFont, -2 + _utils->svgaCord(1), 0, 0, false, false, true, true, textRect, noteText);
|
||||
_graphics->setPalette(_anim->_diffPalette, 256);
|
||||
_graphics->closeFont(noteFont);
|
||||
delete[] noteText;
|
||||
|
@ -67,7 +68,9 @@ void LabEngine::doNotes() {
|
|||
void LabEngine::doWestPaper() {
|
||||
TextFont *paperFont = _resource->getFont("P:News22.fon");
|
||||
char *paperText = _resource->getText("Lab:Rooms/Date");
|
||||
_graphics->flowText(paperFont, 0, 0, 0, false, true, false, true, _utils->vgaScaleX(57), _utils->vgaScaleY(77) + _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(91), paperText);
|
||||
|
||||
Common::Rect textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(77) + _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(91));
|
||||
_graphics->flowText(paperFont, 0, 0, 0, false, true, false, true, textRect, paperText);
|
||||
_graphics->closeFont(paperFont);
|
||||
delete[] paperText;
|
||||
|
||||
|
@ -75,13 +78,15 @@ void LabEngine::doWestPaper() {
|
|||
paperText = _resource->getText("Lab:Rooms/Headline");
|
||||
|
||||
int fileLen = strlen(paperText) - 1;
|
||||
int charsPrinted = _graphics->flowText(paperFont, -8, 0, 0, false, true, false, true, _utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(118), paperText);
|
||||
textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(118));
|
||||
int charsPrinted = _graphics->flowText(paperFont, -8, 0, 0, false, true, false, true, textRect, paperText);
|
||||
|
||||
uint16 y;
|
||||
|
||||
if (charsPrinted < fileLen) {
|
||||
y = 130 - _utils->svgaCord(5);
|
||||
_graphics->flowText(paperFont, -8 - _utils->svgaCord(1), 0, 0, false, true, false, true, _utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(132), paperText);
|
||||
textRect = Common::Rect(_utils->vgaScaleX(57), _utils->vgaScaleY(86) - _utils->svgaCord(2), _utils->vgaScaleX(262), _utils->vgaScaleY(132));
|
||||
_graphics->flowText(paperFont, -8 - _utils->svgaCord(1), 0, 0, false, true, false, true, textRect, paperText);
|
||||
} else
|
||||
y = 115 - _utils->svgaCord(5);
|
||||
|
||||
|
@ -90,10 +95,10 @@ void LabEngine::doWestPaper() {
|
|||
|
||||
paperFont = _resource->getFont("P:Note.fon");
|
||||
paperText = _resource->getText("Lab:Rooms/Col1");
|
||||
charsPrinted = _graphics->flowTextScaled(paperFont, -4, 0, 0, false, false, false, true, 45, y, 158, 148, paperText);
|
||||
charsPrinted = _graphics->flowTextScaled(paperFont, -4, 0, 0, false, false, false, true, Common::Rect(45, y, 158, 148), paperText);
|
||||
delete[] paperText;
|
||||
paperText = _resource->getText("Lab:Rooms/Col2");
|
||||
charsPrinted = _graphics->flowTextScaled(paperFont, -4, 0, 0, false, false, false, true, 162, y, 275, 148, paperText);
|
||||
charsPrinted = _graphics->flowTextScaled(paperFont, -4, 0, 0, false, false, false, true, Common::Rect(162, y, 275, 148), paperText);
|
||||
delete[] paperText;
|
||||
_graphics->closeFont(paperFont);
|
||||
|
||||
|
@ -167,7 +172,7 @@ void LabEngine::drawJournalText() {
|
|||
while (drawingToPage < _journalPage) {
|
||||
_music->updateMusic();
|
||||
curText = (char *)(_journalText + charsDrawn);
|
||||
charsDrawn += _graphics->flowTextScaled(_journalFont, -2, 2, 0, false, false, false, false, 52, 32, 152, 148, curText);
|
||||
charsDrawn += _graphics->flowTextScaled(_journalFont, -2, 2, 0, false, false, false, false, Common::Rect(52, 32, 152, 148), curText);
|
||||
|
||||
_lastPage = (*curText == 0);
|
||||
|
||||
|
@ -179,16 +184,16 @@ void LabEngine::drawJournalText() {
|
|||
|
||||
if (_journalPage <= 1) {
|
||||
curText = _journalTextTitle;
|
||||
_graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, true, true, true, _utils->vgaScaleX(52), _utils->vgaScaleY(32), _utils->vgaScaleX(152), _utils->vgaScaleY(148), curText);
|
||||
_graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, true, true, true, _utils->vgaRectScale(52, 32, 152, 148), curText);
|
||||
} else {
|
||||
curText = (char *)(_journalText + charsDrawn);
|
||||
charsDrawn += _graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, false, false, true, _utils->vgaScaleX(52), _utils->vgaScaleY(32), _utils->vgaScaleX(152), _utils->vgaScaleY(148), curText);
|
||||
charsDrawn += _graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, false, false, true, _utils->vgaRectScale(52, 32, 152, 148), curText);
|
||||
}
|
||||
|
||||
_music->updateMusic();
|
||||
curText = (char *)(_journalText + charsDrawn);
|
||||
_lastPage = (*curText == 0);
|
||||
_graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, false, false, true, _utils->vgaScaleX(171), _utils->vgaScaleY(32), _utils->vgaScaleX(271), _utils->vgaScaleY(148), curText);
|
||||
_graphics->flowTextToMem(_journalBackImage, _journalFont, -2, 2, 0, false, false, false, true, _utils->vgaRectScale(171, 32, 271, 148), curText);
|
||||
|
||||
curText = (char *)(_journalText + charsDrawn);
|
||||
_lastPage |= (*curText == 0);
|
||||
|
@ -331,7 +336,7 @@ void LabEngine::doJournal() {
|
|||
/**
|
||||
* Draws the text for the monitor.
|
||||
*/
|
||||
void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16 y1, uint16 x2, uint16 y2, bool isinteractive) {
|
||||
void LabEngine::drawMonText(char *text, TextFont *monitorFont, Common::Rect textRect, bool isinteractive) {
|
||||
uint16 drawingToPage = 0, yspacing = 0;
|
||||
int charsDrawn = 0;
|
||||
char *curText = text;
|
||||
|
@ -346,7 +351,7 @@ void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16
|
|||
text += 2;
|
||||
|
||||
uint16 fheight = _graphics->textHeight(monitorFont);
|
||||
x1 = _monitorButton->_width + _utils->vgaScaleX(3);
|
||||
textRect.left = _monitorButton->_width + _utils->vgaScaleX(3);
|
||||
_monitorButtonHeight = _monitorButton->_height + _utils->vgaScaleY(3);
|
||||
|
||||
if (_monitorButtonHeight > fheight)
|
||||
|
@ -355,22 +360,22 @@ void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16
|
|||
_monitorButtonHeight = fheight;
|
||||
|
||||
_graphics->setPen(0);
|
||||
_graphics->rectFill(0, 0, _graphics->_screenWidth - 1, y2);
|
||||
_graphics->rectFill(0, 0, _graphics->_screenWidth - 1, textRect.bottom);
|
||||
|
||||
for (uint16 i = 0; i < numlines; i++)
|
||||
_monitorButton->drawImage(0, i * _monitorButtonHeight);
|
||||
} else if (isinteractive) {
|
||||
_graphics->setPen(0);
|
||||
_graphics->rectFill(0, 0, _graphics->_screenWidth - 1, y2);
|
||||
_graphics->rectFill(0, 0, _graphics->_screenWidth - 1, textRect.bottom);
|
||||
} else {
|
||||
_graphics->setPen(0);
|
||||
_graphics->rectFill(x1, y1, x2, y2);
|
||||
_graphics->rectFill(textRect);
|
||||
}
|
||||
|
||||
while (drawingToPage < _monitorPage) {
|
||||
_music->updateMusic();
|
||||
curText = (char *)(text + charsDrawn);
|
||||
charsDrawn += _graphics->flowText(monitorFont, yspacing, 0, 0, false, false, false, false, x1, y1, x2, y2, curText);
|
||||
charsDrawn += _graphics->flowText(monitorFont, yspacing, 0, 0, false, false, false, false, textRect, curText);
|
||||
_lastPage = (*curText == 0);
|
||||
|
||||
if (_lastPage)
|
||||
|
@ -381,7 +386,7 @@ void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16
|
|||
|
||||
curText = (char *)(text + charsDrawn);
|
||||
_lastPage = (*curText == 0);
|
||||
charsDrawn = _graphics->flowText(monitorFont, yspacing, 2, 0, false, false, false, true, x1, y1, x2, y2, curText);
|
||||
charsDrawn = _graphics->flowText(monitorFont, yspacing, 2, 0, false, false, false, true, textRect, curText);
|
||||
curText += charsDrawn;
|
||||
_lastPage |= (*curText == 0);
|
||||
|
||||
|
@ -391,7 +396,7 @@ void LabEngine::drawMonText(char *text, TextFont *monitorFont, uint16 x1, uint16
|
|||
/**
|
||||
* Processes user input.
|
||||
*/
|
||||
void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isInteractive, uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
||||
void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isInteractive, Common::Rect textRect) {
|
||||
const char *startFileName = _monitorTextFilename;
|
||||
CloseDataPtr startClosePtr = _closeDataPtr, lastClosePtr[10];
|
||||
uint16 depth = 0;
|
||||
|
@ -415,7 +420,7 @@ void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isIntera
|
|||
|
||||
ntext = _resource->getText(_monitorTextFilename);
|
||||
_graphics->fade(false, 0);
|
||||
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isInteractive);
|
||||
drawMonText(ntext, monitorFont, textRect, isInteractive);
|
||||
_graphics->fade(true, 0);
|
||||
delete[] ntext;
|
||||
}
|
||||
|
@ -455,19 +460,19 @@ void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isIntera
|
|||
}
|
||||
} else if (_monitorPage > 0) {
|
||||
_monitorPage = 0;
|
||||
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isInteractive);
|
||||
drawMonText(ntext, monitorFont, textRect, isInteractive);
|
||||
}
|
||||
} else if (mouseX < _utils->vgaScaleX(259)) {
|
||||
return;
|
||||
} else if (mouseX <= _utils->vgaScaleX(289)) {
|
||||
if (!_lastPage) {
|
||||
_monitorPage += 1;
|
||||
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isInteractive);
|
||||
drawMonText(ntext, monitorFont, textRect, isInteractive);
|
||||
}
|
||||
} else if (_monitorPage >= 1) {
|
||||
// mouseX between 290 and 320 (scaled)
|
||||
_monitorPage -= 1;
|
||||
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isInteractive);
|
||||
drawMonText(ntext, monitorFont, textRect, isInteractive);
|
||||
}
|
||||
} else if (isInteractive) {
|
||||
CloseDataPtr tmpClosePtr = _closeDataPtr;
|
||||
|
@ -488,12 +493,8 @@ void LabEngine::processMonitor(char *ntext, TextFont *monitorFont, bool isIntera
|
|||
/**
|
||||
* Does what's necessary for the monitor.
|
||||
*/
|
||||
void LabEngine::doMonitor(char *background, char *textfile, bool isinteractive, uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
|
||||
x1 = _utils->vgaScaleX(x1);
|
||||
x2 = _utils->vgaScaleX(x2);
|
||||
y1 = _utils->vgaScaleY(y1);
|
||||
y2 = _utils->vgaScaleY(y2);
|
||||
|
||||
void LabEngine::doMonitor(char *background, char *textfile, bool isinteractive, Common::Rect textRect) {
|
||||
Common::Rect scaledRect = _utils->vgaRectScale(textRect.left, textRect.top, textRect.right, textRect.bottom);
|
||||
_monitorTextFilename = textfile;
|
||||
|
||||
_graphics->blackAllScreen();
|
||||
|
@ -514,10 +515,10 @@ void LabEngine::doMonitor(char *background, char *textfile, bool isinteractive,
|
|||
|
||||
char *ntext = _resource->getText(textfile);
|
||||
_graphics->loadBackPict(background, _highPalette);
|
||||
drawMonText(ntext, monitorFont, x1, y1, x2, y2, isinteractive);
|
||||
drawMonText(ntext, monitorFont, scaledRect, isinteractive);
|
||||
_event->mouseShow();
|
||||
_graphics->fade(true, 0);
|
||||
processMonitor(ntext, monitorFont, isinteractive, x1, y1, x2, y2);
|
||||
processMonitor(ntext, monitorFont, isinteractive, scaledRect);
|
||||
_graphics->fade(false, 0);
|
||||
_event->mouseHide();
|
||||
delete[] ntext;
|
||||
|
|
|
@ -94,6 +94,10 @@ int16 Utils::vgaScaleY(int16 y) {
|
|||
return y;
|
||||
}
|
||||
|
||||
Common::Rect Utils::vgaRectScale(int16 x1, int16 y1, int16 x2, int16 y2) {
|
||||
return Common::Rect(vgaScaleX(x1), vgaScaleY(y1), vgaScaleX(x2), vgaScaleY(y2));
|
||||
}
|
||||
|
||||
uint16 Utils::svgaCord(uint16 cord) {
|
||||
if (_vm->_isHiRes)
|
||||
return cord;
|
||||
|
|
|
@ -53,6 +53,7 @@ public:
|
|||
uint16 scaleY(uint16 y);
|
||||
int16 vgaScaleX(int16 x);
|
||||
int16 vgaScaleY(int16 y);
|
||||
Common::Rect vgaRectScale(int16 x1, int16 y1, int16 x2, int16 y2);
|
||||
uint16 svgaCord(uint16 cord);
|
||||
uint16 mapScaleX(uint16 x);
|
||||
uint16 mapScaleY(uint16 y);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue