changeset 5122:b79d9ee0590d draft

(svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them called from the appropiate places in window.c
author Darkvater <Darkvater@openttd.org>
date Sat, 18 Nov 2006 13:54:33 +0000
parents b5a7dad5ee34
children 9cddbe5b6739
files viewport.c viewport.h window.c
diffstat 3 files changed, 24 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/viewport.c
+++ b/viewport.c
@@ -23,6 +23,12 @@
 
 #define VIEWPORT_DRAW_MEM (65536 * 2)
 
+/* viewport.c */
+// XXX - maximum viewports is maximum windows - 2 (main toolbar + status bar)
+static ViewPort _viewports[25 - 2];
+static uint32 _active_viewports;    ///< bitmasked variable where each bit signifies if a viewport is in use or not
+assert_compile(lengthof(_viewports) < sizeof(_active_viewports) * 8);
+
 static bool _added_tile_sprite;
 static bool _offset_ground_sprites;
 
@@ -119,6 +125,18 @@
 	return p;
 }
 
+void InitViewports(void) {
+	memset(_viewports, 0, sizeof(_viewports));
+	_active_viewports = 0;
+}
+
+void DeleteWindowViewport(Window *w)
+{
+	CLRBIT(_active_viewports, w->viewport - _viewports);
+	w->viewport->width = 0;
+	w->viewport = NULL;
+}
+
 void AssignWindowViewport(Window *w, int x, int y,
 	int width, int height, uint32 follow_flags, byte zoom)
 {
@@ -126,11 +144,11 @@
 	Point pt;
 	uint32 bit;
 
-	for (vp = _viewports, bit = 1; ; vp++, bit <<= 1) {
+	for (vp = _viewports, bit = 0; ; vp++, bit++) {
 		assert(vp != endof(_viewports));
 		if (vp->width == 0) break;
 	}
-	_active_viewports |= bit;
+	SETBIT(_active_viewports, bit);
 
 	vp->left = x + w->left;
 	vp->top = y + w->top;
--- a/viewport.h
+++ b/viewport.h
@@ -16,6 +16,8 @@
 void SetSelectionRed(bool);
 
 /* viewport.c */
+void InitViewports(void);
+void DeleteWindowViewport(Window *w);
 void AssignWindowViewport(Window *w, int x, int y,
 	int width, int height, uint32 follow_flags, byte zoom);
 ViewPort *IsPtInWindowViewport(const Window *w, int x, int y);
@@ -139,11 +141,6 @@
 // common button handler
 bool HandlePlacePushButton(Window *w, int widget, uint32 cursor, int mode, PlaceProc *placeproc);
 
-/* viewport.c */
-// XXX - maximum viewports is maximum windows - 2 (main toolbar + status bar)
-VARDEF ViewPort _viewports[25 - 2];
-VARDEF uint32 _active_viewports;
-
 VARDEF Point _tile_fract_coords;
 
 extern TileHighlightData _thd;
--- a/window.c
+++ b/window.c
@@ -302,11 +302,7 @@
 
 	w = FindWindowById(wc, wn);
 
-	if (w->viewport != NULL) {
-		CLRBIT(_active_viewports, w->viewport - _viewports);
-		w->viewport->width = 0;
-		w->viewport = NULL;
-	}
+	if (w->viewport != NULL) DeleteWindowViewport(w);
 
 	SetWindowDirty(w);
 
@@ -832,8 +828,7 @@
 
 	memset(&_windows, 0, sizeof(_windows));
 	_last_window = _windows;
-	memset(_viewports, 0, sizeof(_viewports));
-	_active_viewports = 0;
+	InitViewports();
 	_no_scroll = 0;
 }