summaryrefslogtreecommitdiff
path: root/navit/graphics/opengl/graphics_opengl_x11.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/graphics/opengl/graphics_opengl_x11.c')
-rw-r--r--navit/graphics/opengl/graphics_opengl_x11.c234
1 files changed, 116 insertions, 118 deletions
diff --git a/navit/graphics/opengl/graphics_opengl_x11.c b/navit/graphics/opengl/graphics_opengl_x11.c
index a52192406..fa9b44f0b 100644
--- a/navit/graphics/opengl/graphics_opengl_x11.c
+++ b/navit/graphics/opengl/graphics_opengl_x11.c
@@ -7,147 +7,145 @@
#include "graphics_opengl.h"
struct graphics_opengl_window_system {
- Display *display;
- int screen;
- Window window,root_window;
- XVisualInfo visual;
- Colormap colormap;
- struct callback *cb;
- struct event_watch *watch;
- void *data;
- void (*resize)(void *data, int w, int h);
- void (*button)(void *data, int button, int state, int x, int y);
- void (*motion)(void *data, int x, int y);
- void *keypress;
+ Display *display;
+ int screen;
+ Window window,root_window;
+ XVisualInfo visual;
+ Colormap colormap;
+ struct callback *cb;
+ struct event_watch *watch;
+ void *data;
+ void (*resize)(void *data, int w, int h);
+ void (*button)(void *data, int button, int state, int x, int y);
+ void (*motion)(void *data, int x, int y);
+ void *keypress;
};
static void
-graphics_opengl_x11_destroy(struct graphics_opengl_window_system *x11)
-{
- if (x11->watch)
- event_remove_watch(x11->watch);
- if (x11->cb)
- callback_destroy(x11->cb);
- if (x11->display) {
- if (x11->window)
- XDestroyWindow(x11->display, x11->window);
- if (x11->colormap)
- XFreeColormap(x11->display, x11->colormap);
- XCloseDisplay(x11->display);
- }
- g_free(x11);
+graphics_opengl_x11_destroy(struct graphics_opengl_window_system *x11) {
+ if (x11->watch)
+ event_remove_watch(x11->watch);
+ if (x11->cb)
+ callback_destroy(x11->cb);
+ if (x11->display) {
+ if (x11->window)
+ XDestroyWindow(x11->display, x11->window);
+ if (x11->colormap)
+ XFreeColormap(x11->display, x11->colormap);
+ XCloseDisplay(x11->display);
+ }
+ g_free(x11);
}
static void *
-graphics_opengl_get_display(struct graphics_opengl_window_system *x11)
-{
- return x11->display;
+graphics_opengl_get_display(struct graphics_opengl_window_system *x11) {
+ return x11->display;
}
static void *
-graphics_opengl_get_window(struct graphics_opengl_window_system *x11)
-{
- return (void *)x11->window;
+graphics_opengl_get_window(struct graphics_opengl_window_system *x11) {
+ return (void *)x11->window;
}
static void
-graphics_opengl_set_callbacks(struct graphics_opengl_window_system *x11, void *data, void *resize, void *button, void *motion, void *keypress)
-{
- x11->data=data;
- x11->resize=resize;
- x11->button=button;
- x11->motion=motion;
- x11->keypress=keypress;
+graphics_opengl_set_callbacks(struct graphics_opengl_window_system *x11, void *data, void *resize, void *button,
+ void *motion, void *keypress) {
+ x11->data=data;
+ x11->resize=resize;
+ x11->button=button;
+ x11->motion=motion;
+ x11->keypress=keypress;
}
struct graphics_opengl_window_system_methods graphics_opengl_x11_methods = {
- graphics_opengl_x11_destroy,
- graphics_opengl_get_display,
- graphics_opengl_get_window,
- graphics_opengl_set_callbacks,
+ graphics_opengl_x11_destroy,
+ graphics_opengl_get_display,
+ graphics_opengl_get_window,
+ graphics_opengl_set_callbacks,
};
static void
-graphics_opengl_x11_watch(struct graphics_opengl_window_system *x11)
-{
- XEvent event;
- while (XPending(x11->display)) {
- XNextEvent(x11->display, &event);
- switch(event.type) {
- case ButtonPress:
- if (x11->button)
- x11->button(x11->data,event.xbutton.button,1,event.xbutton.x,event.xbutton.y);
- break;
- case ButtonRelease:
- if (x11->button)
- x11->button(x11->data,event.xbutton.button,0,event.xbutton.x,event.xbutton.y);
- break;
- case ConfigureNotify:
- dbg(lvl_debug,"ConfigureNotify");
- break;
- case Expose:
- dbg(lvl_debug,"Expose");
- break;
- case KeyPress:
- dbg(lvl_debug,"KeyPress");
- break;
- case KeyRelease:
- dbg(lvl_debug,"KeyRelease");
- break;
- case MapNotify:
- dbg(lvl_debug,"MapNotify");
- break;
- case MotionNotify:
- if (x11->motion)
- x11->motion(x11->data,event.xmotion.x,event.xmotion.y);
- break;
- case ReparentNotify:
- dbg(lvl_debug,"ReparentNotify");
- break;
- default:
- dbg(lvl_debug,"type %d",event.type);
- }
- }
+graphics_opengl_x11_watch(struct graphics_opengl_window_system *x11) {
+ XEvent event;
+ while (XPending(x11->display)) {
+ XNextEvent(x11->display, &event);
+ switch(event.type) {
+ case ButtonPress:
+ if (x11->button)
+ x11->button(x11->data,event.xbutton.button,1,event.xbutton.x,event.xbutton.y);
+ break;
+ case ButtonRelease:
+ if (x11->button)
+ x11->button(x11->data,event.xbutton.button,0,event.xbutton.x,event.xbutton.y);
+ break;
+ case ConfigureNotify:
+ dbg(lvl_debug,"ConfigureNotify");
+ break;
+ case Expose:
+ dbg(lvl_debug,"Expose");
+ break;
+ case KeyPress:
+ dbg(lvl_debug,"KeyPress");
+ break;
+ case KeyRelease:
+ dbg(lvl_debug,"KeyRelease");
+ break;
+ case MapNotify:
+ dbg(lvl_debug,"MapNotify");
+ break;
+ case MotionNotify:
+ if (x11->motion)
+ x11->motion(x11->data,event.xmotion.x,event.xmotion.y);
+ break;
+ case ReparentNotify:
+ dbg(lvl_debug,"ReparentNotify");
+ break;
+ default:
+ dbg(lvl_debug,"type %d",event.type);
+ }
+ }
}
-
+
struct graphics_opengl_window_system *
-graphics_opengl_x11_new(void *displayname, int w, int h, int depth, struct graphics_opengl_window_system_methods **methods)
-{
- struct graphics_opengl_window_system *ret=g_new0(struct graphics_opengl_window_system, 1);
- XSetWindowAttributes attributes;
- unsigned long valuemask;
+graphics_opengl_x11_new(void *displayname, int w, int h, int depth,
+ struct graphics_opengl_window_system_methods **methods) {
+ struct graphics_opengl_window_system *ret=g_new0(struct graphics_opengl_window_system, 1);
+ XSetWindowAttributes attributes;
+ unsigned long valuemask;
- ret->cb=callback_new_1(callback_cast(graphics_opengl_x11_watch), ret);
- if (!event_request_system("glib", "graphics_opengl_x11_new"))
- goto error;
- *methods=&graphics_opengl_x11_methods;
- ret->display=XOpenDisplay(displayname);
- if (!ret->display) {
- dbg(lvl_error,"failed to open display");
- goto error;
- }
- ret->watch=event_add_watch(ConnectionNumber(ret->display), event_watch_cond_read, ret->cb);
- ret->screen=XDefaultScreen(ret->display);
- ret->root_window=RootWindow(ret->display, ret->screen);
- if (!XMatchVisualInfo(ret->display, ret->screen, depth, TrueColor, &ret->visual)) {
- dbg(lvl_error,"failed to find visual");
- goto error;
- }
- ret->colormap=XCreateColormap(ret->display, ret->root_window, ret->visual.visual, AllocNone);
- valuemask = /* CWBackPixel | */ CWBorderPixel | CWEventMask | CWColormap ; // | CWBackingStore;
- attributes.colormap = ret->colormap;
- attributes.border_pixel = 0;
- attributes.event_mask = StructureNotifyMask | ExposureMask | ButtonPressMask | ButtonMotionMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask;
- attributes.backing_store = Always;
- ret->window=XCreateWindow(ret->display, RootWindow(ret->display, ret->screen), 0, 0, w, h, 0, ret->visual.depth, InputOutput, ret->visual.visual, valuemask, &attributes);
- XMapWindow(ret->display, ret->window);
- XFlush(ret->display);
- graphics_opengl_x11_watch(ret);
- return ret;
+ ret->cb=callback_new_1(callback_cast(graphics_opengl_x11_watch), ret);
+ if (!event_request_system("glib", "graphics_opengl_x11_new"))
+ goto error;
+ *methods=&graphics_opengl_x11_methods;
+ ret->display=XOpenDisplay(displayname);
+ if (!ret->display) {
+ dbg(lvl_error,"failed to open display");
+ goto error;
+ }
+ ret->watch=event_add_watch(ConnectionNumber(ret->display), event_watch_cond_read, ret->cb);
+ ret->screen=XDefaultScreen(ret->display);
+ ret->root_window=RootWindow(ret->display, ret->screen);
+ if (!XMatchVisualInfo(ret->display, ret->screen, depth, TrueColor, &ret->visual)) {
+ dbg(lvl_error,"failed to find visual");
+ goto error;
+ }
+ ret->colormap=XCreateColormap(ret->display, ret->root_window, ret->visual.visual, AllocNone);
+ valuemask = /* CWBackPixel | */ CWBorderPixel | CWEventMask | CWColormap ; // | CWBackingStore;
+ attributes.colormap = ret->colormap;
+ attributes.border_pixel = 0;
+ attributes.event_mask = StructureNotifyMask | ExposureMask | ButtonPressMask | ButtonMotionMask | ButtonReleaseMask |
+ KeyPressMask | KeyReleaseMask;
+ attributes.backing_store = Always;
+ ret->window=XCreateWindow(ret->display, RootWindow(ret->display, ret->screen), 0, 0, w, h, 0, ret->visual.depth,
+ InputOutput, ret->visual.visual, valuemask, &attributes);
+ XMapWindow(ret->display, ret->window);
+ XFlush(ret->display);
+ graphics_opengl_x11_watch(ret);
+ return ret;
error:
- graphics_opengl_x11_destroy(ret);
- return NULL;
+ graphics_opengl_x11_destroy(ret);
+ return NULL;
}