{
(*pArea->pRoot->funcs->MoveOut) (pArea, pArea->closure);
- pArea->state = xglAreaAvailable;
+ pArea->closure = (pointer) 0;
+ pArea->state = xglAreaAvailable;
}
static xglAreaPtr
if (!pArea)
return NULL;
- pArea->level = level;
- pArea->x = x;
- pArea->y = y;
- pArea->width = width;
- pArea->height = height;
- pArea->pRoot = pRoot;
- pArea->closure = (pointer) 0;
- pArea->state = xglAreaAvailable;
+ pArea->level = level;
+ pArea->x = x;
+ pArea->y = y;
+ pArea->width = width;
+ pArea->height = height;
+ pArea->pRoot = pRoot;
+ pArea->closure = (pointer) 0;
+ pArea->state = xglAreaAvailable;
while (n--)
pArea->pArea[n] = NULL;
static xglAreaPtr
xglAreaGetTopScoredSubArea (xglAreaPtr pArea)
{
+ if (!pArea)
+ return NULL;
+
switch (pArea->state) {
case xglAreaOccupied:
return pArea;
case xglAreaAvailable:
break;
- case xglAreaDivided:
- {
+ case xglAreaDivided: {
xglAreaPtr tmp, top = NULL;
int i;
for (i = 0; i < 4; i++)
{
- if (pArea->pArea[i])
+ tmp = xglAreaGetTopScoredSubArea (pArea->pArea[i]);
+ if (tmp && top)
{
- tmp = xglAreaGetTopScoredSubArea (pArea->pArea[i]);
- if (!tmp)
- break;
-
- if ((!top) ||
- (*pArea->pRoot->funcs->CompareScore) (tmp,
+ if ((*pArea->pRoot->funcs->CompareScore) (tmp,
tmp->closure,
top->closure) > 0)
top = tmp;
}
+ else if (tmp)
+ {
+ top = tmp;
+ }
}
return top;
}
}
+
return NULL;
}
pArea->pArea[i] = NULL;
}
- pArea->state = xglAreaAvailable;
+ pArea->closure = (pointer) 0;
+ pArea->state = xglAreaAvailable;
if (xglFindArea (pArea, width, height, TRUE, closure))
return TRUE;