[Scummvm-cvs-logs] SF.net SVN: scummvm:[40107] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Fri Apr 24 12:48:25 CEST 2009


Revision: 40107
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40107&view=rev
Author:   fingolfin
Date:     2009-04-24 10:48:25 +0000 (Fri, 24 Apr 2009)

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

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kevent.cpp
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/kmenu.cpp
    scummvm/trunk/engines/sci/engine/kpathing.cpp
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp
    scummvm/trunk/engines/sci/gfx/gfx_gui.cpp
    scummvm/trunk/engines/sci/gfx/gfx_state_internal.h
    scummvm/trunk/engines/sci/gfx/gfx_widgets.cpp
    scummvm/trunk/engines/sci/gfx/gfx_widgets.h

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -179,10 +179,10 @@
 
 	s->pics_drawn_nr = 0;
 
-	s->visual->add(GFXWC(s->visual), GFXW(s->wm_port));
-	s->visual->add(GFXWC(s->visual), GFXW(s->titlebar_port));
-	s->visual->add(GFXWC(s->visual), GFXW(s->picture_port));
-	s->visual->add(GFXWC(s->visual), GFXW(s->iconbar_port));
+	s->visual->add(GFXWC(s->visual), s->wm_port);
+	s->visual->add(GFXWC(s->visual), s->titlebar_port);
+	s->visual->add(GFXWC(s->visual), s->picture_port);
+	s->visual->add(GFXWC(s->visual), s->iconbar_port);
 	// Add ports to visual
 
 	s->port = s->picture_port; // Currently using the picture port
@@ -210,7 +210,7 @@
 static void _free_graphics_input(EngineState *s) {
 	sciprintf("Freeing graphics\n");
 
-	s->visual->widfree(GFXW(s->visual));
+	delete s->visual;
 
 	s->wm_port = s->titlebar_port = s->picture_port = NULL;
 	s->visual = NULL;

Modified: scummvm/trunk/engines/sci/engine/kevent.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kevent.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/kevent.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -98,7 +98,7 @@
 			s->onscreen_console = 1;
 		} else if ((e.buckybits & SCI_EVM_CTRL) && (e.data == '1')) {
 			if (s->visual)
-				s->visual->print(GFXW(s->visual), 0);
+				s->visual->print(s->visual, 0);
 		} else {
 			PUT_SEL32V(obj, type, SCI_EVT_KEYBOARD); // Keyboard event
 			s->r_acc = make_reg(0, 1);

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -66,29 +66,29 @@
 
 #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 @@
 		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 @@
 		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 @@
 			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 @@
 		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 @@
 		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 @@
 		// 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 @@
 
 		// 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 @@
 		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 @@
 		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 @@
 	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 @@
 
 					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 @@
 					} 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 @@
 	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 @@
 
 		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 @@
 			}
 		}
 
-		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 @@
 			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 @@
 					// 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 @@
 		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 @@
 			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 @@
 		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 @@
 	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 @@
 	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 @@
 		}
 
 		_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 @@
 			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 @@
 
 	//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");

Modified: scummvm/trunk/engines/sci/engine/kmenu.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmenu.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/kmenu.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -96,7 +96,7 @@
 	else
 		sciw_set_status_bar(s, s->titlebar_port, "", 0, 0);
 
-	s->titlebar_port->draw(GFXW(s->titlebar_port), Common::Point(0, 0));
+	s->titlebar_port->draw(s->titlebar_port, Common::Point(0, 0));
 	gfxop_update(s->gfx_state);
 
 	return s->r_acc;
@@ -118,7 +118,7 @@
 }
 
 #define FULL_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);
 
 
@@ -215,7 +215,7 @@
 
 				case '`':
 					if (ev.buckybits & SCI_EVM_CTRL)
-						s->visual->print(GFXW(s->visual), 0);
+						s->visual->print(s->visual, 0);
 					break;
 
 				case SCI_K_ESC:
@@ -284,11 +284,10 @@
 
 				sciw_set_menubar(s, s->titlebar_port, s->_menubar, menu_nr);
 
-				if (port)
-					port->widfree(GFXW(port));
+				delete port;
 
 				port = sciw_new_menu(s, s->titlebar_port, s->_menubar, menu_nr);
-				s->wm_port->add(GFXWC(s->wm_port), GFXW(port));
+				s->wm_port->add(GFXWC(s->wm_port), port);
 
 				if (item_nr > -1)
 					old_item = -42; /* Enforce redraw in next step */
@@ -311,7 +310,7 @@
 		} /* while (menu_mode) */
 
 		if (port) {
-			port->widfree(GFXW(port));
+			delete port;
 			port = NULL;
 
 			sciw_set_status_bar(s, s->titlebar_port, s->_statusBarText, s->status_bar_foreground, s->status_bar_background);

Modified: scummvm/trunk/engines/sci/engine/kpathing.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kpathing.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/kpathing.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -1543,7 +1543,7 @@
 
 		if (!port->decorations) {
 			port->decorations = gfxw_new_list(gfx_rect(0, 0, 320, 200), 0);
-			port->decorations->set_visual(GFXW(port->decorations), port->_visual);
+			port->decorations->set_visual(port->decorations, port->_visual);
 		} else {
 			port->decorations->free_contents(port->decorations);
 		}

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -1613,7 +1613,7 @@
 		return 1;
 	}
 
-	s->visual->draw(GFXW(s->visual), Common::Point(0, 0));
+	s->visual->draw(s->visual, Common::Point(0, 0));
 	gfxop_update_box(s->gfx_state, gfx_rect(0, 0, 320, 200));
 	gfxop_update(s->gfx_state);
 	gfxop_sleep(s->gfx_state, 0);
@@ -1688,7 +1688,7 @@
 	}
 
 	if (port)
-		port->print(GFXW(port), 0);
+		port->print(port, 0);
 	else
 		sciprintf("No such port.\n");
 
@@ -1722,7 +1722,7 @@
 	}
 
 	if (s->visual)
-		s->visual->print(GFXW(s->visual), 0);
+		s->visual->print(s->visual, 0);
 	else
 		sciprintf("visual is uninitialized.\n");
 
@@ -1738,7 +1738,7 @@
 	if (!s->dyn_views)
 		sciprintf("No dynview list active.\n");
 	else
-		s->dyn_views->print(GFXW(s->dyn_views), 0);
+		s->dyn_views->print(s->dyn_views, 0);
 
 	return 0;
 }
@@ -1752,7 +1752,7 @@
 	if (!s->drop_views)
 		sciprintf("No dropped dynview list active.\n");
 	else
-		s->drop_views->print(GFXW(s->drop_views), 0);
+		s->drop_views->print(s->drop_views, 0);
 
 	return 0;
 }
@@ -1822,7 +1822,7 @@
 	switch (map) {
 	case 0:
 		s->visual->add_dirty_abs(GFXWC(s->visual), gfx_rect(0, 0, 320, 200), 0);
-		s->visual->draw(GFXW(s->visual), Common::Point(0, 0));
+		s->visual->draw(s->visual, Common::Point(0, 0));
 		break;
 
 	case 1:
@@ -2007,7 +2007,7 @@
 
 	gfxop_set_pointer_cursor(s->gfx_state, GFXOP_NO_POINTER);
 	sciprintf("Flushing resources...\n");
-	s->visual->widfree(GFXW(s->visual));
+	delete s->visual;
 	s->gfx_state->gfxResMan->freeAllResources();
 	s->visual = NULL;
 

Modified: scummvm/trunk/engines/sci/gfx/gfx_gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_gui.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/gfx/gfx_gui.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -40,7 +40,7 @@
 
 static void clear_titlebar(GfxPort *titlebar) {
 	if (titlebar->contents) {
-		titlebar->contents->widfree(titlebar->contents);
+		delete titlebar->contents;
 		titlebar->contents = NULL;
 		titlebar->nextpp = &(titlebar->contents);
 	}
@@ -111,10 +111,10 @@
 		list->add((GfxContainer *)list, (GfxWidget *)bgbox);
 	}
 
-	list->add(GFXWC(status_bar), GFXW(list));
+	list->add(GFXWC(status_bar), list);
 	finish_titlebar_list(s, list, status_bar);
 
-	status_bar->draw(GFXW(status_bar), gfxw_point_zero);
+	status_bar->draw(status_bar, gfxw_point_zero);
 	gfxop_update(state);
 }
 
@@ -280,14 +280,14 @@
 		bgcolor = &(port->_bgcolor);
 	}
 
-	list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, zone, font, text, align, ALIGN_TOP,
-	                            *color1, *color2, *bgcolor, flags)));
+	list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, zone, font, text, align, ALIGN_TOP,
+	                            *color1, *color2, *bgcolor, flags));
 
 	zone.width--;
 	zone.height -= 2;
 
 	if (framed) {
-		list->add(GFXWC(list), GFXW(gfxw_new_rect(zone, *color2, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_STIPPLED)));
+		list->add(GFXWC(list), gfxw_new_rect(zone, *color2, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_STIPPLED));
 	}
 
 	return list;
@@ -304,7 +304,7 @@
 
 	list = gfxw_new_list(_move_and_extend_rect(zone, Common::Point(port->zone.x, port->zone.y), 1), 0);
 
-	gfxw_set_id(GFXW(list), ID.segment, ID.offset);
+	gfxw_set_id(list, ID.segment, ID.offset);
 
 	zone.x = 0;
 	zone.y = 0;
@@ -314,10 +314,10 @@
 		                              text, font, ALIGN_CENTER, 0, inverse, kFontIgnoreLF, grayed_out);
 
 		list->add(GFXWC(list),
-		          GFXW(gfxw_new_rect(zone, *frame_col, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+		          gfxw_new_rect(zone, *frame_col, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 	} else {
-		list->add(GFXWC(list), GFXW(gfxw_new_box(NULL, gfx_rect(zone.x, zone.y, zone.width + 1, zone.height + 1),
-		                            port->_color, port->_color, GFX_BOX_SHADE_FLAT)));
+		list->add(GFXWC(list), gfxw_new_box(NULL, gfx_rect(zone.x, zone.y, zone.width + 1, zone.height + 1),
+		                            port->_color, port->_color, GFX_BOX_SHADE_FLAT));
 
 		list = _sciw_add_text_to_list(list, port, gfx_rect(zone.x + 1, zone.y + 2, zone.width - 1, zone.height),
 		                              text, font, ALIGN_CENTER, 0, inverse, kFontIgnoreLF, grayed_out);
@@ -325,8 +325,8 @@
 
 	if (selected)
 		list->add(GFXWC(list),
-		          GFXW(gfxw_new_rect(gfx_rect(zone.x + 1, zone.y + 1, zone.width - 2, zone.height - 2),
-		                             *frame_col, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+		          gfxw_new_rect(gfx_rect(zone.x + 1, zone.y + 1, zone.width - 2, zone.height - 2),
+		                             *frame_col, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 
 	return list;
 }
@@ -335,7 +335,7 @@
 								   gfx_alignment_t align, char framed, char inverse) {
 	GfxList *list = gfxw_new_list(_move_and_extend_rect(zone, Common::Point(port->zone.x, port->zone.y), 2), 0);
 
-	gfxw_set_id(GFXW(list), ID.segment, ID.offset);
+	gfxw_set_id(list, ID.segment, ID.offset);
 
 	zone.x = 0;
 	zone.y = 0;
@@ -356,7 +356,7 @@
 	zone.height++;
 
 	list = gfxw_new_list(_move_and_extend_rect(zone, Common::Point(port->zone.x, port->zone.y), 1), 0);
-	gfxw_set_id(GFXW(list), ID.segment, ID.offset);
+	gfxw_set_id(list, ID.segment, ID.offset);
 	zone.x = 1;
 	zone.y = 1;
 
@@ -364,7 +364,7 @@
 		text_handle = gfxw_new_text(port->_visual->gfx_state, zone, font, text, ALIGN_LEFT, ALIGN_TOP,
 		                            port->_color, port->_color, port->_bgcolor, kFontNoNewlines);
 
-		list->add(GFXWC(list), GFXW(text_handle));
+		list->add(GFXWC(list), text_handle);
 	} else {
 		char *textdup = (char *)sci_malloc(strlen(text) + 1);
 
@@ -377,7 +377,7 @@
 			text_handle = gfxw_new_text(port->_visual->gfx_state, zone, font, textdup, ALIGN_LEFT, ALIGN_TOP,
 			                            port->_color, port->_color, port->_bgcolor, kFontNoNewlines);
 
-			list->add(GFXWC(list), GFXW(text_handle));
+			list->add(GFXWC(list), text_handle);
 			zone.x += text_handle->width;
 		}
 
@@ -386,26 +386,26 @@
 			textdup[1] = 0;
 			text_handle =  gfxw_new_text(port->_visual->gfx_state, zone, font, textdup, ALIGN_LEFT, ALIGN_TOP,
 			                             port->_bgcolor, port->_bgcolor, port->_color, kFontNoNewlines);
-			list->add(GFXWC(list), GFXW(text_handle));
+			list->add(GFXWC(list), text_handle);
 			zone.x += text_handle->width;
 		};
 
 		if (cursor + 1 < strlen(text)) {
 			text_handle = gfxw_new_text(port->_visual->gfx_state, zone, font, text + cursor + 1, ALIGN_LEFT, ALIGN_TOP,
 			                            port->_color, port->_color, port->_bgcolor, kFontNoNewlines);
-			list->add(GFXWC(list), GFXW(text_handle));
+			list->add(GFXWC(list), text_handle);
 			zone.x += text_handle->width;
 		};
 
 		if (cursor == strlen(text))
-			list->add(GFXWC(list), GFXW(gfxw_new_line(Common::Point(zone.x, zone.y), Common::Point(zone.x, zone.y + cursor_height - 1),
-			                            port->_color, GFX_LINE_MODE_FAST, GFX_LINE_STYLE_NORMAL)));
+			list->add(GFXWC(list), gfxw_new_line(Common::Point(zone.x, zone.y), Common::Point(zone.x, zone.y + cursor_height - 1),
+			                            port->_color, GFX_LINE_MODE_FAST, GFX_LINE_STYLE_NORMAL));
 		free(textdup);
 	}
 
 	zone.x = zone.y = 0;
 
-	list->add(GFXWC(list), GFXW(gfxw_new_rect(zone, port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+	list->add(GFXWC(list), gfxw_new_rect(zone, port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 
 	return list;
 }
@@ -414,7 +414,7 @@
 	char frame, char inverse) {
 	GfxList *list = gfxw_new_list(_move_and_extend_rect(zone, Common::Point(port->zone.x, port->zone.y), 1), 0);
 	GfxWidget *icon;
-	gfxw_set_id(GFXW(list), ID.segment, ID.offset);
+	gfxw_set_id(list, ID.segment, ID.offset);
 
 	if (!port->_visual) {
 		GFXERROR("Attempting to create icon control for virtual port!\n");
@@ -424,8 +424,8 @@
 	zone.x = 0;
 	zone.y = 0;
 
-	icon = GFXW(gfxw_new_view(port->_visual->gfx_state, Common::Point(zone.x, zone.y), view, loop, cel, 0, -1, -1,
-	                          ALIGN_LEFT, ALIGN_TOP, GFXW_VIEW_FLAG_DONT_MODIFY_OFFSET));
+	icon = gfxw_new_view(port->_visual->gfx_state, Common::Point(zone.x, zone.y), view, loop, cel, 0, -1, -1,
+	                          ALIGN_LEFT, ALIGN_TOP, GFXW_VIEW_FLAG_DONT_MODIFY_OFFSET);
 
 	if (!icon) {
 		GFXERROR("Attempt to create icon control with cel %d/%d/%d (invalid)\n", view, loop, cel);
@@ -461,13 +461,13 @@
 
 	if (font_height <= 0) {
 		GFXERROR("Attempt to create list control with invalid font %d\n", font_nr);
-		list->widfree(GFXW(list));
+		delete list;
 		return NULL;
 	}
 
 	columns /= font_height;
 
-	gfxw_set_id(GFXW(list), ID.segment, ID.offset);
+	gfxw_set_id(list, ID.segment, ID.offset);
 
 	arr_up[0] = SCI_SPECIAL_CHAR_ARROW_UP;
 	arr_down[0] = SCI_SPECIAL_CHAR_ARROW_DOWN;
@@ -481,15 +481,15 @@
 	for (i = list_top; columns-- && i < entries_nr; i++) {
 		if (i != selection)
 			list->add(GFXWC(list),
-			          GFXW(gfxw_new_text(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 2, font_height),
+			          gfxw_new_text(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 2, font_height),
 			                             font_nr, entries_list[i], ALIGN_LEFT, ALIGN_TOP,
-			                             port->_color, port->_color, port->_bgcolor, kFontNoNewlines)));
+			                             port->_color, port->_color, port->_bgcolor, kFontNoNewlines));
 		else {
-			list->add(GFXWC(list), GFXW(gfxw_new_box(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 1, font_height),
-			                            port->_color, port->_color, GFX_BOX_SHADE_FLAT)));
-			list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 2, font_height),
+			list->add(GFXWC(list), gfxw_new_box(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 1, font_height),
+			                            port->_color, port->_color, GFX_BOX_SHADE_FLAT));
+			list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, gfx_rect(zone.x, zone.y, zone.width - 2, font_height),
 			                             font_nr, entries_list[i], ALIGN_LEFT, ALIGN_TOP,
-			                             port->_bgcolor, port->_bgcolor, port->_color, kFontNoNewlines)));
+			                             port->_bgcolor, port->_bgcolor, port->_color, kFontNoNewlines));
 		}
 
 		zone.y += font_height;
@@ -501,26 +501,26 @@
 	zone.y = 0;
 
 	// Add up arrow
-	list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, gfx_rect(1, 0, zone.width - 2, 8),
+	list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, gfx_rect(1, 0, zone.width - 2, 8),
 	                             port->_font, arr_up, ALIGN_CENTER, ALIGN_CENTER,
-	                             port->_color, port->_color, port->_bgcolor, 0)));
+	                             port->_color, port->_color, port->_bgcolor, 0));
 
 	// Add down arrow
-	list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, gfx_rect(1, zone.height - 9, zone.width - 2, 8),
+	list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, gfx_rect(1, zone.height - 9, zone.width - 2, 8),
 	                             port->_font, arr_down, ALIGN_CENTER, ALIGN_CENTER,
-	                             port->_color, port->_color, port->_bgcolor, 0)));
+	                             port->_color, port->_color, port->_bgcolor, 0));
 
 	if (list_top & 1) { // Hack to work around aggressive caching
-		list->add(GFXWC(list), GFXW(gfxw_new_rect(zone, port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
-		list->add(GFXWC(list), GFXW(gfxw_new_rect(gfx_rect(zone.x, zone.y + 10, zone.width, zone.height - 20),
-		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+		list->add(GFXWC(list), gfxw_new_rect(zone, port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
+		list->add(GFXWC(list), gfxw_new_rect(gfx_rect(zone.x, zone.y + 10, zone.width, zone.height - 20),
+		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 	} else {
 		list->add(GFXWC(list),
-		          GFXW(gfxw_new_rect(gfx_rect(zone.x, zone.y, zone.width, zone.height - 10),
-		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+		          gfxw_new_rect(gfx_rect(zone.x, zone.y, zone.width, zone.height - 10),
+		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 		list->add(GFXWC(list),
-		          GFXW(gfxw_new_rect(gfx_rect(zone.x, zone.y + 10, zone.width, zone.height - 10),
-		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL)));
+		          gfxw_new_rect(gfx_rect(zone.x, zone.y + 10, zone.width, zone.height - 10),
+		                             port->_color, GFX_LINE_MODE_CORRECT, GFX_LINE_STYLE_NORMAL));
 	}
 
 	return list;
@@ -538,19 +538,19 @@
 		int width = menu->_titleWidth + (MENU_BORDER_SIZE * 2);
 
 		if (i == selection) {
-			list->add(GFXWC(list), GFXW(gfxw_new_box(status_bar->_visual->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
-			                            status_bar->_color, status_bar->_color, GFX_BOX_SHADE_FLAT)));
-			list->add(GFXWC(list), GFXW(gfxw_new_text(s->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
+			list->add(GFXWC(list), gfxw_new_box(status_bar->_visual->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
+			                            status_bar->_color, status_bar->_color, GFX_BOX_SHADE_FLAT));
+			list->add(GFXWC(list), gfxw_new_text(s->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
 			                             status_bar->_font, menu->_title.c_str(), ALIGN_CENTER, ALIGN_CENTER,
-			                             status_bar->_bgcolor, status_bar->_bgcolor, status_bar->_color, kFontNoNewlines)));
+			                             status_bar->_bgcolor, status_bar->_bgcolor, status_bar->_color, kFontNoNewlines));
 		} else
-			list->add(GFXWC(list), GFXW(gfxw_new_text(s->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
+			list->add(GFXWC(list), gfxw_new_text(s->gfx_state, gfx_rect(offset, 0, width, MENU_BAR_HEIGHT),
 			                             status_bar->_font, menu->_title.c_str(), ALIGN_CENTER, ALIGN_CENTER,
-			                             status_bar->_color, status_bar->_color, status_bar->_bgcolor, kFontNoNewlines)));
+			                             status_bar->_color, status_bar->_color, status_bar->_bgcolor, kFontNoNewlines));
 		offset += width;
 	}
 
-	status_bar->add(GFXWC(status_bar), GFXW(list));
+	status_bar->add(GFXWC(status_bar), list);
 	finish_titlebar_list(s, list, status_bar);
 }
 
@@ -577,7 +577,7 @@
 	retval = sciw_new_window(s, area, status_bar->_font, status_bar->_color, status_bar->_bgcolor,
 	                         0, status_bar->_color, status_bar->_bgcolor, NULL, kWindowNoDropShadow | kWindowTransparent);
 
-	retval->set_visual(GFXW(retval), s->visual);
+	retval->set_visual(retval, s->visual);
 
 	for (i = 0; i < (int)menu->_items.size(); i++)
 		sciw_toggle_item(retval, menu, i, false);
@@ -597,7 +597,7 @@
 GfxWidget *_make_menu_entry(MenuItem *item, int offset, int width, GfxPort *port, gfx_color_t color, gfx_color_t bgcolor, int ID, int gray) {
 	rect_t area = gfx_rect(MENU_BOX_LEFT_PADDING, 0, width - MENU_BOX_LEFT_PADDING, 10);
 	rect_t list_area = gfx_rect(port->zone.x, area.y + offset + port->zone.y, width, area.height);
-	GfxList *list = (GfxList *) gfxw_set_id(GFXW(gfxw_new_list(list_area, 0)), ID, GFXW_NO_ID);
+	GfxList *list = (GfxList *) gfxw_set_id(gfxw_new_list(list_area, 0), ID, GFXW_NO_ID);
 	gfx_color_t xcolor = { PaletteEntry(), 0, 0, 0, 0};
 
 	color = un_prioritize(color);
@@ -605,32 +605,32 @@
 
 	xcolor = gray ? color : bgcolor;
 
-	list->add(GFXWC(list), GFXW(gfxw_new_box(port->_visual->gfx_state, area, bgcolor, bgcolor, GFX_BOX_SHADE_FLAT)));
-	list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, area, port->_font, item->_text.c_str(), ALIGN_LEFT, ALIGN_CENTER,
-	                            color, xcolor, bgcolor, kFontNoNewlines)));
+	list->add(GFXWC(list), gfxw_new_box(port->_visual->gfx_state, area, bgcolor, bgcolor, GFX_BOX_SHADE_FLAT));
+	list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, area, port->_font, item->_text.c_str(), ALIGN_LEFT, ALIGN_CENTER,
+	                            color, xcolor, bgcolor, kFontNoNewlines));
 
 	if (!item->_keytext.empty()) {
 		area.width -= MENU_BOX_RIGHT_PADDING;
-		list->add(GFXWC(list), GFXW(gfxw_new_text(port->_visual->gfx_state, area, port->_font, item->_keytext.c_str(), ALIGN_RIGHT, ALIGN_CENTER,
-		                            color, xcolor, bgcolor, kFontNoNewlines)));
+		list->add(GFXWC(list), gfxw_new_text(port->_visual->gfx_state, area, port->_font, item->_keytext.c_str(), ALIGN_RIGHT, ALIGN_CENTER,
+		                            color, xcolor, bgcolor, kFontNoNewlines));
 	}
 
-	return GFXW(list);
+	return list;
 }
 
 GfxWidget *_make_menu_hbar(int offset, int width, GfxPort *port, gfx_color_t color, gfx_color_t bgcolor, int ID) {
 	rect_t area = gfx_rect(0, 0, width, 10);
 	rect_t list_area = gfx_rect(area.x + port->zone.x, area.y + offset + port->zone.y, area.width, area.height);
-	GfxList *list = (GfxList *) gfxw_set_id(GFXW(gfxw_new_list(list_area, 0)), ID, GFXW_NO_ID);
+	GfxList *list = (GfxList *) gfxw_set_id(gfxw_new_list(list_area, 0), ID, GFXW_NO_ID);
 
 	color = un_prioritize(color);
 	bgcolor = un_prioritize(bgcolor);
 
-	list->add(GFXWC(list), GFXW(gfxw_new_box(port->_visual->gfx_state, area, bgcolor, bgcolor, GFX_BOX_SHADE_FLAT)));
-	list->add(GFXWC(list), GFXW(gfxw_new_line(Common::Point(0, 5), Common::Point(width, 5), color,
-	                            GFX_LINE_MODE_FAST, GFX_LINE_STYLE_STIPPLED)));
+	list->add(GFXWC(list), gfxw_new_box(port->_visual->gfx_state, area, bgcolor, bgcolor, GFX_BOX_SHADE_FLAT));
+	list->add(GFXWC(list), gfxw_new_line(Common::Point(0, 5), Common::Point(width, 5), color,
+	                            GFX_LINE_MODE_FAST, GFX_LINE_STYLE_STIPPLED));
 
-	return GFXW(list);
+	return list;
 }
 
 GfxPort *sciw_toggle_item(GfxPort *menu_port, Menu *menu, int selection, bool selected) {
@@ -643,11 +643,11 @@
 	MenuItem *item = &menu->_items[selection];
 
 	if (item->_type == MENU_TYPE_NORMAL)
-		menu_port->add(GFXWC(menu_port), GFXW(_make_menu_entry(item, selection * 10, menu_port->zone.width + 1,
-		                                      menu_port, fgColor, bgColor, selection + MAGIC_ID_OFFSET, item->_enabled)));
+		menu_port->add(GFXWC(menu_port), _make_menu_entry(item, selection * 10, menu_port->zone.width + 1,
+		                                      menu_port, fgColor, bgColor, selection + MAGIC_ID_OFFSET, item->_enabled));
 	else
-		menu_port->add(GFXWC(menu_port), GFXW(_make_menu_hbar(selection * 10, menu_port->zone.width + 1,
-		                                      menu_port, fgColor, bgColor, selection + MAGIC_ID_OFFSET)));
+		menu_port->add(GFXWC(menu_port), _make_menu_hbar(selection * 10, menu_port->zone.width + 1,
+		                                      menu_port, fgColor, bgColor, selection + MAGIC_ID_OFFSET));
 
 	return menu_port;
 }

Modified: scummvm/trunk/engines/sci/gfx/gfx_state_internal.h
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_state_internal.h	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/gfx/gfx_state_internal.h	2009-04-24 10:48:25 UTC (rev 40107)
@@ -102,7 +102,6 @@
 public:
 	// TODO: Replace the following with virtual methods
 	gfxw_point_op *draw; /* Draw widget (if dirty) and anything else required for the display to be consistent */
-	gfxw_op *widfree; /* Remove widget (and any sub-widgets it may contain) */
 	gfxw_op *tag; /* Tag the specified widget */
 	gfxw_op_int *print; /* Prints the widget's contents, using sciprintf. Second parameter is indentation. */
 	gfxw_bin_op *compare_to; /* a.compare_to(a, b) returns <0 if a<b, =0 if a=b and >0 if a>b */
@@ -111,7 +110,14 @@
 	gfxw_bin_op *superarea_of; /* a superarea_of b <=> for each pixel of b there exists an opaque pixel in a at the same location */
 	gfxw_visual_op *set_visual; /* Sets the visual the widget belongs to */
 
+public:
 	GfxWidget(gfxw_widget_type_t type);
+
+	/*
+	 * The widget automatically removes itself from its owner, if it has one.
+	 * Deleting a container will recursively free all of its
+	 * contents.
+	 */
 	virtual ~GfxWidget();
 };
 
@@ -178,6 +184,8 @@
 
 	GfxText(gfx_state_t *state, rect_t area, int font, const char *text, gfx_alignment_t halign,
 		gfx_alignment_t valign, gfx_color_t color1, gfx_color_t color2, gfx_color_t bgcolor, int text_flags);
+
+	~GfxText();
 };
 
 
@@ -203,6 +211,7 @@
 	gfxw_container_op *add;  /* Append widget to an appropriate position (for view and control lists) */
 
 	GfxContainer(rect_t area, gfxw_widget_type_t type);
+	~GfxContainer();
 };
 
 
@@ -239,6 +248,7 @@
 	byte gray_text; /* Whether text is 'grayed out' (dithered) */
 
 	GfxPort(GfxVisual *visual, rect_t area, gfx_color_t fgcolor, gfx_color_t bgcolor);
+	~GfxPort();
 };
 
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/gfx/gfx_widgets.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_widgets.cpp	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/gfx/gfx_widgets.cpp	2009-04-24 10:48:25 UTC (rev 40107)
@@ -146,7 +146,6 @@
 	_widgetPriority = -1;
 
 	draw = NULL;
-	widfree = NULL;
 	tag = NULL;
 	print = _gfxwop_print_empty;
 	compare_to = NULL;
@@ -179,32 +178,9 @@
 	return 0;
 }
 
-GfxWidget::~GfxWidget() {
-	_magic = GFXW_MAGIC_INVALID;
-	_gfxw_debug_remove_widget(this);
-}
-
 #define VERIFY_WIDGET(w) \
 	if (verify_widget((GfxWidget *)(w))) { GFXERROR("Error occured while validating widget\n"); }
 
-static void _gfxw_unallocate_widget(gfx_state_t *state, GfxWidget *widget) {
-	if (GFXW_IS_TEXT(widget)) {
-		GfxText *text = (GfxText *) widget;
-
-		if (text->text_handle) {
-			if (!state) {
-				GFXERROR("Attempt to free text without supplying mode to free it from!\n");
-				BREAKPOINT();
-			} else {
-				gfxop_free_text(state, text->text_handle);
-				text->text_handle = NULL;
-			}
-		}
-	}
-
-	delete widget;
-}
-
 #define GFX_ASSERT(_x) \
 { \
 	int retval = (_x); \
@@ -283,10 +259,9 @@
 	return 0;
 }
 
-static void _gfxw_set_ops(GfxWidget *widget, gfxw_point_op *draw, gfxw_op *free, gfxw_op *tag, gfxw_op_int *print,
+static void _gfxw_set_ops(GfxWidget *widget, gfxw_point_op *draw, gfxw_op *tag, gfxw_op_int *print,
 	gfxw_bin_op *compare_to, gfxw_bin_op *equals, gfxw_bin_op *superarea_of) {
 	widget->draw = draw;
-	widget->widfree = free;
 	widget->tag = tag;
 	widget->print = print;
 	widget->compare_to = compare_to;
@@ -321,9 +296,9 @@
 	if (!*seekerp) {
 		GFXERROR("Internal error: Attempt to remove widget from container it was not contained in!\n");
 		sciprintf("Widget:");
-		widget->print(GFXW(widget), 1);
+		widget->print(widget, 1);
 		sciprintf("Container:");
-		widget->print(GFXW(container), 1);
+		widget->print(container, 1);
 		BREAKPOINT();
 		return;
 	}
@@ -336,24 +311,20 @@
 	widget->_next = NULL;
 }
 
-static int _gfxwop_basic_free(GfxWidget *widget) {
-	GfxVisual *visual = widget->_visual;
-	gfx_state_t *state = (visual) ? visual->gfx_state : NULL;
+GfxWidget::~GfxWidget() {
+	DDIRTY(stderr, "BASIC-FREE: SomeAddDirty\n");	// FIXME: What is this?
 
-	DDIRTY(stderr, "BASIC-FREE: SomeAddDirty\n");
-
-	if (widget->_parent) {
-		if (GFXW_IS_CONTAINER(widget))
-			widget->_parent->add_dirty_abs(widget->_parent, widget->_bounds, 1);
+	if (_parent) {
+		if (GFXW_IS_CONTAINER(this))
+			_parent->add_dirty_abs(_parent, _bounds, 1);
 		else
-			widget->_parent->add_dirty_rel(widget->_parent, widget->_bounds, 1);
+			_parent->add_dirty_rel(_parent, _bounds, 1);
 
-		gfxw_remove_widget_from_container(widget->_parent, widget);
+		gfxw_remove_widget_from_container(_parent, this);
 	}
 
-	_gfxw_unallocate_widget(state, widget);
-
-	return 0;
+	_magic = GFXW_MAGIC_INVALID;
+	_gfxw_debug_remove_widget(this);
 }
 
 static int _gfxwop_basic_tag(GfxWidget *widget) {
@@ -448,7 +419,7 @@
 }
 
 void _gfxw_set_ops_BOX(GfxWidget *widget) {
-	_gfxw_set_ops(GFXW(widget), _gfxwop_box_draw, _gfxwop_basic_free, _gfxwop_basic_tag, _gfxwop_box_print,
+	_gfxw_set_ops(widget, _gfxwop_box_draw, _gfxwop_basic_tag, _gfxwop_box_print,
 	              _gfxwop_basic_compare_to, _gfxwop_box_equals, _gfxwop_box_superarea_of);
 }
 
@@ -531,14 +502,14 @@
 }
 
 static int _gfxwop_rect_print(GfxWidget *rect, int indentation) {
-	_gfxw_print_widget(GFXW(rect), indentation);
+	_gfxw_print_widget(rect, indentation);
 	sciprintf("RECT");
 
 	return 0;
 }
 
 void _gfxw_set_ops_RECT(GfxWidget *prim) {
-	_gfxw_set_ops(GFXW(prim), _gfxwop_rect_draw, _gfxwop_basic_free, _gfxwop_basic_tag, _gfxwop_rect_print,
+	_gfxw_set_ops(prim, _gfxwop_rect_draw, _gfxwop_basic_tag, _gfxwop_rect_print,
 	              _gfxwop_basic_compare_to, _gfxwop_primitive_equals, _gfxwop_basic_superarea_of);
 }
 
@@ -583,7 +554,7 @@
 }
 
 void _gfxw_set_ops_LINE(GfxWidget *prim) {
-	_gfxw_set_ops(GFXW(prim), _gfxwop_line_draw, _gfxwop_basic_free, _gfxwop_basic_tag, _gfxwop_line_print,
+	_gfxw_set_ops(prim, _gfxwop_line_draw, _gfxwop_basic_tag, _gfxwop_line_print,
 	              _gfxwop_basic_compare_to, _gfxwop_primitive_equals, _gfxwop_basic_superarea_of);
 }
 
@@ -681,7 +652,7 @@
 }
 
 void _gfxw_set_ops_VIEW(GfxWidget *view, char stat) {
-	_gfxw_set_ops(GFXW(view), (stat) ? _gfxwop_static_view_draw : _gfxwop_view_draw, _gfxwop_basic_free,
+	_gfxw_set_ops(view, (stat) ? _gfxwop_static_view_draw : _gfxwop_view_draw,
 	              _gfxwop_basic_tag, (stat) ? _gfxwop_static_view_print : _gfxwop_view_print,
 	              _gfxwop_basic_compare_to, _gfxwop_basic_equals, _gfxwop_basic_superarea_of);
 }
@@ -818,7 +789,7 @@
 }
 
 void _gfxw_set_ops_DYNVIEW(GfxWidget *widget) {
-	_gfxw_set_ops(GFXW(widget), _gfxwop_dyn_view_draw, _gfxwop_basic_free, _gfxwop_basic_tag,
+	_gfxw_set_ops(widget, _gfxwop_dyn_view_draw, _gfxwop_basic_tag,
 	              _gfxwop_dyn_view_print, _gfxwop_dyn_view_compare_to, _gfxwop_dyn_view_equals, _gfxwop_basic_superarea_of);
 }
 
@@ -897,11 +868,20 @@
 
 //*** Text ***
 
-static int _gfxwop_text_free(GfxWidget *widget) {
-	GfxText *text = (GfxText *)widget;
-	free(text->text);
+GfxText::~GfxText() {
+	free(text);
+	text = NULL;
 
-	return _gfxwop_basic_free(widget);
+	if (text_handle) {
+		gfx_state_t *state = _visual ? _visual->gfx_state : NULL;
+		if (!state) {
+			GFXERROR("Attempt to free text without supplying mode to free it from!\n");
+			BREAKPOINT();
+		} else {
+			gfxop_free_text(state, text_handle);
+			text_handle = NULL;
+		}
+	}
 }
 
 static int _gfxwop_text_draw(GfxWidget *widget, Common::Point pos) {
@@ -974,7 +954,7 @@
 }
 
 void _gfxw_set_ops_TEXT(GfxWidget *widget) {
-	_gfxw_set_ops(GFXW(widget), _gfxwop_text_alloc_and_draw, _gfxwop_text_free, _gfxwop_basic_tag,
+	_gfxw_set_ops(widget, _gfxwop_text_alloc_and_draw, _gfxwop_basic_tag,
 	              _gfxwop_text_print, _gfxwop_text_compare_to, _gfxwop_text_equals,
 	              _gfxwop_basic_superarea_of);
 	widget->should_replace = _gfxwop_text_should_replace;
@@ -1038,12 +1018,12 @@
 	return cont->add_dirty_abs(cont, _move_rect(rect, Common::Point(cont->zone.x, cont->zone.y)), propagate);
 }
 
-static void _gfxw_set_container_ops(GfxContainer *container, gfxw_point_op *draw, gfxw_op *free, gfxw_op *tag,
+static void _gfxw_set_container_ops(GfxContainer *container, gfxw_point_op *draw, gfxw_op *tag,
 	gfxw_op_int *print, gfxw_bin_op *compare_to, gfxw_bin_op *equals,
 	gfxw_bin_op *superarea_of, gfxw_visual_op *set_visual,
 	gfxw_unary_container_op *free_tagged, gfxw_unary_container_op *free_contents,
 	gfxw_rect_op *add_dirty, gfxw_container_op *add) {
-	_gfxw_set_ops(GFXW(container), draw, free, tag, print, compare_to, equals, superarea_of);
+	_gfxw_set_ops(container, draw, tag, print, compare_to, equals, superarea_of);
 
 	container->free_tagged = free_tagged;
 	container->free_contents = free_contents;
@@ -1196,20 +1176,17 @@
 	return 0;
 }
 
-static int _gfxwop_container_free(GfxWidget *widget) {
-	GfxContainer *container = (GfxContainer *)widget;
-	GfxWidget *seeker = container->contents;
+GfxContainer::~GfxContainer() {
+	GfxWidget *seeker = contents;
 
 	while (seeker) {
 		GfxWidget *next = seeker->_next;
-		seeker->widfree(seeker);
+		delete seeker;
 		seeker = next;
 	}
 
-	recursively_free_dirty_rects(container->dirty);
-	container->dirty = NULL;
-
-	return _gfxwop_basic_free(widget);
+	recursively_free_dirty_rects(dirty);
+	dirty = NULL;
 }
 
 static int _gfxwop_container_tag(GfxWidget *widget) {
@@ -1247,16 +1224,16 @@
 }
 
 static int _gfxwop_container_free_tagged(GfxContainer *container) {
-	GfxWidget *seekerp = (container->contents);
+	GfxWidget *seekerp = container->contents;
 
 	while (seekerp) {
 		GfxWidget *redshirt = seekerp;
 
 		if (redshirt->_flags & GFXW_FLAG_TAGGED) {
 			seekerp = (redshirt->_next);
-			redshirt->widfree(redshirt);
+			delete redshirt;
 		} else
-			seekerp = (seekerp)->_next;
+			seekerp = seekerp->_next;
 	}
 
 	return 0;
@@ -1267,7 +1244,7 @@
 
 	while (seeker) {
 		GfxWidget *next = seeker->_next;
-		seeker->widfree(seeker);
+		delete seeker;
 		seeker = next;
 	}
 	return 0;
@@ -1283,9 +1260,9 @@
 static int _parentize_widget(GfxContainer *container, GfxWidget *widget) {
 	if (widget->_parent) {
 		GFXERROR("_gfxwop_container_add(): Attempt to give second parent node to widget!\nWidget:");
-		widget->print(GFXW(widget), 3);
+		widget->print(widget, 3);
 		sciprintf("\nContainer:");
-		container->print(GFXW(container), 3);
+		container->print(container, 3);
 
 		return 1;
 	}
@@ -1316,12 +1293,12 @@
 		return 0;
 
 	if ((*seekerp)->equals(*seekerp, widget) && !(*seekerp)->should_replace(*seekerp, widget)) {
-		widget->widfree(widget);
+		delete widget;
 		(*seekerp)->_flags &= ~GFXW_FLAG_TAGGED;
 		return 1;
 	} else {
 		if (!(widget->_flags & GFXW_FLAG_MULTI_ID))
-			(*seekerp)->widfree(*seekerp);
+			delete *seekerp;
 		return 0;
 	}
 }
@@ -1450,9 +1427,9 @@
 
 	if (widget->_next) {
 		GFXERROR("_gfxwop_sorted_list_add(): Attempt to add widget to two lists!\nWidget:");
-		widget->print(GFXW(widget), 3);
+		widget->print(widget, 3);
 		sciprintf("\nList:");
-		container->print(GFXW(container), 3);
+		container->print(container, 3);
 		BREAKPOINT();
 
 		return 1;
@@ -1463,17 +1440,17 @@
 
 	while (*seekerp && (compare_all || (widget->compare_to(widget, *seekerp) >= 0))) {
 
-		if (widget->equals(GFXW(widget), GFXW(*seekerp))) {
+		if (widget->equals(widget, *seekerp)) {
 			if (compare_all) {
 				if ((*seekerp)->_visual)
-					(*seekerp)->widfree(GFXW(*seekerp)); // If it's a fresh widget
+					delete *seekerp; // If it's a fresh widget
 				else
-					gfxw_annihilate(GFXW(*seekerp));
+					gfxw_annihilate(*seekerp);
 
 				return _gfxwop_ordered_add(container, widget, compare_all); // We might have destroyed the container's contents
 			} else {
 				widget->_next = (*seekerp)->_next;
-				(*seekerp)->widfree(GFXW(*seekerp));
+				delete *seekerp;
 				*seekerp = widget;
 				return (_parentize_widget(container, widget));
 			}
@@ -1496,7 +1473,7 @@
 
 void _gfxw_set_ops_LIST(GfxContainer *list, char sorted) {
 	_gfxw_set_container_ops((GfxContainer *)list, sorted ? _gfxwop_sorted_list_draw : _gfxwop_list_draw,
-	                        _gfxwop_container_free, _gfxwop_container_tag,
+	                        _gfxwop_container_tag,
 	                        sorted ? _gfxwop_sorted_list_print : _gfxwop_list_print,
 	                        _gfxwop_basic_compare_to, sorted ? _gfxwop_basic_equals : _gfxwop_list_equals,
 	                        _gfxwop_basic_superarea_of, _gfxwop_container_set_visual,
@@ -1545,21 +1522,6 @@
 	return 0;
 }
 
-static int _gfxwop_visual_free(GfxWidget *widget) {
-	GfxVisual *visual = (GfxVisual *) widget;
-	int retval;
-
-	if (!GFXW_IS_VISUAL(visual)) {
-		GFXERROR("_gfxwop_visual_free() called on non-visual!Widget was: ");
-		widget->print(widget, 3);
-		return 1;
-	}
-
-	retval = _gfxwop_container_free(widget);
-
-	return 0;
-}
-
 static int _gfxwop_visual_print(GfxWidget *widget, int indentation) {
 	int comma = 0;
 	GfxVisual *visual = (GfxVisual *) widget;
@@ -1588,7 +1550,7 @@
 }
 
 static int _gfxwop_visual_set_visual(GfxWidget *self, GfxVisual *visual) {
-	if (self != GFXW(visual)) {
+	if (self != visual) {
 		GFXWARN("Attempt to set a visual's parent visual to something else!\n");
 	} else {
 		GFXWARN("Attempt to set a visual's parent visual!\n");
@@ -1598,7 +1560,7 @@
 }
 
 void _gfxw_set_ops_VISUAL(GfxContainer *visual) {
-	_gfxw_set_container_ops((GfxContainer *)visual, _gfxwop_visual_draw, _gfxwop_visual_free,
+	_gfxw_set_container_ops((GfxContainer *)visual, _gfxwop_visual_draw,
 	                        _gfxwop_container_tag, _gfxwop_visual_print, _gfxwop_basic_compare_to,
 	                        _gfxwop_basic_equals, _gfxwop_basic_superarea_of, _gfxwop_visual_set_visual,
 	                        _gfxwop_container_free_tagged, _gfxwop_container_free_contents,
@@ -1650,7 +1612,7 @@
 	if (port->decorations) {
 		DDIRTY(stderr, "Getting/applying deco dirty (multi)\n");
 		_gfxwop_add_dirty_rects(GFXWC(port->decorations), port->dirty);
-		if (port->decorations->draw(GFXW(port->decorations), gfxw_point_zero)) {
+		if (port->decorations->draw(port->decorations, gfxw_point_zero)) {
 			port->decorations->dirty = NULL;
 			return 1;
 		}
@@ -1666,29 +1628,20 @@
 	return 0;
 }
 
-static int _gfxwop_port_free(GfxWidget *widget) {
-	GfxPort *port = (GfxPort *) widget;
-
-	if (port->_visual) {
-		GfxVisual *visual = port->_visual;
-		int ID = port->_ID;
-
-		if (ID < 0 || ID >= (int)visual->_portRefs.size()) {
-			GFXWARN("Attempt to free port #%d; allowed: [0..%d]!\n", ID, visual->_portRefs.size());
-			return GFX_ERROR;
+GfxPort::~GfxPort() {
+	if (_visual) {
+		if (_ID < 0 || _ID >= (int)_visual->_portRefs.size()) {
+			error("Attempt to free port #%d; allowed: [0..%d]!\n", _ID, _visual->_portRefs.size());
 		}
 
-		if (visual->_portRefs[ID] != port) {
-			GFXWARN("While freeing port %d: Port is at %p, but port list indicates %p", ID, (void *)port, (void *)visual->_portRefs[ID]);
+		if (_visual->_portRefs[_ID] != this) {
+			GFXWARN("While freeing port %d: Port is at %p, but port list indicates %p", _ID, (void *)this, (void *)_visual->_portRefs[_ID]);
 		} else
-			visual->_portRefs[ID] = NULL;
+			_visual->_portRefs[_ID] = NULL;
 
 	}
 
-	if (port->decorations)
-		port->decorations->widfree(GFXW(port->decorations));
-
-	return _gfxwop_container_free(widget);
+	delete decorations;
 }
 
 static int _gfxwop_port_print(GfxWidget *widget, int indentation) {
@@ -1699,9 +1652,9 @@
 	sciprintf(" font=%d drawpos=(%d,%d)", port->_font, port->draw_pos.x, port->draw_pos.y);
 	if (port->gray_text)
 		sciprintf(" (gray)");
-	_w_gfxwop_container_print(GFXW(port), indentation);
+	_w_gfxwop_container_print(port, indentation);
 
-	return _w_gfxwop_container_print_contents("decorations", GFXW(port->decorations), indentation);
+	return _w_gfxwop_container_print_contents("decorations", port->decorations, indentation);
 }
 
 static int _gfxwop_port_superarea_of(GfxWidget *self, GfxWidget *other) {
@@ -1718,7 +1671,7 @@
 	widget->_visual = visual;
 
 	if (decorations)
-		if (decorations->set_visual(GFXW(decorations), visual)) {
+		if (decorations->set_visual(decorations, visual)) {
 			GFXWARN("Setting the visual for decorations failed for port ");
 			widget->print(widget, 1);
 			return 1;
@@ -1772,7 +1725,7 @@
 }
 
 void _gfxw_set_ops_PORT(GfxContainer *widget) {
-	_gfxw_set_container_ops((GfxContainer *)widget, _gfxwop_port_draw, _gfxwop_port_free, _gfxwop_container_tag,
+	_gfxw_set_container_ops((GfxContainer *)widget, _gfxwop_port_draw, _gfxwop_container_tag,
 	                        _gfxwop_port_print, _gfxwop_basic_compare_to, _gfxwop_basic_equals, _gfxwop_port_superarea_of,
 	                        _gfxwop_port_set_visual, _gfxwop_container_free_tagged, _gfxwop_container_free_contents,
 	                        _gfxwop_port_add_dirty, _gfxwop_port_add);
@@ -1820,8 +1773,7 @@
 	if (port->port_flags & kWindowAutoRestore)
 		gfxw_restore_snapshot(visual, port->restore_snap);
 
-	if (port->widfree(GFXW(port)))
-		return parent;
+	delete port;
 
 	while (parent && !GFXW_IS_PORT(parent))
 		parent = (GfxPort *)parent->_parent; // Ascend through ancestors
@@ -1958,7 +1910,7 @@
 
 		if (gfxw_widget_matches_snapshot(snapshot, widget) && !(widget->_flags & GFXW_FLAG_IMMUNE_TO_SNAPSHOTS)
 		        && (priority == MAGIC_FREE_NUMBER || priority <= widget->_widgetPriority || widget->_widgetPriority == -1)) {
-			widget->widfree(widget);
+			delete widget;
 		} else {
 			if (GFXW_IS_CONTAINER(widget))
 				_gfxw_free_contents_appropriately(GFXWC(widget), snapshot, priority);
@@ -1989,7 +1941,7 @@
 		widget_priority = widget->_widgetPriority;
 	}
 
-	widget->widfree(GFXW(widget));
+	delete widget;
 
 	if (free_overdrawn)
 		_gfxw_free_contents_appropriately(GFXWC(visual), &snapshot, widget_priority);
@@ -1999,10 +1951,10 @@
 	dynview->_type = GFXW_PIC_VIEW;
 	dynview->_flags |= GFXW_FLAG_DIRTY;
 
-	_gfxw_set_ops_PICVIEW(GFXW(dynview));
+	_gfxw_set_ops_PICVIEW(dynview);
 
 	if (dynview->_parent)
-		_gfxw_dirtify_container(dynview->_parent, GFXW(dynview));
+		_gfxw_dirtify_container(dynview->_parent, dynview);
 
 	return dynview;
 }

Modified: scummvm/trunk/engines/sci/gfx/gfx_widgets.h
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_widgets.h	2009-04-24 10:47:38 UTC (rev 40106)
+++ scummvm/trunk/engines/sci/gfx/gfx_widgets.h	2009-04-24 10:48:25 UTC (rev 40107)
@@ -82,13 +82,10 @@
 /*********************************/
 
 
-#define GFXW(foo) (foo)
-/* Typecast an arbitrary widget to GfxWidget*. Might eventually be changed to do tests as well. */
-
 #define GFXWC(foo) ((GfxContainer *) foo)
 /* Typecasts a container widget to gfxw_container_widget_t *. */
 
-/* gfxw_point_zero is declared in gfx/widgets.c */
+/* gfxw_point_zero is declared in gfx/widgets.cpp */
 extern Common::Point gfxw_point_zero;
 
 /*********************/
@@ -110,15 +107,6 @@
 ** a container widget will recursively draw all of its contents.
 **
 **
-** -- widfree(GfxWidget *self)
-** Frees all memory associated to the widget
-** Parameters: (GfxWidget *) self: self reference
-** Returns   : (int) 0
-** The widget automatically removes itself from its owner, if it has one.
-** Invoking this operation on a container will recursively free all of its
-** contents.
-**
-**
 ** -- tag(GfxWidget *self)
 ** Tags the specified widget
 ** Parameters: (GfxWidget *) self: self reference


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list