summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-05-31 09:24:44 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-05-31 09:24:44 (GMT)
commite0c9dab8cb981172c5de81f5963e28db67f1b295 (patch)
treedd78e82f54a7ed87915a7d5100437cd42ac0c415 /src
parent708d52bcc5f0e13fa6540751e2402ccfdf02bec7 (diff)
downloadpowder-e0c9dab8cb981172c5de81f5963e28db67f1b295.zip
powder-e0c9dab8cb981172c5de81f5963e28db67f1b295.tar.gz
Move more SDL dependancies out of program, OpenGLCanvas for JNI and JNI methods.
Diffstat (limited to 'src')
-rw-r--r--src/Graphics.cpp1
-rw-r--r--src/Graphics.h1
-rw-r--r--src/cat/CommandInterface.h2
-rw-r--r--src/client/Client.cpp6
-rw-r--r--src/client/Client.h2
-rw-r--r--src/interface/Engine.h1
-rw-r--r--src/interface/Keys.h31
-rw-r--r--src/interface/Platform.h2
-rw-r--r--src/powdertoyjava/OpenGLCanvasMacOS.h33
-rw-r--r--src/powdertoyjava/OpenGLCanvasMacOS.mm167
-rw-r--r--src/powdertoyjava/PowderToyJava.cpp82
-rw-r--r--src/powdertoyjava/PowderToyJava.h22
-rw-r--r--src/preview/Comment.h4
-rw-r--r--src/preview/PreviewModel.cpp4
-rw-r--r--src/preview/PreviewModel.h4
-rw-r--r--src/preview/PreviewView.cpp2
16 files changed, 348 insertions, 16 deletions
diff --git a/src/Graphics.cpp b/src/Graphics.cpp
index 36c271d..e05f3fc 100644
--- a/src/Graphics.cpp
+++ b/src/Graphics.cpp
@@ -1,5 +1,4 @@
#include <cmath>
-#include "SDL.h"
#include <bzlib.h>
#include <string>
#include "Config.h"
diff --git a/src/Graphics.h b/src/Graphics.h
index f404d40..ab415a4 100644
--- a/src/Graphics.h
+++ b/src/Graphics.h
@@ -1,7 +1,6 @@
#ifndef GRAPHICS_H
#define GRAPHICS_H
-#include "SDL.h"
#include <string>
#if defined(OGLR)
#include "OpenGLHeaders.h"
diff --git a/src/cat/CommandInterface.h b/src/cat/CommandInterface.h
index 2da30c2..e0d680c 100644
--- a/src/cat/CommandInterface.h
+++ b/src/cat/CommandInterface.h
@@ -9,7 +9,7 @@
#define KITTY_H_
#include <string>
-#include "SDL.h"
+#include "interface/Engine.h"
//#include "game/GameModel.h"
class GameModel;
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index c5e2925..886dfbb 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -803,10 +803,10 @@ Thumbnail * Client::GetPreview(int saveID, int saveDate)
return new Thumbnail(saveID, saveDate, (pixel *)malloc((128*128) * PIXELSIZE), ui::Point(128, 128));
}
-std::vector<Comment*> * Client::GetComments(int saveID, int start, int count)
+std::vector<SaveComment*> * Client::GetComments(int saveID, int start, int count)
{
lastError = "";
- std::vector<Comment*> * commentArray = new std::vector<Comment*>();
+ std::vector<SaveComment*> * commentArray = new std::vector<SaveComment*>();
std::stringstream urlStream;
char * data;
@@ -827,7 +827,7 @@ std::vector<Comment*> * Client::GetComments(int saveID, int start, int count)
json::String tempUsername = commentsArray[j]["Username"];
json::String tempComment = commentsArray[j]["Text"];
commentArray->push_back(
- new Comment(
+ new SaveComment(
tempUserID.Value(),
tempUsername.Value(),
tempComment.Value()
diff --git a/src/client/Client.h b/src/client/Client.h
index ff571f8..b00ea93 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -63,7 +63,7 @@ public:
LoginStatus Login(string username, string password, User & user);
void ClearThumbnailRequests();
std::vector<Save*> * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount);
- std::vector<Comment*> * GetComments(int saveID, int start, int count);
+ std::vector<SaveComment*> * GetComments(int saveID, int start, int count);
Thumbnail * GetPreview(int saveID, int saveDate);
Thumbnail * GetThumbnail(int saveID, int saveDate);
Save * GetSave(int saveID, int saveDate);
diff --git a/src/interface/Engine.h b/src/interface/Engine.h
index f40f45f..d278265 100644
--- a/src/interface/Engine.h
+++ b/src/interface/Engine.h
@@ -1,7 +1,6 @@
#pragma once
#include <stack>
-#include "SDL.h"
#include "Singleton.h"
#include "Platform.h"
#include "Graphics.h"
diff --git a/src/interface/Keys.h b/src/interface/Keys.h
index 71c5928..85d8611 100644
--- a/src/interface/Keys.h
+++ b/src/interface/Keys.h
@@ -1,3 +1,5 @@
+
+#if defined(USES_SDL)
#define KEY_UP SDLK_UP
#define KEY_DOWN SDLK_DOWN
#define KEY_RIGHT SDLK_RIGHT
@@ -22,3 +24,32 @@
#define BUTTON_LEFT SDL_BUTTON_LEFT
#define BUTTON_MIDDLE SDL_BUTTON_MIDDLE
#define BUTTON_RIGHT SDL_BUTTON_RIGHT
+
+#else
+
+#define KEY_UP 1
+#define KEY_DOWN 2
+#define KEY_RIGHT 3
+#define KEY_LEFT 4
+#define KEY_HOME 5
+#define KEY_END 6
+#define KEY_BACKSPACE 7
+#define KEY_DELETE 8
+#define KEY_TAB 9
+#define KEY_RETURN 10
+#define KEY_ENTER 11
+#define KEY_ESCAPE 12
+
+#define KEY_CTRL 13
+#define KEY_ALT 14
+#define KEY_SHIFT 15
+
+#define KEY_MOD_CONTROL 16
+#define KEY_MOD_ALT 17
+#define KEY_MOD_SHIFT 18
+
+#define BUTTON_LEFT 19
+#define BUTTON_MIDDLE 20
+#define BUTTON_RIGHT 21
+
+#endif
diff --git a/src/interface/Platform.h b/src/interface/Platform.h
index c57dca6..f9119f1 100644
--- a/src/interface/Platform.h
+++ b/src/interface/Platform.h
@@ -1,6 +1,6 @@
#pragma once
-
+typedef unsigned short Uint16;
/* ***** Platform-ness ***** */
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32_LEAN_AND_MEAN)
diff --git a/src/powdertoyjava/OpenGLCanvasMacOS.h b/src/powdertoyjava/OpenGLCanvasMacOS.h
new file mode 100644
index 0000000..3f3d68f
--- /dev/null
+++ b/src/powdertoyjava/OpenGLCanvasMacOS.h
@@ -0,0 +1,33 @@
+#import <jawt_md.h>
+
+#import <Cocoa/Cocoa.h>
+#import <AppKit/NSOpenGL.h>
+
+NSOpenGLPixelFormat* defaultPixelFormat();
+
+NSOpenGLContext* ensureContext(NSOpenGLContext* openGLContext, NSView *view);
+
+typedef struct {
+ JAWT* awt;
+ JAWT_DrawingSurface* ds;
+ JAWT_DrawingSurfaceInfo* dsi;
+ JAWT_MacOSXDrawingSurfaceInfo* dsi_mac;
+ NSView *view;
+ NSOpenGLContext* openGLContext;
+} ContextInfo;
+
+ContextInfo* getContext(JNIEnv *env, jobject canvas);
+
+void freeContext(JNIEnv *env, jobject canvas, ContextInfo* ci);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ JNIEXPORT jboolean JNICALL Java_OpenGLCanvas_beginOpenGL(JNIEnv *env, jobject canvas);
+ JNIEXPORT void JNICALL Java_OpenGLCanvas_endOpenGL(JNIEnv *env, jobject canvas);
+ JNIEXPORT void JNICALL Java_OpenGLCanvas_updateOpenGL(JNIEnv *env, jobject canvas);
+ JNIEXPORT void JNICALL Java_OpenGLCanvas_allocOpenGL(JNIEnv *env, jobject canvas);
+ JNIEXPORT void JNICALL Java_OpenGLCanvas_releaseOpenGL(JNIEnv *env, jobject canvas);
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/src/powdertoyjava/OpenGLCanvasMacOS.mm b/src/powdertoyjava/OpenGLCanvasMacOS.mm
new file mode 100644
index 0000000..009c32e
--- /dev/null
+++ b/src/powdertoyjava/OpenGLCanvasMacOS.mm
@@ -0,0 +1,167 @@
+#include "OpenGLCanvasMacOS.h"
+
+static jfieldID ctxID = NULL;
+
+NSOpenGLPixelFormat* defaultPixelFormat()
+{
+ NSOpenGLPixelFormatAttribute attributes [] = {
+ NSOpenGLPFAWindow,
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)16,
+ 0
+ };
+ return [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
+}
+
+NSOpenGLContext* ensureContext(NSOpenGLContext* openGLContext, NSView *view) {
+ NSOpenGLContext* _openGLContext = openGLContext;
+ if (!_openGLContext) {
+ NSOpenGLPixelFormat* pixelFormat = defaultPixelFormat();
+ _openGLContext = [[NSOpenGLContext alloc]
+ initWithFormat:pixelFormat
+ shareContext:nil];
+ [pixelFormat release];
+ }
+ if ([_openGLContext view] != view) {
+ [_openGLContext setView:view];
+ }
+ [_openGLContext makeCurrentContext];
+
+ return _openGLContext;
+}
+
+ContextInfo* getContext(JNIEnv *env, jobject canvas)
+{
+ if (!ctxID) {
+ jclass cls = env->GetObjectClass(canvas);
+ ctxID = env->GetFieldID(cls, "openGLContext", "J");
+ }
+
+ ContextInfo *ci = (ContextInfo *)(long)(env->GetLongField(canvas, ctxID));
+
+ if (!ci) {
+ ci = (ContextInfo *)calloc(sizeof(ContextInfo), 1);
+ ci->awt = (JAWT *)calloc(sizeof(JAWT), 1);
+ env->SetLongField(canvas, ctxID, (jlong)(long)ci);
+ }
+
+ return ci;
+}
+
+void freeContext(JNIEnv *env, jobject canvas, ContextInfo* ci)
+{
+ if (ci) {
+ free(ci->awt);
+ free(ci);
+ env->SetLongField(canvas, ctxID, 0L);
+ }
+}
+
+JNIEXPORT jboolean JNICALL Java_OpenGLCanvas_beginOpenGL(JNIEnv *env, jobject canvas)
+{
+ ContextInfo *ci = getContext(env, canvas);
+
+ // Lock the drawing surface
+ // You must lock EACH TIME before drawing
+ jint lock = ci->ds->Lock(ci->ds);
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+ assert((lock & JAWT_LOCK_ERROR) == 0);
+
+ // Get the drawing surface info
+ ci->dsi = ci->ds->GetDrawingSurfaceInfo(ci->ds);
+
+ // Check DrawingSurfaceInfo. This can be NULL on Mac OS X
+ // if the windowing system is not ready
+ if (ci->dsi != NULL) {
+ // Get the platform-specific drawing info
+ // We will use this to get at Cocoa and CoreGraphics
+ // See <JavaVM/jawt_md.h>
+ ci->dsi_mac = (JAWT_MacOSXDrawingSurfaceInfo*)ci->dsi->platformInfo;
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+
+ // Get the corresponding peer from the caller canvas
+ ci->view = ci->dsi_mac->cocoaViewRef;
+ ci->openGLContext = ensureContext(ci->openGLContext, ci->view);
+
+ return JNI_TRUE;
+ }
+
+ return JNI_FALSE;
+}
+
+JNIEXPORT void JNICALL Java_OpenGLCanvas_endOpenGL(JNIEnv *env, jobject canvas)
+{
+ ContextInfo *ci = getContext(env, canvas);
+
+ [ci->openGLContext flushBuffer];
+
+ // Free the DrawingSurfaceInfo
+ ci->ds->FreeDrawingSurfaceInfo(ci->dsi);
+ if (env->ExceptionOccurred()){
+ env->ExceptionDescribe();
+ }
+
+ // Unlock the drawing surface
+ // You must unlock EACH TIME when done drawing
+ ci->ds->Unlock(ci->ds);
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+}
+
+JNIEXPORT void JNICALL Java_OpenGLCanvas_updateOpenGL(JNIEnv *env, jobject canvas)
+{
+ ContextInfo *ci = getContext(env, canvas);
+
+ [ci->openGLContext update];
+}
+
+JNIEXPORT void JNICALL Java_OpenGLCanvas_allocOpenGL(JNIEnv *env, jobject canvas)
+{
+ ContextInfo *ci = getContext(env, canvas);
+
+ jboolean result = JNI_FALSE;
+
+ // get the AWT
+ ci->awt->version = JAWT_VERSION_1_4;
+ result = JAWT_GetAWT(env, ci->awt);
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+ assert(result != JNI_FALSE);
+
+ // Get the drawing surface. This can be safely cached.
+ // Anything below the DS (DSI, contexts, etc)
+ // can possibly change/go away and should not be cached.
+ ci->ds = ci->awt->GetDrawingSurface(env, canvas);
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+ assert(ci->ds != NULL);
+
+ NSLog(@"Alloc Context %d", ci);
+}
+
+JNIEXPORT void JNICALL Java_OpenGLCanvas_releaseOpenGL(JNIEnv *env, jobject canvas)
+{
+ ContextInfo *ci = getContext(env, canvas);
+ NSLog(@"Release Context %d", ci);
+ if (ci->openGLContext) {
+ if ([ci->openGLContext view] /* == self */) {
+ [ci->openGLContext clearDrawable];
+ }
+ [ci->openGLContext release];
+ }
+
+ // Free the drawing surface (if not caching it)
+ ci->awt->FreeDrawingSurface(ci->ds);
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
+
+ freeContext(env, canvas, ci);
+} \ No newline at end of file
diff --git a/src/powdertoyjava/PowderToyJava.cpp b/src/powdertoyjava/PowderToyJava.cpp
new file mode 100644
index 0000000..969d9b2
--- /dev/null
+++ b/src/powdertoyjava/PowderToyJava.cpp
@@ -0,0 +1,82 @@
+#if defined(USE_JNI) && defined(MACOSX)
+
+#include <time.h>
+#include <iostream>
+#include <sstream>
+#include <string>
+
+#include "Config.h"
+#include "PowderToyJava.h"
+#include "Graphics.h"
+#if defined(LIN32) || defined(LIN64)
+#include "icon.h"
+#endif
+
+#include "game/GameController.h"
+
+using namespace std;
+
+GameController * gameController;
+ui::Engine * engine;
+
+int elapsedTime = 0, currentTime = 0, lastTime = 0, currentFrame = 0;
+float fps = 0, delta = 1.0f;
+
+JNIEXPORT void JNICALL Java_PowderToy_initialise(JNIEnv * env, jobject canvas)
+{
+ //InitWindowMac(env, canvas);
+
+ ui::Engine::Ref().g = new Graphics();
+
+ engine = &ui::Engine::Ref();
+ engine->Begin(XRES+BARSIZE, YRES+MENUSIZE);
+
+ gameController = new GameController();
+ engine->ShowWindow(gameController->GetView());
+ engine->SetFps(fps);
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_tick(JNIEnv * env, jobject canvas)
+{
+ engine->Tick();
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_draw(JNIEnv * env, jobject canvas)
+{
+ engine->Draw();
+ engine->g->Finalise();
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_finish(JNIEnv * env, jobject canvas)
+{
+ ui::Engine::Ref().CloseWindow();
+ delete gameController;
+ delete ui::Engine::Ref().g;
+}
+
+JNIEXPORT jint JNICALL Java_PowderToy_getWidth(JNIEnv * env, jobject canvas)
+{
+ return XRES+BARSIZE;
+}
+
+JNIEXPORT jint JNICALL Java_PowderToy_getHeight(JNIEnv * env, jobject canvas)
+{
+ return YRES+MENUSIZE;
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_mousePressed(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY, jint mouseButton)
+{
+ engine->onMouseClick(mouseX, mouseY, mouseButton);
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_mouseReleased(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY, jint mouseButton)
+{
+ engine->onMouseUnclick(mouseX, mouseY, mouseButton);
+}
+
+JNIEXPORT void JNICALL Java_PowderToy_mouseMoved(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY)
+{
+ engine->onMouseMove(mouseX, mouseY);
+}
+
+#endif
diff --git a/src/powdertoyjava/PowderToyJava.h b/src/powdertoyjava/PowderToyJava.h
new file mode 100644
index 0000000..be0b8b1
--- /dev/null
+++ b/src/powdertoyjava/PowderToyJava.h
@@ -0,0 +1,22 @@
+//#include </System/Library/Frameworks/JavaVM.framework/Headers/jni.h>
+#include </System/Library/Frameworks/JavaVM.framework/Headers/jni.h>
+
+#ifndef POWDERTOYJAVA
+#define POWDERTOYJAVA
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ JNIEXPORT void JNICALL Java_PowderToy_initialise(JNIEnv *, jobject);
+ JNIEXPORT void JNICALL Java_PowderToy_tick(JNIEnv *, jobject);
+ JNIEXPORT void JNICALL Java_PowderToy_draw(JNIEnv *, jobject);
+ JNIEXPORT void JNICALL Java_PowderToy_finish(JNIEnv *, jobject);
+ JNIEXPORT jint JNICALL Java_PowderToy_getWidth(JNIEnv * env, jobject canvas);
+ JNIEXPORT jint JNICALL Java_PowderToy_getHeight(JNIEnv * env, jobject canvas);
+ JNIEXPORT void JNICALL Java_PowderToy_mousePressed(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY, jint mouseButton);
+ JNIEXPORT void JNICALL Java_PowderToy_mouseReleased(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY, jint mouseButton);
+ JNIEXPORT void JNICALL Java_PowderToy_mouseMoved(JNIEnv * env, jobject canvas, jint mouseX, jint mouseY);
+#ifdef __cplusplus
+}
+#endif
+#endif \ No newline at end of file
diff --git a/src/preview/Comment.h b/src/preview/Comment.h
index a53f6cd..c9a807c 100644
--- a/src/preview/Comment.h
+++ b/src/preview/Comment.h
@@ -8,13 +8,13 @@
#ifndef COMMENT_H_
#define COMMENT_H_
-class Comment
+class SaveComment
{
public:
int authorID;
std::string authorName;
std::string comment;
- Comment(int userID, std::string username, std::string commentText):
+ SaveComment(int userID, std::string username, std::string commentText):
authorID(userID), authorName(username), comment(commentText)
{
}
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
index 71c4d4a..267571e 100644
--- a/src/preview/PreviewModel.cpp
+++ b/src/preview/PreviewModel.cpp
@@ -56,7 +56,7 @@ void * PreviewModel::updateSavePreviewT()
void * PreviewModel::updateSaveCommentsT()
{
- std::vector<Comment*> * tempComments = Client::Ref().GetComments(tSaveID, 0, 10);
+ std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(tSaveID, 0, 10);
updateSaveCommentsFinished = true;
return tempComments;
}
@@ -139,7 +139,7 @@ Save * PreviewModel::GetSave()
return save;
}
-std::vector<Comment*> * PreviewModel::GetComments()
+std::vector<SaveComment*> * PreviewModel::GetComments()
{
return saveComments;
}
diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h
index 91ca972..26b6822 100644
--- a/src/preview/PreviewModel.h
+++ b/src/preview/PreviewModel.h
@@ -23,7 +23,7 @@ class PreviewModel {
vector<PreviewView*> observers;
Save * save;
Thumbnail * savePreview;
- std::vector<Comment*> * saveComments;
+ std::vector<SaveComment*> * saveComments;
void notifyPreviewChanged();
void notifySaveChanged();
void notifySaveCommentsChanged();
@@ -53,7 +53,7 @@ public:
PreviewModel();
Thumbnail * GetPreview();
Save * GetSave();
- std::vector<Comment*> * GetComments();
+ std::vector<SaveComment*> * GetComments();
void AddObserver(PreviewView * observer);
void UpdateSave(int saveID, int saveDate);
void SetFavourite(bool favourite);
diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp
index dac5311..d48a5a5 100644
--- a/src/preview/PreviewView.cpp
+++ b/src/preview/PreviewView.cpp
@@ -199,7 +199,7 @@ void PreviewView::NotifyCommentsChanged(PreviewModel * sender)
int currentY = 0;
ui::Label * tempUsername;
ui::Textblock * tempComment;
- std::vector<Comment*> * tempComments = sender->GetComments();
+ std::vector<SaveComment*> * tempComments = sender->GetComments();
if(tempComments)
{
for(int i = 0; i < tempComments->size(); i++)