|
From: <mor...@us...> - 2008-04-23 21:28:24
|
Revision: 166
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=166&view=rev
Author: morgan_quigley
Date: 2008-04-23 14:28:22 -0700 (Wed, 23 Apr 2008)
Log Message:
-----------
gui library 'sdlgl' for building sdl-based opengl guis with as little pain as possible
Added Paths:
-----------
pkg/branches/rosbus/gui/
pkg/branches/rosbus/gui/sdlgl/
pkg/branches/rosbus/gui/sdlgl/Makefile
pkg/branches/rosbus/gui/sdlgl/include/
pkg/branches/rosbus/gui/sdlgl/include/sdlgl/
pkg/branches/rosbus/gui/sdlgl/include/sdlgl/sdlgl.h
pkg/branches/rosbus/gui/sdlgl/lib/
pkg/branches/rosbus/gui/sdlgl/manifest.xml
pkg/branches/rosbus/gui/sdlgl/src/
pkg/branches/rosbus/gui/sdlgl/src/Makefile
pkg/branches/rosbus/gui/sdlgl/src/sdlgl.cpp
Added: pkg/branches/rosbus/gui/sdlgl/Makefile
===================================================================
--- pkg/branches/rosbus/gui/sdlgl/Makefile (rev 0)
+++ pkg/branches/rosbus/gui/sdlgl/Makefile 2008-04-23 21:28:22 UTC (rev 166)
@@ -0,0 +1,2 @@
+SUBDIRS = src
+include $(shell rospack find mk)/recurse_subdirs.mk
Added: pkg/branches/rosbus/gui/sdlgl/include/sdlgl/sdlgl.h
===================================================================
--- pkg/branches/rosbus/gui/sdlgl/include/sdlgl/sdlgl.h (rev 0)
+++ pkg/branches/rosbus/gui/sdlgl/include/sdlgl/sdlgl.h 2008-04-23 21:28:22 UTC (rev 166)
@@ -0,0 +1,33 @@
+#ifndef SDLGL_SDLGL_H
+#define SDLGL_SDLGL_H
+
+#include <SDL/SDL.h>
+
+namespace ros
+{
+
+class SDLGL
+{
+public:
+ SDLGL();
+ virtual ~SDLGL();
+ virtual void mouse_motion(int x, int y, int dx, int dy, int buttons) { }
+ virtual void mouse_button(int x, int y, int button, bool is_down) { }
+ virtual void keypress(char c, uint16_t u, SDLMod mod) { }
+ virtual void set_view_params(int width, int height) { }
+ bool init_gui(int width, int height, const char *window_title = NULL);
+ void main_loop();
+ void request_render();
+protected:
+ static const int RENDER_USER_EVENT = 0xdeadbeef; // ha ha
+ virtual void render() = 0;
+private:
+/*
+ static void *g_main_loop(void *parent);
+*/
+};
+
+}
+
+#endif
+
Added: pkg/branches/rosbus/gui/sdlgl/manifest.xml
===================================================================
--- pkg/branches/rosbus/gui/sdlgl/manifest.xml (rev 0)
+++ pkg/branches/rosbus/gui/sdlgl/manifest.xml 2008-04-23 21:28:22 UTC (rev 166)
@@ -0,0 +1,6 @@
+<package>
+ <depend package="sdl"/>
+ <export>
+ <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lsdlgl -lGL -lGLU"/>
+ </export>
+</package>
Added: pkg/branches/rosbus/gui/sdlgl/src/Makefile
===================================================================
--- pkg/branches/rosbus/gui/sdlgl/src/Makefile (rev 0)
+++ pkg/branches/rosbus/gui/sdlgl/src/Makefile 2008-04-23 21:28:22 UTC (rev 166)
@@ -0,0 +1,5 @@
+SRC = sdlgl.cpp
+OUT = ../lib/libsdlgl.a
+PKG = sdlgl
+include $(shell rospack find mk)/lib.mk
+
Added: pkg/branches/rosbus/gui/sdlgl/src/sdlgl.cpp
===================================================================
--- pkg/branches/rosbus/gui/sdlgl/src/sdlgl.cpp (rev 0)
+++ pkg/branches/rosbus/gui/sdlgl/src/sdlgl.cpp 2008-04-23 21:28:22 UTC (rev 166)
@@ -0,0 +1,92 @@
+#include <unistd.h>
+#include "sdlgl/sdlgl.h"
+
+using namespace ros;
+
+SDLGL::SDLGL()
+{
+}
+
+SDLGL::~SDLGL()
+{
+}
+
+void SDLGL::request_render()
+{
+ SDL_Event e;
+ e.type = SDL_USEREVENT;
+ e.user.code = RENDER_USER_EVENT;
+ e.user.data1 = NULL;
+ e.user.data2 = NULL;
+ SDL_PushEvent(&e);
+}
+
+bool SDLGL::init_gui(int width, int height, const char *title)
+{
+ SDL_EnableUNICODE(SDL_ENABLE);
+ if (SDL_Init(SDL_INIT_VIDEO) < 0)
+ {
+ printf("video init failed: %s\n", SDL_GetError());
+ return false;
+ }
+ SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
+ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+ if (title)
+ SDL_WM_SetCaption(title, title);
+ if (!SDL_SetVideoMode(width, height, 32, SDL_OPENGL | SDL_HWSURFACE))
+ {
+ printf("setvideomode failed: %s\n", SDL_GetError());
+ return false;
+ }
+ set_view_params(width, height);
+ request_render();
+}
+/*
+void *srosSDLGL::g_main_loop(void *parent)
+{
+ ((srosSDLGL *)parent)->main_loop();
+}
+*/
+void SDLGL::main_loop()
+{
+ bool done = false;
+ while (!done)
+ {
+ usleep(1000);
+ SDL_Event event;
+ while (SDL_PollEvent(&event))
+ {
+ switch(event.type)
+ {
+ case SDL_USEREVENT:
+ if (event.user.code == RENDER_USER_EVENT)
+ render();
+ break;
+ case SDL_MOUSEMOTION:
+ mouse_motion(event.motion.x, event.motion.y,
+ event.motion.xrel, event.motion.yrel,
+ event.motion.state);
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ mouse_button(event.button.x, event.button.y,
+ event.button.button,
+ (event.type == SDL_MOUSEBUTTONDOWN ? true : false));
+ break;
+ case SDL_KEYDOWN:
+ if (event.key.keysym.sym == SDLK_ESCAPE)
+ done = true;
+ else
+ keypress(event.key.keysym.sym,
+ event.key.keysym.unicode,
+ event.key.keysym.mod);
+ break;
+ case SDL_QUIT:
+ done = true;
+ break;
+ }
+ }
+ }
+ SDL_Quit();
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|