summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-09-13 11:37:52 -0400
committerDavid Robillard <d@drobilla.net>2015-09-13 11:37:52 -0400
commitd457ac139797b05fdc214f8af458833b58033224 (patch)
treea9d888e6e937509061ac7b833ec42e3d65defcae
parent6abce4944cb49c65dd1d592be45b766110dbfeba (diff)
Add C++ bindings.
-rw-r--r--pugl/pugl.hpp123
-rw-r--r--wscript3
2 files changed, 125 insertions, 1 deletions
diff --git a/pugl/pugl.hpp b/pugl/pugl.hpp
new file mode 100644
index 0000000..b6386ac
--- /dev/null
+++ b/pugl/pugl.hpp
@@ -0,0 +1,123 @@
+/*
+ Copyright 2012-2015 David Robillard <http://drobilla.net>
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/**
+ @file pugl.hpp C++ API for Pugl, a minimal portable API for OpenGL.
+*/
+
+#ifndef PUGL_HPP_INCLUDED
+#define PUGL_HPP_INCLUDED
+
+#include "pugl/pugl.h"
+
+/**
+ @defgroup puglmm Puglmm
+ C++ API wrapper for Pugl.
+ @{
+*/
+
+namespace pugl {
+
+class View {
+public:
+ View(int* pargc, char** argv)
+ : _view(puglInit(pargc, argv))
+ {
+ puglSetHandle(_view, this);
+ puglSetEventFunc(_view, _onEvent);
+ puglSetCloseFunc(_view, _onClose);
+ puglSetReshapeFunc(_view, _onReshape);
+ puglSetDisplayFunc(_view, _onDisplay);
+ }
+
+ ~View() { puglDestroy(_view); }
+
+ virtual void initWindowParent(PuglNativeWindow parent) {
+ puglInitWindowParent(_view, parent);
+ }
+
+ virtual void initWindowSize(int width, int height) {
+ puglInitWindowSize(_view, width, height);
+ }
+
+ virtual void initWindowMinSize(int width, int height) {
+ puglInitWindowMinSize(_view, width, height);
+ }
+
+ virtual void initWindowAspectRatio(int min_x, int min_y, int max_x, int max_y) {
+ puglInitWindowAspectRatio(_view, min_x, min_y, max_x, max_y);
+ }
+
+ virtual void initResizable(bool resizable) {
+ puglInitResizable(_view, resizable);
+ }
+
+ virtual void initTransientFor(uintptr_t parent) {
+ puglInitTransientFor(_view, parent);
+ }
+
+ virtual void initContextType(PuglContextType type) {
+ puglInitContextType(_view, type);
+ }
+
+ virtual void createWindow(const char* title) {
+ puglCreateWindow(_view, title);
+ }
+
+ virtual void showWindow() { puglShowWindow(_view); }
+ virtual void hideWindow() { puglHideWindow(_view); }
+ virtual PuglNativeWindow getNativeWindow() { return puglGetNativeWindow(_view); }
+
+ virtual void onEvent(const PuglEvent* event) {}
+ virtual void onClose() {}
+ virtual void onReshape(int width, int height) {}
+ virtual void onDisplay() {}
+
+ virtual void* getContext() { return puglGetContext(_view); }
+ virtual uint32_t getEventTimestamp() { return puglGetEventTimestamp(_view); }
+ virtual int getModifiers() { return puglGetModifiers(_view); }
+ virtual void ignoreKeyRepeat(bool ignore) { puglIgnoreKeyRepeat(_view, ignore); }
+ virtual void grabFocus() { puglGrabFocus(_view); }
+ virtual PuglStatus waitForEvent() { return puglWaitForEvent(_view); }
+ virtual PuglStatus processEvents() { return puglProcessEvents(_view); }
+ virtual void postRedisplay() { puglPostRedisplay(_view); }
+
+ PuglView* cobj() { return _view; }
+
+private:
+ static void _onEvent(PuglView* view, const PuglEvent* event) {
+ ((View*)puglGetHandle(view))->onEvent(event);
+ }
+ static void _onClose(PuglView* view) {
+ ((View*)puglGetHandle(view))->onClose();
+ }
+ static void _onReshape(PuglView* view, int width, int height) {
+ ((View*)puglGetHandle(view))->onReshape(width, height);
+ }
+ static void _onDisplay(PuglView* view) {
+ ((View*)puglGetHandle(view))->onDisplay();
+ }
+
+ PuglView* _view;
+};
+
+} // namespace pugl
+
+/**
+ @}
+*/
+
+#endif /* PUGL_HPP_INCLUDED */
diff --git a/wscript b/wscript
index 522c0e8..b1e284a 100644
--- a/wscript
+++ b/wscript
@@ -95,6 +95,7 @@ def build(bld):
# C Headers
includedir = '${INCLUDEDIR}/pugl-%s/pugl' % PUGL_MAJOR_VERSION
bld.install_files(includedir, bld.path.ant_glob('pugl/*.h'))
+ bld.install_files(includedir, bld.path.ant_glob('pugl/*.hpp'))
# Pkgconfig file
autowaf.build_pc(bld, 'PUGL', PUGL_VERSION, PUGL_MAJOR_VERSION, [],
@@ -166,7 +167,7 @@ def build(bld):
progs += ['pugl_test']
if bld.is_defined('HAVE_CAIRO'):
progs += ['pugl_cairo_test']
-
+
for prog in progs:
obj = bld(features = 'c cprogram',
source = '%s.c' % prog,