diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/lab/engine.cpp | 14 | ||||
-rw-r--r-- | engines/lab/eventman.cpp | 25 | ||||
-rw-r--r-- | engines/lab/eventman.h | 6 | ||||
-rw-r--r-- | engines/lab/graphics.cpp | 56 | ||||
-rw-r--r-- | engines/lab/interface.cpp | 48 | ||||
-rw-r--r-- | engines/lab/interface.h | 7 | ||||
-rw-r--r-- | engines/lab/lab.cpp | 2 | ||||
-rw-r--r-- | engines/lab/lab.h | 8 | ||||
-rw-r--r-- | engines/lab/map.cpp | 26 | ||||
-rw-r--r-- | engines/lab/resource.cpp | 2 | ||||
-rw-r--r-- | engines/lab/special.cpp | 29 |
11 files changed, 106 insertions, 117 deletions
diff --git a/engines/lab/engine.cpp b/engines/lab/engine.cpp index f3d13610e3..d300f474ab 100644 --- a/engines/lab/engine.cpp +++ b/engines/lab/engine.cpp @@ -130,9 +130,8 @@ void LabEngine::freeScreens() { /* Permanently flips the imagery of a gadget. */ /******************************************************************************/ void LabEngine::perFlipGadget(uint16 gadgetId) { - Gadget *topGadget = _moveGadgetList; - - while (topGadget) { + for (GadgetList::iterator gadget = _moveGadgetList.begin(); gadget != _moveGadgetList.end(); ++gadget) { + Gadget *topGadget = *gadget; if (topGadget->GadgetID == gadgetId) { Image *tmpImage = topGadget->_image; topGadget->_image = topGadget->_altImage; @@ -144,9 +143,8 @@ void LabEngine::perFlipGadget(uint16 gadgetId) { _event->mouseShow(); } - return; - } else - topGadget = topGadget->NextGadget; + break; + } } } @@ -274,9 +272,9 @@ void LabEngine::interfaceOn() { if (_graphics->_longWinInFront) _event->attachGadgetList(nullptr); else if (_alternate) - _event->attachGadgetList(_invGadgetList); + _event->attachGadgetList(&_invGadgetList); else - _event->attachGadgetList(_moveGadgetList); + _event->attachGadgetList(&_moveGadgetList); } /******************************************************************************/ diff --git a/engines/lab/eventman.cpp b/engines/lab/eventman.cpp index 0b3f71eb63..aeb6fa3b44 100644 --- a/engines/lab/eventman.cpp +++ b/engines/lab/eventman.cpp @@ -57,30 +57,29 @@ static byte MouseData[] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, /* Checks whether or not the cords fall within one of the gadgets in a list */ /* of gadgets. */ /*****************************************************************************/ -Gadget *EventManager::checkGadgetHit(Gadget *gadgetList, Common::Point pos) { - while (gadgetList != NULL) { - if ((pos.x >= gadgetList->x) && (pos.y >= gadgetList->y) && - (pos.x <= (gadgetList->x + gadgetList->_image->_width)) && - (pos.y <= (gadgetList->y + gadgetList->_image->_height)) && - !(GADGETOFF & gadgetList->GadgetFlags)) { +Gadget *EventManager::checkGadgetHit(GadgetList *gadgetList, Common::Point pos) { + for (GadgetList::iterator gadgetItr = gadgetList->begin(); gadgetItr != gadgetList->end(); ++gadgetItr) { + Gadget *gadget = *gadgetItr; + if ((pos.x >= gadget->x) && (pos.y >= gadget->y) && + (pos.x <= (gadget->x + gadget->_image->_width)) && + (pos.y <= (gadget->y + gadget->_image->_height)) && + !(GADGETOFF & gadget->GadgetFlags)) { if (_vm->_isHiRes) { - _hitGadget = gadgetList; + _hitGadget = gadget; } else { mouseHide(); - gadgetList->_altImage->drawImage(gadgetList->x, gadgetList->y); + gadget->_altImage->drawImage(gadget->x, gadget->y); mouseShow(); for (uint16 i = 0; i < 3; i++) _vm->waitTOF(); mouseHide(); - gadgetList->_image->drawImage(gadgetList->x, gadgetList->y); + gadget->_image->drawImage(gadget->x, gadget->y); mouseShow(); } - return gadgetList; - } else { - gadgetList = gadgetList->NextGadget; + return gadget; } } @@ -89,7 +88,7 @@ Gadget *EventManager::checkGadgetHit(Gadget *gadgetList, Common::Point pos) { -void EventManager::attachGadgetList(Gadget *gadgetList) { +void EventManager::attachGadgetList(GadgetList *gadgetList) { if (_screenGadgetList != gadgetList) _lastGadgetHit = nullptr; diff --git a/engines/lab/eventman.h b/engines/lab/eventman.h index 156fb96adc..a156a8a823 100644 --- a/engines/lab/eventman.h +++ b/engines/lab/eventman.h @@ -55,10 +55,10 @@ private: public: EventManager (LabEngine *vm); - Gadget *_screenGadgetList; + GadgetList *_screenGadgetList; Gadget *_hitGadget; - Gadget *checkGadgetHit(Gadget *gadgetList, Common::Point pos); + Gadget *checkGadgetHit(GadgetList *gadgetList, Common::Point pos); void initMouse(); void updateMouse(); void mouseShow(); @@ -67,7 +67,7 @@ public: void setMousePos(Common::Point pos); bool mouseButton(uint16 *x, uint16 *y, bool leftButton); Gadget *mouseGadget(); - void attachGadgetList(Gadget *gadgetList); + void attachGadgetList(GadgetList *gadgetList); void mouseHandler(int flag, Common::Point pos); bool keyPress(uint16 *keyCode); bool haveNextChar(); diff --git a/engines/lab/graphics.cpp b/engines/lab/graphics.cpp index 6c93b516fa..375ab228c6 100644 --- a/engines/lab/graphics.cpp +++ b/engines/lab/graphics.cpp @@ -806,7 +806,7 @@ void DisplayMan::drawPanel() { if (!_vm->_alternate) { setAPen(4); drawHLine(0, VGAScaleY(170) + 1, VGAScaleX(319)); /* The horizontal lines under the black one */ - drawGadgetList(_vm->_moveGadgetList); + drawGadgetList(&_vm->_moveGadgetList); } else { if (_vm->getPlatform() != Common::kPlatformWindows) { drawVLine(VGAScaleX(124), VGAScaleY(170) + 1, VGAScaleY(199)); /* Vertical Black lines */ @@ -832,7 +832,7 @@ void DisplayMan::drawPanel() { drawVLine(VGAScaleX(232), VGAScaleY(170) + 2, VGAScaleY(198)); } - drawGadgetList(_vm->_invGadgetList); + drawGadgetList(&_vm->_invGadgetList); } _vm->_event->mouseShow(); @@ -856,25 +856,16 @@ bool DisplayMan::setUpScreens() { // The key mapping was only set for the Windows version. // It's very convenient to have those shortcut, so I added them // for all versions. (Strangerke) - _vm->_moveGadgetList = createButton(1, y, 0, 't', _vm->_moveImages[0], _vm->_moveImages[1]); - Gadget *curGadget = _vm->_moveGadgetList; - curGadget->NextGadget = createButton(33, y, 1, 'm', _vm->_moveImages[2], _vm->_moveImages[3]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(65, y, 2, 'o', _vm->_moveImages[4], _vm->_moveImages[5]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(97, y, 3, 'c', _vm->_moveImages[6], _vm->_moveImages[7]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(129, y, 4, 'l', _vm->_moveImages[8], _vm->_moveImages[9]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(161, y, 5, 'i', _vm->_moveImages[12], _vm->_moveImages[13]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(193, y, 6, VKEY_LTARROW, _vm->_moveImages[14], _vm->_moveImages[15]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(225, y, 7, VKEY_UPARROW, _vm->_moveImages[16], _vm->_moveImages[17]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(257, y, 8, VKEY_RTARROW, _vm->_moveImages[18], _vm->_moveImages[19]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(289, y, 9, 'p', _vm->_moveImages[10], _vm->_moveImages[11]); + _vm->_moveGadgetList.push_back(createButton( 1, y, 0, 't', _vm->_moveImages[0], _vm->_moveImages[1])); + _vm->_moveGadgetList.push_back(createButton( 33, y, 1, 'm', _vm->_moveImages[2], _vm->_moveImages[3])); + _vm->_moveGadgetList.push_back(createButton( 65, y, 2, 'o', _vm->_moveImages[4], _vm->_moveImages[5])); + _vm->_moveGadgetList.push_back(createButton( 97, y, 3, 'c', _vm->_moveImages[6], _vm->_moveImages[7])); + _vm->_moveGadgetList.push_back(createButton(129, y, 4, 'l', _vm->_moveImages[8], _vm->_moveImages[9])); + _vm->_moveGadgetList.push_back(createButton(161, y, 5, 'i', _vm->_moveImages[12], _vm->_moveImages[13])); + _vm->_moveGadgetList.push_back(createButton(193, y, 6, VKEY_LTARROW, _vm->_moveImages[14], _vm->_moveImages[15])); + _vm->_moveGadgetList.push_back(createButton(225, y, 7, VKEY_UPARROW, _vm->_moveImages[16], _vm->_moveImages[17])); + _vm->_moveGadgetList.push_back(createButton(257, y, 8, VKEY_RTARROW, _vm->_moveImages[18], _vm->_moveImages[19])); + _vm->_moveGadgetList.push_back(createButton(289, y, 9, 'p', _vm->_moveImages[10], _vm->_moveImages[11])); Common::File *invFile = _vm->_resource->openDataFile("P:Inv"); if (_vm->getPlatform() == Common::kPlatformWindows) { @@ -884,25 +875,18 @@ bool DisplayMan::setUpScreens() { for (uint16 imgIdx = 0; imgIdx < 6; imgIdx++) _vm->_invImages[imgIdx] = new Image(invFile); } - _vm->_invGadgetList = createButton(24, y, 0, 'm', _vm->_invImages[0], _vm->_invImages[1]); - curGadget = _vm->_invGadgetList; - curGadget->NextGadget = createButton(56, y, 1, 'g', _vm->_invImages[2], _vm->_invImages[3]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(94, y, 2, 'u', _vm->_invImages[4], _vm->_invImages[5]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(126, y, 3, 'l', _vm->_moveImages[8], _vm->_moveImages[9]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(164, y, 4, VKEY_LTARROW, _vm->_moveImages[14], _vm->_moveImages[15]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(196, y, 5, VKEY_RTARROW, _vm->_moveImages[18], _vm->_moveImages[19]); + _vm->_invGadgetList.push_back(createButton( 24, y, 0, 'm', _vm->_invImages[0], _vm->_invImages[1])); + _vm->_invGadgetList.push_back(createButton( 56, y, 1, 'g', _vm->_invImages[2], _vm->_invImages[3])); + _vm->_invGadgetList.push_back(createButton( 94, y, 2, 'u', _vm->_invImages[4], _vm->_invImages[5])); + _vm->_invGadgetList.push_back(createButton(126, y, 3, 'l', _vm->_moveImages[8], _vm->_moveImages[9])); + _vm->_invGadgetList.push_back(createButton(164, y, 4, VKEY_LTARROW, _vm->_moveImages[14], _vm->_moveImages[15])); + _vm->_invGadgetList.push_back(createButton(196, y, 5, VKEY_RTARROW, _vm->_moveImages[18], _vm->_moveImages[19])); // The windows version has 2 extra gadgets for breadcrumb trail // TODO: the game is really hard to play without those, maybe we could add something to enable that. if (_vm->getPlatform() == Common::kPlatformWindows) { - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(234, y, 6, 'b', _vm->_invImages[6], _vm->_invImages[7]); - curGadget = curGadget->NextGadget; - curGadget->NextGadget = createButton(266, y, 7, 'f', _vm->_invImages[8], _vm->_invImages[9]); + _vm->_invGadgetList.push_back(createButton(234, y, 6, 'b', _vm->_invImages[6], _vm->_invImages[7])); + _vm->_invGadgetList.push_back(createButton(266, y, 7, 'f', _vm->_invImages[8], _vm->_invImages[9])); } delete invFile; diff --git a/engines/lab/interface.cpp b/engines/lab/interface.cpp index 61cfc6c365..d437fd233e 100644 --- a/engines/lab/interface.cpp +++ b/engines/lab/interface.cpp @@ -52,7 +52,6 @@ Gadget *createButton(uint16 x, uint16 y, uint16 id, uint16 key, Image *im, Image gptr->KeyEquiv = key; gptr->_image = im; gptr->_altImage = imalt; - gptr->NextGadget = NULL; return gptr; } else @@ -62,15 +61,12 @@ Gadget *createButton(uint16 x, uint16 y, uint16 id, uint16 key, Image *im, Image -void freeButtonList(Gadget *gptrlist) { - Gadget *next = gptrlist; - - while (next) { - Gadget *gptr = next; - next = next->NextGadget; - - free(gptr); +void freeButtonList(GadgetList *gadgetList) { + for (GadgetList::iterator gadget = gadgetList->begin(); gadget != gadgetList->end(); ++gadget) { + free(*gadget); } + + gadgetList->clear(); } @@ -79,14 +75,12 @@ void freeButtonList(Gadget *gptrlist) { /*****************************************************************************/ /* Draws a gadget list to the screen. */ /*****************************************************************************/ -void drawGadgetList(Gadget *gadlist) { - while (gadlist) { - gadlist->_image->drawImage(gadlist->x, gadlist->y); +void drawGadgetList(GadgetList *gadgetList) { + for (GadgetList::iterator gadget = gadgetList->begin(); gadget != gadgetList->end(); ++gadget) { + (*gadget)->_image->drawImage((*gadget)->x, (*gadget)->y); - if (GADGETOFF & gadlist->GadgetFlags) - disableGadget(gadlist, 1); - - gadlist = gadlist->NextGadget; + if (GADGETOFF & (*gadget)->GadgetFlags) + disableGadget((*gadget), 1); } } @@ -124,24 +118,26 @@ uint16 makeGadgetKeyEquiv(uint16 key) { /* Checks whether or not the cords fall within one of the gadgets in a list */ /* of gadgets. */ /*****************************************************************************/ -Gadget *LabEngine::checkNumGadgetHit(Gadget *gadlist, uint16 key) { +Gadget *LabEngine::checkNumGadgetHit(GadgetList *gadgetList, uint16 key) { uint16 gkey = key - '0'; - while (gadlist != NULL) { - if ((gkey - 1 == gadlist->GadgetID || (gkey == 0 && gadlist->GadgetID == 9) || - (gadlist->KeyEquiv != 0 && makeGadgetKeyEquiv(key) == gadlist->KeyEquiv)) - && !(GADGETOFF & gadlist->GadgetFlags)) { + if (!gadgetList) + return NULL; + + for (GadgetList::iterator gadgetItr = gadgetList->begin(); gadgetItr != gadgetList->end(); ++gadgetItr) { + Gadget *gadget = *gadgetItr; + if ((gkey - 1 == gadget->GadgetID || (gkey == 0 && gadget->GadgetID == 9) || + (gadget->KeyEquiv != 0 && makeGadgetKeyEquiv(key) == gadget->KeyEquiv)) + && !(GADGETOFF & gadget->GadgetFlags)) { _event->mouseHide(); - gadlist->_altImage->drawImage(gadlist->x, gadlist->y); + gadget->_altImage->drawImage(gadget->x, gadget->y); _event->mouseShow(); g_system->delayMillis(80); _event->mouseHide(); - gadlist->_image->drawImage(gadlist->x, gadlist->y); + gadget->_image->drawImage(gadget->x, gadget->y); _event->mouseShow(); - return gadlist; - } else { - gadlist = gadlist->NextGadget; + return gadget; } } diff --git a/engines/lab/interface.h b/engines/lab/interface.h index 42cfb2f0a9..83c8badc15 100644 --- a/engines/lab/interface.h +++ b/engines/lab/interface.h @@ -48,7 +48,6 @@ struct Gadget { uint16 KeyEquiv; // if not zero, a key that activates gadget uint32 GadgetFlags; Image *_image, *_altImage; - Gadget *NextGadget; }; extern Common::KeyState _keyPressed; @@ -57,7 +56,7 @@ extern Common::KeyState _keyPressed; #define GADGETOFF 0x01 - +typedef Common::List<Gadget *> GadgetList; /* Defines for the Class variable in IntuiMessage */ #define SIZEVERIFY 0x00000001 @@ -112,8 +111,8 @@ extern Common::KeyState _keyPressed; /*---------------------------------------------------------------------------*/ Gadget *createButton(uint16 x, uint16 y, uint16 id, uint16 key, Image *im, Image *imalt); -void freeButtonList(void *gptrlist); -void drawGadgetList(Gadget *gadlist); +void freeButtonList(GadgetList *gadgetList); +void drawGadgetList(GadgetList *gadgetList); void disableGadget(Gadget *curgad, uint16 pencolor); void enableGadget(Gadget *curgad); IntuiMessage *getMsg(); diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp index 83f09cdf87..02abf800f5 100644 --- a/engines/lab/lab.cpp +++ b/engines/lab/lab.cpp @@ -103,8 +103,6 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc) for (int i = 0; i < 16; i++) _tiles[i] = nullptr; - _moveGadgetList = nullptr; - _invGadgetList = nullptr; _curFileName = nullptr; _nextFileName = nullptr; _newFileName = nullptr; diff --git a/engines/lab/lab.h b/engines/lab/lab.h index 27bae37d0d..656406d146 100644 --- a/engines/lab/lab.h +++ b/engines/lab/lab.h @@ -61,6 +61,8 @@ enum GameFeatures { #define UPSCROLL 3 #define DOWNSCROLL 4 +typedef Common::List<Gadget *> GadgetList; + class LabEngine : public Engine { public: LabEngine(OSystem *syst, const ADGameDescription *gameDesc); @@ -123,8 +125,8 @@ public: const char *_newFileName; /* When ProcessRoom.c decides to change the filename of the current picture. */ TextFont *_msgFont; - Gadget *_moveGadgetList; - Gadget *_invGadgetList; + GadgetList _moveGadgetList; + GadgetList _invGadgetList; Image *_moveImages[20]; Image *_invImages[10]; Image *_numberImages[10]; @@ -147,7 +149,7 @@ public: void interfaceOff(); void interfaceOn(); void decIncInv(uint16 *CurInv, bool dec); - Gadget *checkNumGadgetHit(Gadget *gadlist, uint16 key); + Gadget *checkNumGadgetHit(GadgetList *gadgetList, uint16 key); IntuiMessage *getMsg(); void drawMap(uint16 CurRoom, uint16 CurMsg, uint16 Floor, bool fadeout, bool fadein); void processMap(uint16 CurRoom); diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp index 40e8eb9d49..a565f31d06 100644 --- a/engines/lab/map.cpp +++ b/engines/lab/map.cpp @@ -56,11 +56,12 @@ extern char *LOWERFLOORS, *MIDDLEFLOORS, *UPPERFLOORS, *MEDMAZEFLOORS, *HEDGEMAZ static uint16 MapGadX[3] = {101, 55, 8}, MapGadY[3] = {105, 105, 105}; -static Gadget downgadget = { 101, 105, 2, VKEY_DNARROW, 0L, NULL, NULL, NULL }, - upgadget = { 55, 105, 1, VKEY_UPARROW, 0L, NULL, NULL, &downgadget }, - backgadget = { 8, 105, 0, 0, 0L, NULL, NULL, &upgadget }; +static Gadget + backgadget = { 8, 105, 0, 0, 0L, NULL, NULL }, + upgadget = { 55, 105, 1, VKEY_UPARROW, 0L, NULL, NULL }, + downgadget = { 101, 105, 2, VKEY_DNARROW, 0L, NULL, NULL }; -static Gadget *MapGadgetList = &backgadget; +static GadgetList *MapGadgetList; #define LOWERFLOOR 1 #define MIDDLEFLOOR 2 @@ -93,9 +94,13 @@ static uint16 mapScaleY(uint16 y) { /* Loads in the map data. */ /*****************************************************************************/ static bool loadMapData() { - Gadget *gptr; uint16 counter; + MapGadgetList = new GadgetList(); + MapGadgetList->push_back(&backgadget); + MapGadgetList->push_back(&upgadget); + MapGadgetList->push_back(&downgadget); + Common::File *mapImages = g_lab->_resource->openDataFile("P:MapImage"); Map = new Image(mapImages); @@ -126,12 +131,10 @@ static bool loadMapData() { delete mapImages; counter = 0; - gptr = MapGadgetList; - while (gptr) { - gptr->x = g_lab->_graphics->VGAScaleX(MapGadX[counter]); - gptr->y = g_lab->_graphics->VGAScaleY(MapGadY[counter]); - gptr = gptr->NextGadget; + for (GadgetList::iterator gadget = MapGadgetList->begin(); gadget != MapGadgetList->end(); ++gadget) { + (*gadget)->x = g_lab->_graphics->VGAScaleX(MapGadX[counter]); + (*gadget)->y = g_lab->_graphics->VGAScaleY(MapGadY[counter]); counter++; } @@ -156,6 +159,9 @@ static bool loadMapData() { } static void freeMapData() { + MapGadgetList->clear(); + delete MapGadgetList; + delete[] Maps; Maps = NULL; } diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp index f8a70cc7c2..c8aea6361c 100644 --- a/engines/lab/resource.cpp +++ b/engines/lab/resource.cpp @@ -225,7 +225,7 @@ int16 *Resource::readConditions(Common::File *file) { RuleList *Resource::readRule(Common::File *file) { char c; - RuleList *rules = new Common::List<Rule *>(); + RuleList *rules = new RuleList(); do { c = file->readByte(); diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp index c4751ce9b6..8afeeeadc6 100644 --- a/engines/lab/special.cpp +++ b/engines/lab/special.cpp @@ -155,7 +155,6 @@ void LabEngine::doWestPaper() { /*****************************************************************************/ static bool loadJournalData() { char filename[20]; - Gadget *TopGadget = &BackG; bool bridge, dirty, news, clean; journalFont = g_lab->_resource->getFont("P:Journal.fon"); // FIXME: memory leak @@ -206,16 +205,21 @@ static bool loadJournalData() { uint16 counter = 0; - while (TopGadget) { - TopGadget->x = g_lab->_graphics->VGAScaleX(JGadX[counter]); + GadgetList journalGadgetList; + journalGadgetList.push_back(&BackG); + journalGadgetList.push_back(&CancelG); + journalGadgetList.push_back(&ForwardG); + + for (GadgetList::iterator gadgetIter = journalGadgetList.begin(); gadgetIter != journalGadgetList.end(); ++gadgetIter) { + Gadget *gadget = *gadgetIter; + gadget->x = g_lab->_graphics->VGAScaleX(JGadX[counter]); if (counter == 1) - TopGadget->y = g_lab->_graphics->VGAScaleY(JGadY[counter]) + g_lab->_graphics->SVGACord(1); + gadget->y = g_lab->_graphics->VGAScaleY(JGadY[counter]) + g_lab->_graphics->SVGACord(1); else - TopGadget->y = g_lab->_graphics->VGAScaleY(JGadY[counter]) - g_lab->_graphics->SVGACord(1); + gadget->y = g_lab->_graphics->VGAScaleY(JGadY[counter]) - g_lab->_graphics->SVGACord(1); - TopGadget->GadgetID = counter; - TopGadget = TopGadget->NextGadget; + gadget->GadgetID = counter; counter++; } @@ -372,6 +376,11 @@ void LabEngine::processJournal() { /* Does the journal processing. */ /*****************************************************************************/ void LabEngine::doJournal() { + GadgetList journalGadgetList; + journalGadgetList.push_back(&BackG); + journalGadgetList.push_back(&CancelG); + journalGadgetList.push_back(&ForwardG); + _graphics->blackAllScreen(); lastpage = false; @@ -381,9 +390,6 @@ void LabEngine::doJournal() { JBackImage._height = _graphics->_screenHeight; JBackImage._imageData = NULL; - BackG.NextGadget = &CancelG; - CancelG.NextGadget = &ForwardG; - ScreenImage = JBackImage; ScreenImage._imageData = _graphics->getCurrentDrawingBuffer(); @@ -392,12 +398,13 @@ void LabEngine::doJournal() { drawJournal(0, true); - _event->attachGadgetList(&BackG); + _event->attachGadgetList(&journalGadgetList); _event->mouseShow(); processJournal(); _event->attachGadgetList(NULL); _graphics->fade(false, 0); _event->mouseHide(); + journalGadgetList.clear(); ScreenImage._imageData = _graphics->getCurrentDrawingBuffer(); |