summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2006-11-18 13:54:33 +0000
committerDarkvater <darkvater@openttd.org>2006-11-18 13:54:33 +0000
commite3f905e653e1e03ee0463f2c7b1c725dcea7bff3 (patch)
tree30140e955840a7a6229e36cd79d43e5cd7165855
parent583c9e531b997400cedc1eb2f524785a4294a874 (diff)
downloadopenttd-e3f905e653e1e03ee0463f2c7b1c725dcea7bff3.tar.xz
(svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
called from the appropiate places in window.c
-rw-r--r--viewport.c22
-rw-r--r--viewport.h7
-rw-r--r--window.c9
3 files changed, 24 insertions, 14 deletions
diff --git a/viewport.c b/viewport.c
index feed484fd..d413dec2a 100644
--- 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 @@ static Point MapXYZToViewport(const ViewPort *vp, uint x, uint y, uint z)
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 @@ void AssignWindowViewport(Window *w, int x, int y,
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;
diff --git a/viewport.h b/viewport.h
index 018a1693d..b9d1fce7e 100644
--- a/viewport.h
+++ b/viewport.h
@@ -16,6 +16,8 @@ struct ViewPort {
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 @@ typedef struct TileHighlightData {
// 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;
diff --git a/window.c b/window.c
index 47fde1a57..d03d2a87b 100644
--- a/window.c
+++ b/window.c
@@ -302,11 +302,7 @@ void DeleteWindow(Window *w)
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 @@ void InitWindowSystem(void)
memset(&_windows, 0, sizeof(_windows));
_last_window = _windows;
- memset(_viewports, 0, sizeof(_viewports));
- _active_viewports = 0;
+ InitViewports();
_no_scroll = 0;
}