Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Fixed video compile(?)

  • Loading branch information
antifinidictor committed Jul 13, 2011
1 parent 8514b40 commit dadf030fe36b03bcc94dda605201c6ae23fc79fb
Showing with 120 additions and 19 deletions.
  1. +1 −0 configure.in
  2. +94 −14 src/main/beos/SDL_BApp.h
  3. +4 −4 src/main/beos/SDL_BeApp.cc
  4. +7 −1 src/video/bwindow/SDL_bopengl.cc
  5. +14 −0 src/video/bwindow/SDL_bopengl.h
@@ -1238,6 +1238,7 @@ CheckBWINDOW()
{
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
@@ -33,10 +33,13 @@ extern "C" {

#ifdef __cplusplus
}

#include <vector> /* Vector should only be included if we use a C++
compiler */

#endif


#include <vector>


/* Forward declarations */
@@ -71,6 +74,17 @@ class SDL_BApp : public BApplication {
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 @@ class SDL_BApp : public BApplication {
/* 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 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
SDL_SendWindowEvent(win, sdlEventType, 0, 0);
}

@@ -186,7 +202,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
SDL_SendMouseMotion(win, 0, dx, dy);
}

@@ -201,7 +217,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
SDL_SendMouseButton(win, state, button);
}

@@ -216,7 +232,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
SDL_SendMouseWheel(win, xTicks, yTicks);
}

@@ -241,7 +257,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
if(bSetFocus) {
SDL_SetMouseFocus(win);
} else if(SDL_GetMouseFocus() == win) {
@@ -260,7 +276,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
if(bSetFocus) {
SDL_SetKeyboardFocus(win);
} else if(SDL_GetKeyboardFocus() == win) {
@@ -281,7 +297,7 @@ class SDL_BApp : public BApplication {
) {
return;
}
win = window_map[winID];
win = _GetSDLWindow(winID);
SDL_SendWindowEvent(win, SDL_WINDOWEVENT_MOVED, xPos, yPos);
}

@@ -297,16 +313,80 @@ class SDL_BApp : public BApplication {
) {
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
@@ -115,10 +115,10 @@ SDL_QuitBeApp(void)

/* 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;
}
}
@@ -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 @@ int BE_GL_MakeCurrent(_THIS)
SDL_Win->SwapBuffers();
}
#endif

#ifdef __cplusplus
}
#endif
@@ -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

0 comments on commit dadf030

Please sign in to comment.