SCI: Skip Ports when iterating over Windows in GC
This commit is contained in:
parent
ce288024b4
commit
db536da8d3
4 changed files with 19 additions and 12 deletions
|
@ -89,11 +89,11 @@ static void processEngineHunkList(WorklistManager &wm) {
|
|||
PortList windowList = g_sci->_gfxPorts->_windowList;
|
||||
|
||||
for (PortList::const_iterator it = windowList.begin(); it != windowList.end(); ++it) {
|
||||
// FIXME: We also store Port objects in the window list.
|
||||
// We should add a check that we really only pass windows here...
|
||||
Window *wnd = ((Window *)*it);
|
||||
wm.push(wnd->hSaved1);
|
||||
wm.push(wnd->hSaved2);
|
||||
if ((*it)->isWindow()) {
|
||||
Window *wnd = ((Window *)*it);
|
||||
wm.push(wnd->hSaved1);
|
||||
wm.push(wnd->hSaved2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,10 @@ typedef int GuiResourceId; // is a resource-number and -1 means no parameter giv
|
|||
|
||||
typedef int16 TextAlignment;
|
||||
|
||||
#define PORTS_FIRSTWINDOWID 2
|
||||
#define PORTS_FIRSTSCRIPTWINDOWID 3
|
||||
|
||||
|
||||
struct Port {
|
||||
uint16 id;
|
||||
int16 top, left;
|
||||
|
@ -62,6 +66,8 @@ struct Port {
|
|||
fontHeight(0), fontId(0), greyedOutput(false),
|
||||
penClr(0), backClr(0xFF), penMode(0), counterTillFree(0) {
|
||||
}
|
||||
|
||||
bool isWindow() const { return id >= PORTS_FIRSTWINDOWID && id != 0xFFFF; }
|
||||
};
|
||||
|
||||
struct Window : public Port, public Common::Serializable {
|
||||
|
|
|
@ -246,8 +246,10 @@ void GfxPorts::beginUpdate(Window *wnd) {
|
|||
PortList::iterator it = _windowList.reverse_begin();
|
||||
const PortList::iterator end = Common::find(_windowList.begin(), _windowList.end(), wnd);
|
||||
while (it != end) {
|
||||
// FIXME: We also store Port objects in the window list.
|
||||
// We should add a check that we really only pass windows here...
|
||||
// We also store Port objects in the window list, but they
|
||||
// shouldn't be encountered during this iteration.
|
||||
assert((*it)->isWindow());
|
||||
|
||||
updateWindow((Window *)*it);
|
||||
--it;
|
||||
}
|
||||
|
@ -263,8 +265,10 @@ void GfxPorts::endUpdate(Window *wnd) {
|
|||
assert(it != end);
|
||||
|
||||
while (++it != end) {
|
||||
// FIXME: We also store Port objects in the window list.
|
||||
// We should add a check that we really only pass windows here...
|
||||
// We also store Port objects in the window list, but they
|
||||
// shouldn't be encountered during this iteration.
|
||||
assert((*it)->isWindow());
|
||||
|
||||
updateWindow((Window *)*it);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,9 +37,6 @@ class GfxPaint16;
|
|||
class GfxScreen;
|
||||
class GfxText16;
|
||||
|
||||
#define PORTS_FIRSTWINDOWID 2
|
||||
#define PORTS_FIRSTSCRIPTWINDOWID 3
|
||||
|
||||
// window styles
|
||||
enum {
|
||||
SCI_WINDOWMGR_STYLE_TRANSPARENT = (1 << 0),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue