Fixed video compile(?)
authorNathan Heisey <nathanheisey@gmail.com>
Wed, 13 Jul 2011 09:37:00 +0000
changeset 5919 e19c4c44f224
parent 5918 2063df37190b
child 5920 6a9a009f9a5c
Fixed video compile(?)
configure.in
src/main/beos/SDL_BApp.h
src/main/beos/SDL_BeApp.cc
src/video/bwindow/SDL_bopengl.cc
src/video/bwindow/SDL_bopengl.h
--- a/configure.in	Wed Jul 13 09:29:43 2011 +0000
+++ b/configure.in	Wed Jul 13 09:37:00 2011 +0000
@@ -1238,6 +1238,7 @@
 {
     if test x$enable_video = xyes; then
         AC_DEFINE(SDL_VIDEO_DRIVER_BWINDOW, 1, [ ])
+        # SOURCES="$SOURCES $srcdir/src/video/bwindow/*.cc" .cc sources have been removed
         SOURCES="$SOURCES $srcdir/src/video/bwindow/*.cc"
         have_video=yes
     fi
--- a/src/main/beos/SDL_BApp.h	Wed Jul 13 09:29:43 2011 +0000
+++ b/src/main/beos/SDL_BApp.h	Wed Jul 13 09:37:00 2011 +0000
@@ -33,10 +33,13 @@
 
 #ifdef __cplusplus
 }
+
+#include <vector>	/* Vector should only be included if we use a C++
+					   compiler */
+
 #endif
 
 
-#include <vector>
 
 
 /* Forward declarations */
@@ -71,6 +74,17 @@
 public:
 	SDL_BApp(const char* signature) :
 		BApplication(signature) {
+#ifndef __cplusplus
+		/* Set vector imitation variables */
+		_ResizeArray();
+		_size = 0;
+		_length = 0;
+#endif
+	}
+	virtual ~SDL_BApp() {
+#ifndef __cplusplus
+		SDL_free(window_map);
+#endif
 	}
 		/* Event-handling functions */
 	virtual void MessageReceived(BMessage* message) {
@@ -145,20 +159,22 @@
     /* Window creation/destruction methods */
     int32 GetID(SDL_Window *win) {
     	int32 i;
-    	for(i = 0; i < window_map.size(); ++i) {
-    		if( window_map[i] == NULL ) {
-    			window_map[i] = win;
+    	for(i = 0; i < _GetNumWindowSlots(); ++i) {
+    		if( _GetSDLWindow(i) == NULL ) {
+    			_SetSDLWindow(win, i);
     			return i;
     		}
     	}
     	
     	/* Expand the vector if all slots are full */
-    	if( i == window_map.size() ) {
-    		window_map.push_back(win);
+    	if( i == _GetNumWindowSlots() ) {
+    		_PushBackWindow(win);
     		return i;
     	}
     }
     
+    /* FIXME: Bad coding practice, but I can't include SDL_BWin.h here.  Is
+       there another way to do this? */
     void ClearID(SDL_BWin *bwin); /* Defined in SDL_BeApp.cc */
     
 private:
@@ -171,7 +187,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendWindowEvent(win, sdlEventType, 0, 0);
 	}
 	
@@ -186,7 +202,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendMouseMotion(win, 0, dx, dy);
 	}
 	
@@ -201,7 +217,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendMouseButton(win, state, button);
 	}
 	
@@ -216,7 +232,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendMouseWheel(win, xTicks, yTicks);
 	}
 	
@@ -241,7 +257,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		if(bSetFocus) {
 			SDL_SetMouseFocus(win);
 		} else if(SDL_GetMouseFocus() == win) {
@@ -260,7 +276,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		if(bSetFocus) {
 			SDL_SetKeyboardFocus(win);
 		} else if(SDL_GetKeyboardFocus() == win) {
@@ -281,7 +297,7 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendWindowEvent(win, SDL_WINDOWEVENT_MOVED, xPos, yPos);
 	}
 	
@@ -297,16 +313,80 @@
 		) {
 			return;
 		}
-		win = window_map[winID];
+		win = _GetSDLWindow(winID);
 		SDL_SendWindowEvent(win, SDL_WINDOWEVENT_RESIZED, w, h);
 	}
 
 	bool _GetWinID(BMessage *msg, int32 *winID) {
 		return msg->FindInt32("window-id", winID) == B_OK;
 	}
+
+
+
+	/* Vector imitators */
+	SDL_Window *_GetSDLWindow(int32 winID) {
+		return window_map[winID];
+	}
 	
+	void _SetSDLWindow(SDL_Window *win, int32 winID) {
+		window_map[winID] = win;
+	}
+	
+	int32 _GetNumWindowSlots() {
+#ifdef __cplusplus
+		return window_map.size();
+#else
+		return _size;
+#endif
+	}
+	
+	
+	void _PopBackWindow() {
+#ifdef __cplusplus
+		window_map.pop_back();
+#else
+		--_size;
+#endif
+	}
+
+	void _PushBackWindow(SDL_Window *win) {
+#ifdef __cplusplus
+		window_map.push_back(win);
+#else
+		/* Resize array */
+		if(_length == _size) {
+			_ResizeArray();
+		}
+
+		window_map[_size] = win;
+		++_size;
+#endif
+	}
+
+#ifndef __cplusplus
+	_ResizeArray() {
+		_length += 4;	/* Increase capacity by some arbitrary number */
+		SDL_Window *temp = (SDL_Window*)SDL_calloc(_length, 
+							sizeof(SDL_Window*));
+
+		/* Move windows from old list to new list */
+		int32 i;
+		for(i = 0; i < _size; ++i) {
+			temp[i] = window_map[i];
+		}
+		SDL_free(window_map);
+		window_map = temp;
+	}
+#endif
+
 	/* Members */
+#ifdef __cplusplus
 	vector<SDL_Window*> window_map; /* Keeps track of SDL_Windows by index-id */
+#else
+	int32 _size;
+	int32 _length;
+	SDL_Window *window_map;
+#endif
 };
 
 #endif
--- a/src/main/beos/SDL_BeApp.cc	Wed Jul 13 09:29:43 2011 +0000
+++ b/src/main/beos/SDL_BeApp.cc	Wed Jul 13 09:37:00 2011 +0000
@@ -115,10 +115,10 @@
 
 /* SDL_BApp functions */
 void SDL_BApp::ClearID(SDL_BWin *bwin) {
-	window_map[bwin->GetID()] = NULL;
-	int32 i = window_map.size() - 1;
-	while(i >= 0 && window_map[i] == NULL) {
-		window_map.pop_back();
+	_SetSDLWindow(NULL, bwin->GetID());
+	int32 i = _GetNumWindowSlots() - 1;
+	while(i >= 0 && _GetSDLWindow(i) == NULL) {
+		_PopBackWindow();
 		--i;
 	}
 }
--- a/src/video/bwindow/SDL_bopengl.cc	Wed Jul 13 09:29:43 2011 +0000
+++ b/src/video/bwindow/SDL_bopengl.cc	Wed Jul 13 09:37:00 2011 +0000
@@ -20,8 +20,10 @@
 */
 
 #include "SDL_bopengl.h"
-#include "../SDL_sysvideo.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* Passing a NULL path means load pointers from the application */
 int BE_GL_LoadLibrary(_THIS, const char *path)
@@ -193,3 +195,7 @@
         SDL_Win->SwapBuffers();
     }
 #endif
+
+#ifdef __cplusplus
+}
+#endif
--- a/src/video/bwindow/SDL_bopengl.h	Wed Jul 13 09:29:43 2011 +0000
+++ b/src/video/bwindow/SDL_bopengl.h	Wed Jul 13 09:37:00 2011 +0000
@@ -21,7 +21,21 @@
 
 #ifndef SDL_BOPENGL_H
 #define SDL_BOPENGL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "../SDL_sysvideo.h"
+
+
+
 extern int BE_GL_LoadLibrary(_THIS, const char *path);
 extern void *BE_GL_GetProcAddress(_THIS, const char *proc);
 extern int BE_GL_MakeCurrent(_THIS);
+
+#ifdef __cplusplus
+}
 #endif
+
+#endif