Commit 63c52052 authored by Nathan Heisey's avatar Nathan Heisey

Fixed video compile(?)

parent 9a7e7f87
...@@ -1238,6 +1238,7 @@ CheckBWINDOW() ...@@ -1238,6 +1238,7 @@ CheckBWINDOW()
{ {
if test x$enable_video = xyes; then if test x$enable_video = xyes; then
AC_DEFINE(SDL_VIDEO_DRIVER_BWINDOW, 1, [ ]) 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" SOURCES="$SOURCES $srcdir/src/video/bwindow/*.cc"
have_video=yes have_video=yes
fi fi
......
...@@ -33,10 +33,13 @@ extern "C" { ...@@ -33,10 +33,13 @@ extern "C" {
#ifdef __cplusplus #ifdef __cplusplus
} }
#include <vector> /* Vector should only be included if we use a C++
compiler */
#endif #endif
#include <vector>
/* Forward declarations */ /* Forward declarations */
...@@ -71,6 +74,17 @@ class SDL_BApp : public BApplication { ...@@ -71,6 +74,17 @@ class SDL_BApp : public BApplication {
public: public:
SDL_BApp(const char* signature) : SDL_BApp(const char* signature) :
BApplication(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 */ /* Event-handling functions */
virtual void MessageReceived(BMessage* message) { virtual void MessageReceived(BMessage* message) {
...@@ -145,20 +159,22 @@ public: ...@@ -145,20 +159,22 @@ public:
/* Window creation/destruction methods */ /* Window creation/destruction methods */
int32 GetID(SDL_Window *win) { int32 GetID(SDL_Window *win) {
int32 i; int32 i;
for(i = 0; i < window_map.size(); ++i) { for(i = 0; i < _GetNumWindowSlots(); ++i) {
if( window_map[i] == NULL ) { if( _GetSDLWindow(i) == NULL ) {
window_map[i] = win; _SetSDLWindow(win, i);
return i; return i;
} }
} }
/* Expand the vector if all slots are full */ /* Expand the vector if all slots are full */
if( i == window_map.size() ) { if( i == _GetNumWindowSlots() ) {
window_map.push_back(win); _PushBackWindow(win);
return i; 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 */ void ClearID(SDL_BWin *bwin); /* Defined in SDL_BeApp.cc */
private: private:
...@@ -171,7 +187,7 @@ private: ...@@ -171,7 +187,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendWindowEvent(win, sdlEventType, 0, 0); SDL_SendWindowEvent(win, sdlEventType, 0, 0);
} }
...@@ -186,7 +202,7 @@ private: ...@@ -186,7 +202,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendMouseMotion(win, 0, dx, dy); SDL_SendMouseMotion(win, 0, dx, dy);
} }
...@@ -201,7 +217,7 @@ private: ...@@ -201,7 +217,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendMouseButton(win, state, button); SDL_SendMouseButton(win, state, button);
} }
...@@ -216,7 +232,7 @@ private: ...@@ -216,7 +232,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendMouseWheel(win, xTicks, yTicks); SDL_SendMouseWheel(win, xTicks, yTicks);
} }
...@@ -241,7 +257,7 @@ private: ...@@ -241,7 +257,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
if(bSetFocus) { if(bSetFocus) {
SDL_SetMouseFocus(win); SDL_SetMouseFocus(win);
} else if(SDL_GetMouseFocus() == win) { } else if(SDL_GetMouseFocus() == win) {
...@@ -260,7 +276,7 @@ private: ...@@ -260,7 +276,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
if(bSetFocus) { if(bSetFocus) {
SDL_SetKeyboardFocus(win); SDL_SetKeyboardFocus(win);
} else if(SDL_GetKeyboardFocus() == win) { } else if(SDL_GetKeyboardFocus() == win) {
...@@ -281,7 +297,7 @@ private: ...@@ -281,7 +297,7 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendWindowEvent(win, SDL_WINDOWEVENT_MOVED, xPos, yPos); SDL_SendWindowEvent(win, SDL_WINDOWEVENT_MOVED, xPos, yPos);
} }
...@@ -297,16 +313,80 @@ private: ...@@ -297,16 +313,80 @@ private:
) { ) {
return; return;
} }
win = window_map[winID]; win = _GetSDLWindow(winID);
SDL_SendWindowEvent(win, SDL_WINDOWEVENT_RESIZED, w, h); SDL_SendWindowEvent(win, SDL_WINDOWEVENT_RESIZED, w, h);
} }
bool _GetWinID(BMessage *msg, int32 *winID) { bool _GetWinID(BMessage *msg, int32 *winID) {
return msg->FindInt32("window-id", winID) == B_OK; 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 */ /* Members */
#ifdef __cplusplus
vector<SDL_Window*> window_map; /* Keeps track of SDL_Windows by index-id */ vector<SDL_Window*> window_map; /* Keeps track of SDL_Windows by index-id */
#else
int32 _size;
int32 _length;
SDL_Window *window_map;
#endif
}; };
#endif #endif
...@@ -115,10 +115,10 @@ SDL_QuitBeApp(void) ...@@ -115,10 +115,10 @@ SDL_QuitBeApp(void)
/* SDL_BApp functions */ /* SDL_BApp functions */
void SDL_BApp::ClearID(SDL_BWin *bwin) { void SDL_BApp::ClearID(SDL_BWin *bwin) {
window_map[bwin->GetID()] = NULL; _SetSDLWindow(NULL, bwin->GetID());
int32 i = window_map.size() - 1; int32 i = _GetNumWindowSlots() - 1;
while(i >= 0 && window_map[i] == NULL) { while(i >= 0 && _GetSDLWindow(i) == NULL) {
window_map.pop_back(); _PopBackWindow();
--i; --i;
} }
} }
......
...@@ -20,8 +20,10 @@ ...@@ -20,8 +20,10 @@
*/ */
#include "SDL_bopengl.h" #include "SDL_bopengl.h"
#include "../SDL_sysvideo.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Passing a NULL path means load pointers from the application */ /* Passing a NULL path means load pointers from the application */
int BE_GL_LoadLibrary(_THIS, const char *path) int BE_GL_LoadLibrary(_THIS, const char *path)
...@@ -193,3 +195,7 @@ int BE_GL_MakeCurrent(_THIS) ...@@ -193,3 +195,7 @@ int BE_GL_MakeCurrent(_THIS)
SDL_Win->SwapBuffers(); SDL_Win->SwapBuffers();
} }
#endif #endif
#ifdef __cplusplus
}
#endif
...@@ -21,7 +21,21 @@ ...@@ -21,7 +21,21 @@
#ifndef SDL_BOPENGL_H #ifndef SDL_BOPENGL_H
#define 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 int BE_GL_LoadLibrary(_THIS, const char *path);
extern void *BE_GL_GetProcAddress(_THIS, const char *proc); extern void *BE_GL_GetProcAddress(_THIS, const char *proc);
extern int BE_GL_MakeCurrent(_THIS); extern int BE_GL_MakeCurrent(_THIS);
#ifdef __cplusplus
}
#endif
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment