use a ulong instead of void * for window handle
This commit is contained in:
parent
84b67e99b1
commit
ef036716b7
@ -96,9 +96,10 @@ static Bool wait_for_notify(Display * display, XEvent * event, XPointer arg)
|
|||||||
return (event->type == MapNotify) && (event->xmap.window == (Window)arg);
|
return (event->type == MapNotify) && (event->xmap.window == (Window)arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void * jtk_window_create()
|
bool jtk_window_create(uint64_t * window_handle)
|
||||||
{
|
{
|
||||||
XEvent event;
|
XEvent event;
|
||||||
|
bool success;
|
||||||
|
|
||||||
XLockDisplay(g_display);
|
XLockDisplay(g_display);
|
||||||
Window window = XCreateWindow(g_display,
|
Window window = XCreateWindow(g_display,
|
||||||
@ -112,40 +113,42 @@ void * jtk_window_create()
|
|||||||
/* Disable the window close button. */
|
/* Disable the window close button. */
|
||||||
Atom wm_delete_window_atom = XInternAtom(g_display, "WM_DELETE_WINDOW", False);
|
Atom wm_delete_window_atom = XInternAtom(g_display, "WM_DELETE_WINDOW", False);
|
||||||
XSetWMProtocols(g_display, window, &wm_delete_window_atom, 1);
|
XSetWMProtocols(g_display, window, &wm_delete_window_atom, 1);
|
||||||
|
success = true;
|
||||||
|
*window_handle = (uint64_t)window;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(stderr, "glXMakeCurrent() failure\n");
|
fprintf(stderr, "glXMakeCurrent() failure\n");
|
||||||
XDestroyWindow(g_display, window);
|
XDestroyWindow(g_display, window);
|
||||||
window = NULL;
|
success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
XUnlockDisplay(g_display);
|
XUnlockDisplay(g_display);
|
||||||
|
|
||||||
return (void *)window;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jtk_window_swap_buffers(void * window)
|
void jtk_window_swap_buffers(uint64_t window_handle)
|
||||||
{
|
{
|
||||||
XLockDisplay(g_display);
|
XLockDisplay(g_display);
|
||||||
glXSwapBuffers(g_display, (Window)window);
|
glXSwapBuffers(g_display, (Window)window_handle);
|
||||||
XUnlockDisplay(g_display);
|
XUnlockDisplay(g_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
void jtk_window_close(void * window)
|
void jtk_window_close(uint64_t window_handle)
|
||||||
{
|
{
|
||||||
XLockDisplay(g_display);
|
XLockDisplay(g_display);
|
||||||
XDestroyWindow(g_display, (Window)window);
|
XDestroyWindow(g_display, (Window)window_handle);
|
||||||
XUnlockDisplay(g_display);
|
XUnlockDisplay(g_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
void jtk_window_set_title(void * window, const char * title)
|
void jtk_window_set_title(uint64_t window_handle, const char * title)
|
||||||
{
|
{
|
||||||
XLockDisplay(g_display);
|
XLockDisplay(g_display);
|
||||||
XTextProperty title_property;
|
XTextProperty title_property;
|
||||||
if (XStringListToTextProperty((char **)&title, 1, &title_property) != 0)
|
if (XStringListToTextProperty((char **)&title, 1, &title_property) != 0)
|
||||||
{
|
{
|
||||||
XSetTextProperty(g_display, (Window)window, &title_property, XA_WM_NAME);
|
XSetTextProperty(g_display, (Window)window_handle, &title_property, XA_WM_NAME);
|
||||||
XFree(title_property.value);
|
XFree(title_property.value);
|
||||||
}
|
}
|
||||||
XUnlockDisplay(g_display);
|
XUnlockDisplay(g_display);
|
||||||
@ -164,7 +167,7 @@ void jtk_window_set_title(void * window, const char * title)
|
|||||||
* @param height
|
* @param height
|
||||||
* Icon height.
|
* Icon height.
|
||||||
*/
|
*/
|
||||||
void jtk_window_set_icon(void * window, const uint8_t * data,
|
void jtk_window_set_icon(uint64_t window_handle, const uint8_t * data,
|
||||||
size_t width, size_t height)
|
size_t width, size_t height)
|
||||||
{
|
{
|
||||||
XLockDisplay(g_display);
|
XLockDisplay(g_display);
|
||||||
@ -182,8 +185,9 @@ void jtk_window_set_icon(void * window, const uint8_t * data,
|
|||||||
*dest++ = *src++;
|
*dest++ = *src++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XChangeProperty(g_display, (Window)window, net_wm_icon_atom, XA_CARDINAL,
|
XChangeProperty(g_display, (Window)window_handle, net_wm_icon_atom,
|
||||||
32, PropModeReplace, (uint8_t *)property_data, property_size);
|
XA_CARDINAL, 32, PropModeReplace, (uint8_t *)property_data,
|
||||||
|
property_size);
|
||||||
XFlush(g_display);
|
XFlush(g_display);
|
||||||
free(property_data);
|
free(property_data);
|
||||||
XUnlockDisplay(g_display);
|
XUnlockDisplay(g_display);
|
||||||
|
@ -2,20 +2,23 @@ module jtk.window;
|
|||||||
|
|
||||||
import std.string;
|
import std.string;
|
||||||
|
|
||||||
private extern(C) void * jtk_window_create();
|
private extern(C) bool jtk_window_create(ulong * window);
|
||||||
private extern(C) void jtk_window_swap_buffers(void * window);
|
private extern(C) void jtk_window_swap_buffers(ulong window);
|
||||||
private extern(C) void jtk_window_close(void * window);
|
private extern(C) void jtk_window_close(ulong window);
|
||||||
private extern(C) void jtk_window_set_title(void * window, const char * title);
|
private extern(C) void jtk_window_set_title(ulong window, const char * title);
|
||||||
private extern(C) void jtk_window_set_icon(void * window, const ubyte * data,
|
private extern(C) void jtk_window_set_icon(ulong window, const ubyte * data,
|
||||||
size_t width, size_t height);
|
size_t width, size_t height);
|
||||||
|
|
||||||
class Window
|
class Window
|
||||||
{
|
{
|
||||||
private void * m_window;
|
private ulong m_window;
|
||||||
|
|
||||||
this()
|
this()
|
||||||
{
|
{
|
||||||
m_window = jtk_window_create();
|
if (!jtk_window_create(&m_window))
|
||||||
|
{
|
||||||
|
/* TODO */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void close()
|
void close()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user