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