SCI: Got rid of GFXW() macro; turned GfxWidget::widfree into destructors

svn-id: r40107
This commit is contained in:
Max Horn 2009-04-24 10:48:25 +00:00
parent 80794a6b5a
commit ebcfd9b016
10 changed files with 222 additions and 273 deletions

View file

@ -66,29 +66,29 @@ enum {
#define ADD_TO_CURRENT_PORT(widget) \
{if (s->port) \
s->port->add(GFXWC(s->port), GFXW(widget)); \
s->port->add(GFXWC(s->port), widget); \
else \
s->picture_port->add(GFXWC(s->visual), GFXW(widget));}
s->picture_port->add(GFXWC(s->visual), widget);}
#define ADD_TO_CURRENT_PICTURE_PORT(widget) \
{if (s->port) \
s->port->add(GFXWC(s->port), GFXW(widget)); \
s->port->add(GFXWC(s->port), widget); \
else \
s->picture_port->add(GFXWC(s->picture_port), GFXW(widget));}
s->picture_port->add(GFXWC(s->picture_port), widget);}
#define ADD_TO_WINDOW_PORT(widget) \
s->wm_port->add(GFXWC(s->wm_port), GFXW(widget));
s->wm_port->add(GFXWC(s->wm_port), widget);
#define FULL_REDRAW()\
if (s->visual) \
s->visual->draw(GFXW(s->visual), gfxw_point_zero); \
s->visual->draw(s->visual, gfxw_point_zero); \
gfxop_update(s->gfx_state);
#if 0
// Used for debugging
#define FULL_INSPECTION()\
if (s->visual) \
s->visual->print(GFXW(s->visual), 0);
s->visual->print(s->visual, 0);
#endif
#define GFX_ASSERT(x) { \
@ -142,9 +142,9 @@ static void reparentize_primary_widget_lists(EngineState *s, GfxPort *newport) {
newport = s->picture_port;
if (s->dyn_views) {
gfxw_remove_widget_from_container(s->dyn_views->_parent, GFXW(s->dyn_views));
gfxw_remove_widget_from_container(s->dyn_views->_parent, s->dyn_views);
newport->add(GFXWC(newport), GFXW(s->dyn_views));
newport->add(GFXWC(newport), s->dyn_views);
}
}
@ -222,7 +222,7 @@ void graph_restore_box(EngineState *s, reg_t handle) {
return;
}
while (port_nr > 2 && !(s->port->_flags & GFXW_FLAG_IMMUNE_TO_SNAPSHOTS) && (gfxw_widget_matches_snapshot(*ptr, GFXW(s->port)))) {
while (port_nr > 2 && !(s->port->_flags & GFXW_FLAG_IMMUNE_TO_SNAPSHOTS) && (gfxw_widget_matches_snapshot(*ptr, s->port))) {
// This shouldn't ever happen, actually, since windows (ports w/ ID > 2) should all be immune
GfxPort *newport = gfxw_find_port(s->visual, port_nr);
SCIkwarn(SCIkERROR, "Port %d is not immune against snapshots!\n", s->port->_ID);
@ -231,12 +231,12 @@ void graph_restore_box(EngineState *s, reg_t handle) {
s->port = newport;
}
if (s->dyn_views && gfxw_widget_matches_snapshot(*ptr, GFXW(s->dyn_views->_parent))) {
if (s->dyn_views && gfxw_widget_matches_snapshot(*ptr, s->dyn_views->_parent)) {
GfxContainer *parent = s->dyn_views->_parent;
do {
parent = parent->_parent;
} while (parent && (gfxw_widget_matches_snapshot(*ptr, GFXW(parent))));
} while (parent && (gfxw_widget_matches_snapshot(*ptr, parent)));
if (!parent) {
SCIkwarn(SCIkERROR, "Attempted widget mass destruction by a snapshot\n");
@ -404,7 +404,7 @@ reg_t kShow(EngineState *s, int funct_nr, int argc, reg_t *argv) {
if (old_map != s->pic_visible_map) {
if (s->pic_visible_map == GFX_MASK_VISUAL) // Full widget redraw
s->visual->draw(GFXW(s->visual), Common::Point(0, 0));
s->visual->draw(s->visual, Common::Point(0, 0));
gfxop_update(s->gfx_state);
sciprintf("Switching visible map to %x\n", s->pic_visible_map);
@ -465,14 +465,14 @@ void _k_graph_rebuild_port_with_color(EngineState *s, gfx_color_t newbgcolor) {
int found = 0;
GfxContainer *parent = s->dyn_views->_parent;
while (parent && !(found |= (GFXW(parent) == GFXW(port))))
while (parent && !(found |= (parent == port)))
parent = parent->_parent;
s->dyn_views = NULL;
}
port->_parent->add(GFXWC(port->_parent), GFXW(newport));
port->widfree(GFXW(port));
port->_parent->add(GFXWC(port->_parent), newport);
delete port;
}
static int activated_icon_bar = 0;
@ -509,8 +509,8 @@ reg_t kGraph(EngineState *s, int funct_nr, int argc, reg_t *argv) {
// have negative width/height). The actual dirty rectangle is constructed in gfxdr_add_dirty().
// FIXME/TODO: We need to change the semantics of this call, so that no fake rectangles are used. As it is, it's
// not possible change rect_t to Common::Rect, as we assume that Common::Rect forms a *valid* rectangle.
ADD_TO_CURRENT_PICTURE_PORT(GFXW(gfxw_new_line(Common::Point(SKPV(2), SKPV(1)), Common::Point(SKPV(4), SKPV(3)),
gfxcolor, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
ADD_TO_CURRENT_PICTURE_PORT(gfxw_new_line(Common::Point(SKPV(2), SKPV(1)), Common::Point(SKPV(4), SKPV(3)),
gfxcolor, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
}
break;
@ -557,7 +557,7 @@ reg_t kGraph(EngineState *s, int funct_nr, int argc, reg_t *argv) {
// FIXME/TODO: this is not right, as some of the dialogs are drawn *behind* some widgets. But at least it works for now
//ADD_TO_CURRENT_PICTURE_PORT(gfxw_new_box(s->gfx_state, area, color, color, GFX_BOX_SHADE_FLAT)); // old code
s->picture_port->add(GFXWC(s->picture_port), GFXW(gfxw_new_box(s->gfx_state, area, color, color, GFX_BOX_SHADE_FLAT)));
s->picture_port->add(GFXWC(s->picture_port), gfxw_new_box(s->gfx_state, area, color, color, GFX_BOX_SHADE_FLAT));
}
break;
@ -583,7 +583,7 @@ reg_t kGraph(EngineState *s, int funct_nr, int argc, reg_t *argv) {
area.y += s->port->zone.y;
if (s->dyn_views && s->dyn_views->_parent == GFXWC(s->port))
s->dyn_views->draw(GFXW(s->dyn_views), Common::Point(0, 0));
s->dyn_views->draw(s->dyn_views, Common::Point(0, 0));
gfxop_update_box(s->gfx_state, area);
@ -1029,9 +1029,9 @@ reg_t kDrawPic(EngineState *s, int funct_nr, int argc, reg_t *argv) {
GFX_ASSERT(gfxop_new_pic(s->gfx_state, pic_nr, 1, palette));
}
s->wm_port->widfree(GFXW(s->wm_port));
s->picture_port->widfree(GFXW(s->picture_port));
s->iconbar_port->widfree(GFXW(s->iconbar_port));
delete s->wm_port;
delete s->picture_port;
delete s->iconbar_port;
s->wm_port = gfxw_new_port(s->visual, NULL, s->gfx_state->pic_port_bounds, s->ega_colors[0], transparent);
s->picture_port = gfxw_new_port(s->visual, NULL, s->gfx_state->pic_port_bounds, s->ega_colors[0], transparent);
@ -1039,9 +1039,9 @@ reg_t kDrawPic(EngineState *s, int funct_nr, int argc, reg_t *argv) {
s->iconbar_port = gfxw_new_port(s->visual, NULL, gfx_rect(0, 0, 320, 200), s->ega_colors[0], transparent);
s->iconbar_port->_flags |= GFXW_FLAG_NO_IMPLICIT_SWITCH;
s->visual->add(GFXWC(s->visual), GFXW(s->picture_port));
s->visual->add(GFXWC(s->visual), GFXW(s->wm_port));
s->visual->add(GFXWC(s->visual), GFXW(s->iconbar_port));
s->visual->add(GFXWC(s->visual), s->picture_port);
s->visual->add(GFXWC(s->visual), s->wm_port);
s->visual->add(GFXWC(s->visual), s->iconbar_port);
s->port = s->picture_port;
@ -1857,12 +1857,12 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
if (!(signal & _K_VIEW_SIG_FLAG_HIDDEN)) {
SCIkdebug(SCIkGRAPHICS, "Adding view at "PREG" to background\n", PRINT_REG(obj));
if (!(gfxw_remove_id(widget->_parent, widget->_ID, widget->_subID) == GFXW(widget))) {
if (!(gfxw_remove_id(widget->_parent, widget->_ID, widget->_subID) == widget)) {
SCIkwarn(SCIkERROR, "Attempt to remove view with ID %x:%x from list failed!\n", widget->_ID, widget->_subID);
BREAKPOINT();
}
s->drop_views->add(GFXWC(s->drop_views), GFXW(gfxw_picviewize_dynview(widget)));
s->drop_views->add(GFXWC(s->drop_views), gfxw_picviewize_dynview(widget));
draw_obj_to_control_map(s, widget);
widget->draw_bounds.y += s->dyn_views->_bounds.y - widget->_parent->_bounds.y;
@ -1871,7 +1871,7 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
} else {
SCIkdebug(SCIkGRAPHICS, "Deleting view at "PREG"\n", PRINT_REG(obj));
widget->_flags |= GFXW_FLAG_VISIBLE;
gfxw_annihilate(GFXW(widget));
gfxw_annihilate(widget);
return -1; // restart: Done in Animate()
}
}
@ -1955,7 +1955,7 @@ static GfxDynView *_k_make_dynview_obj(EngineState *s, reg_t obj, int options, i
widget = gfxw_new_dyn_view(s->gfx_state, pos, z, view_nr, loop, cel, palette, -1, -1, ALIGN_CENTER, ALIGN_BOTTOM, nr);
if (widget) {
widget = (GfxDynView *) gfxw_set_id(GFXW(widget), obj.segment, obj.offset);
widget = (GfxDynView *) gfxw_set_id(widget, obj.segment, obj.offset);
widget = gfxw_dyn_view_set_params(widget, under_bits.segment, under_bitsp, signal, signalp);
widget->_flags |= GFXW_FLAG_IMMUNE_TO_SNAPSHOTS; // Only works the first time 'round'
@ -2012,7 +2012,7 @@ static void _k_make_view_list(EngineState *s, GfxList **widget_list, List *list,
tempWidget = _k_make_dynview_obj(s, obj, options, sequence_nr--, funct_nr, argc, argv);
if (tempWidget)
GFX_ASSERT((*widget_list)->add(GFXWC(*widget_list), GFXW(tempWidget)));
GFX_ASSERT((*widget_list)->add(GFXWC(*widget_list), tempWidget));
node = LOOKUP_NODE(next_node); // Next node
}
@ -2171,14 +2171,14 @@ static void _k_raise_topmost_in_view_list(EngineState *s, GfxList *list, GfxDynV
}
}
gfxw_remove_widget_from_container(view->_parent, GFXW(view));
gfxw_remove_widget_from_container(view->_parent, view);
if (view->signal & _K_VIEW_SIG_FLAG_HIDDEN)
gfxw_hide_widget(GFXW(view));
gfxw_hide_widget(view);
else
gfxw_show_widget(GFXW(view));
gfxw_show_widget(view);
list->add(GFXWC(list), GFXW(view));
list->add(GFXWC(list), view);
_k_raise_topmost_in_view_list(s, list, next);
}
@ -2250,9 +2250,9 @@ void _k_draw_view_list(EngineState *s, GfxList *list, int flags) {
uint16 signal = (flags & _K_DRAW_VIEW_LIST_USE_SIGNAL) ? ((reg_t *)(widget->signalp))->offset : 0;
if (signal & _K_VIEW_SIG_FLAG_HIDDEN)
gfxw_hide_widget(GFXW(widget));
gfxw_hide_widget(widget);
else
gfxw_show_widget(GFXW(widget));
gfxw_show_widget(widget);
if (!(flags & _K_DRAW_VIEW_LIST_USE_SIGNAL)
|| ((flags & _K_DRAW_VIEW_LIST_DISPOSEABLE) && (signal & _K_VIEW_SIG_FLAG_DISPOSE_ME))
@ -2263,9 +2263,9 @@ void _k_draw_view_list(EngineState *s, GfxList *list, int flags) {
// Clear all of those flags
if (signal & _K_VIEW_SIG_FLAG_HIDDEN)
gfxw_hide_widget(GFXW(widget));
gfxw_hide_widget(widget);
else
gfxw_show_widget(GFXW(widget));
gfxw_show_widget(widget);
*((reg_t *)(widget->signalp)) = make_reg(0, signal); // Write the changes back
};
@ -2297,8 +2297,8 @@ reg_t kAddToPic(EngineState *s, int funct_nr, int argc, reg_t *argv) {
priority = KP_SINT(argv[5]);
control = KP_SINT(argv[6]);
widget = GFXW(gfxw_new_dyn_view(s->gfx_state, Common::Point(x, y), 0, view, loop, cel, 0,
priority, -1 /* No priority */ , ALIGN_CENTER, ALIGN_BOTTOM, 0));
widget = gfxw_new_dyn_view(s->gfx_state, Common::Point(x, y), 0, view, loop, cel, 0,
priority, -1 /* No priority */ , ALIGN_CENTER, ALIGN_BOTTOM, 0);
if (!widget) {
SCIkwarn(SCIkERROR, "Attempt to single-add invalid picview (%d/%d/%d)\n", view, loop, cel);
@ -2369,7 +2369,7 @@ reg_t kSetPort(EngineState *s, int funct_nr, int argc, reg_t *argv) {
return NULL_REG;
}
s->port->draw(GFXW(s->port), gfxw_point_zero); // Update the port we're leaving
s->port->draw(s->port, gfxw_point_zero); // Update the port we're leaving
s->port = new_port;
return s->r_acc;
}
@ -2378,7 +2378,7 @@ reg_t kSetPort(EngineState *s, int funct_nr, int argc, reg_t *argv) {
port_origin_x = SKPV(1);
if (SKPV(0) == -10) {
s->port->draw(GFXW(s->port), gfxw_point_zero); // Update the port we're leaving
s->port->draw(s->port, gfxw_point_zero); // Update the port we're leaving
s->port = s->iconbar_port;
activated_icon_bar = 1;
return s->r_acc;
@ -2427,7 +2427,7 @@ reg_t kDrawCel(EngineState *s, int funct_nr, int argc, reg_t *argv) {
new_view = gfxw_new_view(s->gfx_state, Common::Point(x, y), view, loop, cel, 0, priority, -1,
ALIGN_LEFT, ALIGN_TOP, GFXW_VIEW_FLAG_DONT_MODIFY_OFFSET);
ADD_TO_CURRENT_PICTURE_PORT(GFXW(new_view));
ADD_TO_CURRENT_PICTURE_PORT(new_view);
FULL_REDRAW();
return s->r_acc;
@ -2541,7 +2541,7 @@ reg_t kNewWindow(EngineState *s, int funct_nr, int argc, reg_t *argv) {
ADD_TO_WINDOW_PORT(window);
FULL_REDRAW();
window->draw(GFXW(window), gfxw_point_zero);
window->draw(window, gfxw_point_zero);
gfxop_update(s->gfx_state);
s->port = window; // Set active port
@ -3026,11 +3026,11 @@ reg_t kAnimate(EngineState *s, int funct_nr, int argc, reg_t *argv) {
}
_k_update_signals_in_view_list(s->dyn_views, templist);
s->dyn_views->tag(GFXW(s->dyn_views));
s->dyn_views->tag(s->dyn_views);
_k_raise_topmost_in_view_list(s, s->dyn_views, (GfxDynView *)templist->contents);
templist->widfree(GFXW(templist));
delete templist;
s->dyn_views->free_tagged(GFXWC(s->dyn_views)); // Free obsolete dynviews
} // if (cast_list)
@ -3061,7 +3061,7 @@ reg_t kAnimate(EngineState *s, int funct_nr, int argc, reg_t *argv) {
ADD_TO_CURRENT_PICTURE_PORT(s->drop_views);
} else {
assert(s->drop_views);
gfxw_remove_widget_from_container(s->drop_views->_parent, GFXW(s->drop_views));
gfxw_remove_widget_from_container(s->drop_views->_parent, s->drop_views);
ADD_TO_CURRENT_PICTURE_PORT(s->drop_views);
}
@ -3313,7 +3313,7 @@ reg_t kDisplay(EngineState *s, int funct_nr, int argc, reg_t *argv) {
//ADD_TO_CURRENT_PICTURE_PORT(text_handle);
ADD_TO_CURRENT_PICTURE_PORT(GFXW(text_handle));
ADD_TO_CURRENT_PICTURE_PORT(text_handle);
if ((!s->pic_not_valid) && update_immediately) { // Refresh if drawn to valid picture
FULL_REDRAW();
SCIkdebug(SCIkGRAPHICS, "Refreshing display...\n");