changeset 5781:614f7d033762 draft

(svn r8333) -Codechange: when invalidating a build window list, set a flag instead of rebuilding the list and then rebuild it the next time it's redrawn This should save CPU time in the (maybe unlikely) event that the list is invalidated more than once between two redraws
author bjarni <bjarni@openttd.org>
date Sun, 21 Jan 2007 23:13:46 +0000
parents 10c1b221d4bc
children 979683e53c93
files src/build_vehicle_gui.cpp src/window.h
diffstat 2 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/build_vehicle_gui.cpp
+++ b/src/build_vehicle_gui.cpp
@@ -654,7 +654,7 @@
 				case VEH_Train:    _last_sort_order_train    = bv->descending_sort_order; break;
 				case VEH_Aircraft: _last_sort_order_aircraft = bv->descending_sort_order; break;
 			}
-			GenerateBuildList(w);
+			bv->regenerate_list = true;
 			SetWindowDirty(w);
 			break;
 
@@ -716,7 +716,8 @@
 
 	switch (e->event) {
 		case WE_INVALIDATE_DATA:
-			GenerateBuildList(w);
+			bv->regenerate_list = true;
+			SetWindowDirty(w);
 			break;
 
 		case WE_DESTROY:
@@ -724,6 +725,10 @@
 			break;
 
 		case WE_PAINT:
+			if (bv->regenerate_list) {
+				bv->regenerate_list = false;
+				GenerateBuildList(w);
+			}
 			DrawBuildVehicleWindow(w);
 			break;
 
@@ -751,7 +756,7 @@
 					case VEH_Train:    _last_sort_criteria_train    = bv->sort_criteria; break;
 					case VEH_Aircraft: _last_sort_criteria_aircraft = bv->sort_criteria; break;
 				}
-				GenerateBuildList(w);
+				bv->regenerate_list = true;
 			}
 			SetWindowDirty(w);
 			break;
@@ -793,9 +798,10 @@
 
 	bv = &WP(w, buildvehicle_d);
 	EngList_Create(&bv->eng_list);
-	bv->sel_engine            = INVALID_ENGINE;
+	bv->sel_engine      = INVALID_ENGINE;
 
-	bv->vehicle_type = type;
+	bv->vehicle_type    = type;
+	bv->regenerate_list = false;
 
 	switch (type) {
 		case VEH_Train:
@@ -818,7 +824,7 @@
 	w->resize.width  = w->width;
 	w->resize.height = w->height;
 
-	GenerateBuildList(w);
+	GenerateBuildList(w); // generate the list, since we need it in the next line
 	/* Select the first engine in the list as default when opening the window */
 	if (EngList_Count(&bv->eng_list) > 0) bv->sel_engine = bv->eng_list[0];
 }
--- a/src/window.h
+++ b/src/window.h
@@ -326,6 +326,7 @@
 	byte sel_index;  // deprecated value, used for 'unified' ship and road
 	bool descending_sort_order;
 	byte sort_criteria;
+	bool regenerate_list;
 	EngineID sel_engine;
 	EngineID rename_engine;
 	EngineList eng_list;