SCI: fix crash due accessing invalid object (implemented deleteScreenitem)

svn-id: r46993
This commit is contained in:
Martin Kiewitz 2010-01-04 22:23:45 +00:00
parent 05a16d7cba
commit a6aaeb70e6
3 changed files with 15 additions and 0 deletions

View File

@ -676,6 +676,10 @@ reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv) {
}
reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv) {
reg_t viewObj = argv[0];
s->_gui->deleteScreenItem(viewObj);
/*
reg_t viewObj = argv[0];
uint16 viewId = GET_SEL32V(s->_segMan, viewObj, view);

View File

@ -844,6 +844,16 @@ void SciGui::addScreenItem(reg_t object) {
_screenItemCount++;
}
void SciGui::deleteScreenItem(reg_t object) {
for (int itemNr = 0; itemNr < _screenItemCount; itemNr++) {
if (_screenItems[itemNr] == object) {
_screenItems.remove_at(itemNr);
_screenItemCount--;
return;
}
}
}
void SciGui::frameOut() {
for (int itemNr = 0; itemNr < _screenItemCount; itemNr++) {
reg_t viewObj = _screenItems[itemNr];

View File

@ -155,6 +155,7 @@ public:
// SCI32
virtual void addScreenItem(reg_t object);
virtual void deleteScreenItem(reg_t object);
virtual void frameOut();
virtual bool debugUndither(bool flag);