Merge pull request #672 from PROP65/delta
Add delta_time_seconds to X11 and SFML renderers
This commit is contained in:
commit
9eeb910d01
|
@ -217,6 +217,7 @@ nk_sdl_init(SDL_Window *win)
|
|||
sdl.ctx.clip.paste = nk_sdl_clipboard_paste;
|
||||
sdl.ctx.clip.userdata = nk_handle_ptr(0);
|
||||
nk_buffer_init_default(&sdl.ogl.cmds);
|
||||
sdl.time_of_last_frame = ((float)SDL_GetTicks64()) / 1000;
|
||||
return &sdl.ctx;
|
||||
}
|
||||
|
||||
|
|
|
@ -326,6 +326,7 @@ nk_sdl_init(SDL_Window *win)
|
|||
sdl.ctx.clip.paste = nk_sdl_clipboard_paste;
|
||||
sdl.ctx.clip.userdata = nk_handle_ptr(0);
|
||||
nk_sdl_device_create();
|
||||
sdl.time_of_last_frame = ((float)SDL_GetTicks64()) / 1000;
|
||||
return &sdl.ctx;
|
||||
}
|
||||
|
||||
|
|
|
@ -326,6 +326,7 @@ nk_sdl_init(SDL_Window *win)
|
|||
sdl.ctx.clip.paste = nk_sdl_clipboard_paste;
|
||||
sdl.ctx.clip.userdata = nk_handle_ptr(0);
|
||||
nk_sdl_device_create();
|
||||
sdl.time_of_last_frame = ((float)SDL_GetTicks64()) / 1000;
|
||||
return &sdl.ctx;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#define NK_SFML_GL2_H_
|
||||
|
||||
#include <SFML/Window.hpp>
|
||||
#include <SFML/System/Clock.hpp>
|
||||
|
||||
NK_API struct nk_context* nk_sfml_init(sf::Window* window);
|
||||
NK_API void nk_sfml_font_stash_begin(struct nk_font_atlas** atlas);
|
||||
|
@ -51,6 +52,7 @@ static struct nk_sfml {
|
|||
struct nk_sfml_device ogl;
|
||||
struct nk_context ctx;
|
||||
struct nk_font_atlas atlas;
|
||||
sf::Clock* frame_delta_clock;
|
||||
} sfml;
|
||||
|
||||
NK_INTERN void
|
||||
|
@ -74,6 +76,9 @@ nk_sfml_render(enum nk_anti_aliasing AA)
|
|||
int window_width = sfml.window->getSize().x;
|
||||
int window_height = sfml.window->getSize().y;
|
||||
|
||||
sfml.ctx.delta_time_seconds = (float)((double)sfml.frame_delta_clock->getElapsedTime().asMicroseconds() / 1000000);
|
||||
sfml.frame_delta_clock->restart();
|
||||
|
||||
glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
@ -229,6 +234,7 @@ nk_sfml_init(sf::Window* window)
|
|||
sfml.ctx.clip.paste = nk_sfml_clipboard_paste;
|
||||
sfml.ctx.clip.userdata = nk_handle_ptr(0);
|
||||
nk_buffer_init_default(&sfml.ogl.cmds);
|
||||
sfml.frame_delta_clock = new sf::Clock();
|
||||
return &sfml.ctx;
|
||||
}
|
||||
|
||||
|
@ -363,6 +369,7 @@ void nk_sfml_shutdown(void)
|
|||
nk_free(&sfml.ctx);
|
||||
glDeleteTextures(1, &dev->font_tex);
|
||||
nk_buffer_free(&dev->cmds);
|
||||
delete sfml.frame_delta_clock;
|
||||
memset(&sfml, 0, sizeof(sfml));
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ static struct nk_sfml {
|
|||
struct nk_sfml_device ogl;
|
||||
struct nk_context ctx;
|
||||
struct nk_font_atlas atlas;
|
||||
sf::Clock* frame_delta_clock;
|
||||
} sfml;
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
@ -202,6 +203,10 @@ nk_sfml_render(enum nk_anti_aliasing AA, int max_vertex_buffer, int max_element_
|
|||
{ 0.0f, 0.0f, -1.0f, 0.0f },
|
||||
{ -1.0f, 1.0f, 0.0f, 1.0f },
|
||||
};
|
||||
|
||||
sfml.ctx.delta_time_seconds = (float)((double)sfml.frame_delta_clock->getElapsedTime().asMicroseconds() / 1000000);
|
||||
sfml.frame_delta_clock->restart();
|
||||
|
||||
ortho[0][0] /= (GLfloat)window_width;
|
||||
ortho[1][1] /= (GLfloat)window_height;
|
||||
|
||||
|
@ -336,6 +341,7 @@ nk_sfml_init(sf::Window* window)
|
|||
sfml.ctx.clip.paste = nk_sfml_clipboard_paste;
|
||||
sfml.ctx.clip.userdata = nk_handle_ptr(0);
|
||||
nk_sfml_device_create();
|
||||
sfml.frame_delta_clock = new sf::Clock();
|
||||
return &sfml.ctx;
|
||||
}
|
||||
|
||||
|
@ -469,6 +475,7 @@ void nk_sfml_shutdown()
|
|||
nk_font_atlas_clear(&sfml.atlas);
|
||||
nk_free(&sfml.ctx);
|
||||
nk_sfml_device_destroy();
|
||||
delete sfml.frame_delta_clock;
|
||||
memset(&sfml, 0, sizeof(sfml));
|
||||
}
|
||||
|
||||
|
|
|
@ -68,10 +68,10 @@ NK_API void nk_xfont_del(Display *dpy, XFont *font);
|
|||
|
||||
|
||||
#ifndef NK_X11_DOUBLE_CLICK_LO
|
||||
#define NK_X11_DOUBLE_CLICK_LO 20
|
||||
#define NK_X11_DOUBLE_CLICK_LO 0.02
|
||||
#endif
|
||||
#ifndef NK_X11_DOUBLE_CLICK_HI
|
||||
#define NK_X11_DOUBLE_CLICK_HI 200
|
||||
#define NK_X11_DOUBLE_CLICK_HI 0.20
|
||||
#endif
|
||||
|
||||
typedef struct XSurface XSurface;
|
||||
|
@ -112,15 +112,16 @@ static struct {
|
|||
Cursor cursor;
|
||||
Display *dpy;
|
||||
Window root;
|
||||
long last_button_click;
|
||||
double last_button_click;
|
||||
double time_of_last_frame;
|
||||
} xlib;
|
||||
|
||||
NK_INTERN long
|
||||
nk_timestamp(void)
|
||||
NK_INTERN double
|
||||
nk_get_time(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv, NULL) < 0) return 0;
|
||||
return (long)((long)tv.tv_sec * 1000 + (long)tv.tv_usec/1000);
|
||||
return ((double)tv.tv_sec + (double)tv.tv_usec/1000000);
|
||||
}
|
||||
|
||||
NK_INTERN unsigned long
|
||||
|
@ -662,6 +663,7 @@ nk_xlib_init(XFont *xfont, Display *dpy, int screen, Window root,
|
|||
|
||||
xlib.surf = nk_xsurf_create(screen, w, h);
|
||||
nk_init_default(&xlib.ctx, font);
|
||||
xlib.time_of_last_frame = nk_get_time();
|
||||
return &xlib.ctx;
|
||||
}
|
||||
|
||||
|
@ -793,10 +795,10 @@ nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
|
|||
const int x = evt->xbutton.x, y = evt->xbutton.y;
|
||||
if (evt->xbutton.button == Button1) {
|
||||
if (down) { /* Double-Click Button handler */
|
||||
long dt = nk_timestamp() - xlib.last_button_click;
|
||||
float dt = nk_get_time() - xlib.last_button_click;
|
||||
if (dt > NK_X11_DOUBLE_CLICK_LO && dt < NK_X11_DOUBLE_CLICK_HI)
|
||||
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_true);
|
||||
xlib.last_button_click = nk_timestamp();
|
||||
xlib.last_button_click = nk_get_time();
|
||||
} else nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_false);
|
||||
nk_input_button(ctx, NK_BUTTON_LEFT, x, y, down);
|
||||
} else if (evt->xbutton.button == Button2)
|
||||
|
@ -905,6 +907,10 @@ nk_xlib_render(Drawable screen, struct nk_color clear)
|
|||
struct nk_context *ctx = &xlib.ctx;
|
||||
XSurface *surf = xlib.surf;
|
||||
|
||||
double now = nk_get_time();
|
||||
xlib.ctx.delta_time_seconds = now - xlib.time_of_last_frame;
|
||||
xlib.time_of_last_frame = now;
|
||||
|
||||
nk_xsurf_clear(xlib.surf, nk_color_from_byte(&clear.r));
|
||||
nk_foreach(cmd, &xlib.ctx)
|
||||
{
|
||||
|
|
|
@ -46,10 +46,10 @@ NK_API void nk_x11_shutdown(void);
|
|||
#include <GL/gl.h>
|
||||
|
||||
#ifndef NK_X11_DOUBLE_CLICK_LO
|
||||
#define NK_X11_DOUBLE_CLICK_LO 20
|
||||
#define NK_X11_DOUBLE_CLICK_LO 0.02
|
||||
#endif
|
||||
#ifndef NK_X11_DOUBLE_CLICK_HI
|
||||
#define NK_X11_DOUBLE_CLICK_HI 200
|
||||
#define NK_X11_DOUBLE_CLICK_HI 0.20
|
||||
#endif
|
||||
|
||||
struct nk_x11_vertex {
|
||||
|
@ -71,15 +71,16 @@ static struct nk_x11 {
|
|||
Cursor cursor;
|
||||
Display *dpy;
|
||||
Window win;
|
||||
long last_button_click;
|
||||
double last_button_click;
|
||||
double time_of_last_frame;
|
||||
} x11;
|
||||
|
||||
NK_INTERN long
|
||||
nk_timestamp(void)
|
||||
NK_INTERN double
|
||||
nk_get_time(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv, NULL) < 0) return 0;
|
||||
return (long)((long)tv.tv_sec * 1000 + (long)tv.tv_usec/1000);
|
||||
return ((double)tv.tv_sec + (double)tv.tv_usec/1000000);
|
||||
}
|
||||
|
||||
NK_INTERN void
|
||||
|
@ -102,6 +103,10 @@ nk_x11_render(enum nk_anti_aliasing AA, int max_vertex_buffer, int max_element_b
|
|||
int width, height;
|
||||
XWindowAttributes attr;
|
||||
|
||||
double now = nk_get_time();
|
||||
x11.ctx.delta_time_seconds = now - x11.time_of_last_frame;
|
||||
x11.time_of_last_frame = now;
|
||||
|
||||
NK_UNUSED(max_vertex_buffer);
|
||||
NK_UNUSED(max_element_buffer);
|
||||
|
||||
|
@ -311,10 +316,10 @@ nk_x11_handle_event(XEvent *evt)
|
|||
const int x = evt->xbutton.x, y = evt->xbutton.y;
|
||||
if (evt->xbutton.button == Button1) {
|
||||
if (down) { /* Double-Click Button handler */
|
||||
long dt = nk_timestamp() - x11.last_button_click;
|
||||
float dt = nk_get_time() - x11.last_button_click;
|
||||
if (dt > NK_X11_DOUBLE_CLICK_LO && dt < NK_X11_DOUBLE_CLICK_HI)
|
||||
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_true);
|
||||
x11.last_button_click = nk_timestamp();
|
||||
x11.last_button_click = nk_get_time();
|
||||
} else nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_false);
|
||||
nk_input_button(ctx, NK_BUTTON_LEFT, x, y, down);
|
||||
} else if (evt->xbutton.button == Button2)
|
||||
|
@ -363,6 +368,7 @@ nk_x11_init(Display *dpy, Window win)
|
|||
|
||||
nk_buffer_init_default(&x11.ogl.cmds);
|
||||
nk_init_default(&x11.ctx, 0);
|
||||
x11.time_of_last_frame = nk_get_time();
|
||||
return &x11.ctx;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,10 +50,10 @@ NK_API void nk_x11_device_destroy(void);
|
|||
#include <GL/glx.h>
|
||||
|
||||
#ifndef NK_X11_DOUBLE_CLICK_LO
|
||||
#define NK_X11_DOUBLE_CLICK_LO 20
|
||||
#define NK_X11_DOUBLE_CLICK_LO 0.02
|
||||
#endif
|
||||
#ifndef NK_X11_DOUBLE_CLICK_HI
|
||||
#define NK_X11_DOUBLE_CLICK_HI 200
|
||||
#define NK_X11_DOUBLE_CLICK_HI 0.20
|
||||
#endif
|
||||
|
||||
#ifdef NK_XLIB_LOAD_OPENGL_EXTENSIONS
|
||||
|
@ -194,7 +194,8 @@ static struct nk_x11 {
|
|||
Cursor cursor;
|
||||
Display *dpy;
|
||||
Window win;
|
||||
long last_button_click;
|
||||
double last_button_click;
|
||||
double time_of_last_frame;
|
||||
} x11;
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
@ -206,12 +207,12 @@ static struct nk_x11 {
|
|||
#ifdef NK_XLIB_LOAD_OPENGL_EXTENSIONS
|
||||
#include <GL/glx.h>
|
||||
|
||||
NK_INTERN long
|
||||
nk_timestamp(void)
|
||||
NK_INTERN double
|
||||
nk_get_time(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv, NULL) < 0) return 0;
|
||||
return (long)((long)tv.tv_sec * 1000 + (long)tv.tv_usec/1000);
|
||||
return ((double)tv.tv_sec + (double)tv.tv_usec/1000000);
|
||||
}
|
||||
|
||||
NK_INTERN int
|
||||
|
@ -485,6 +486,10 @@ nk_x11_render(enum nk_anti_aliasing AA, int max_vertex_buffer, int max_element_b
|
|||
{ 0.0f, 0.0f, -1.0f, 0.0f },
|
||||
{ -1.0f, 1.0f, 0.0f, 1.0f },
|
||||
};
|
||||
double now = nk_get_time();
|
||||
x11.ctx.delta_time_seconds = now - x11.time_of_last_frame;
|
||||
x11.time_of_last_frame = now;
|
||||
|
||||
XGetWindowAttributes(x11.dpy, x11.win, &attr);
|
||||
width = attr.width;
|
||||
height = attr.height;
|
||||
|
@ -678,10 +683,10 @@ nk_x11_handle_event(XEvent *evt)
|
|||
const int x = evt->xbutton.x, y = evt->xbutton.y;
|
||||
if (evt->xbutton.button == Button1) {
|
||||
if (down) { /* Double-Click Button handler */
|
||||
long dt = nk_timestamp() - x11.last_button_click;
|
||||
float dt = nk_get_time() - x11.last_button_click;
|
||||
if (dt > NK_X11_DOUBLE_CLICK_LO && dt < NK_X11_DOUBLE_CLICK_HI)
|
||||
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_true);
|
||||
x11.last_button_click = nk_timestamp();
|
||||
x11.last_button_click = nk_get_time();
|
||||
} else nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_false);
|
||||
nk_input_button(ctx, NK_BUTTON_LEFT, x, y, down);
|
||||
} else if (evt->xbutton.button == Button2)
|
||||
|
@ -730,6 +735,7 @@ nk_x11_init(Display *dpy, Window win)
|
|||
XFreePixmap(dpy, blank);}
|
||||
|
||||
nk_init_default(&x11.ctx, 0);
|
||||
x11.time_of_last_frame = nk_get_time();
|
||||
return &x11.ctx;
|
||||
}
|
||||
|
||||
|
|
|
@ -76,10 +76,10 @@ NK_API void nk_xfont_del(Display *dpy, XFont *font);
|
|||
|
||||
|
||||
#ifndef NK_X11_DOUBLE_CLICK_LO
|
||||
#define NK_X11_DOUBLE_CLICK_LO 20
|
||||
#define NK_X11_DOUBLE_CLICK_LO 0.02
|
||||
#endif
|
||||
#ifndef NK_X11_DOUBLE_CLICK_HI
|
||||
#define NK_X11_DOUBLE_CLICK_HI 200
|
||||
#define NK_X11_DOUBLE_CLICK_HI 0.20
|
||||
#endif
|
||||
|
||||
typedef struct XSurface XSurface;
|
||||
|
@ -131,15 +131,16 @@ static struct {
|
|||
Visual *vis;
|
||||
Colormap cmap;
|
||||
#endif
|
||||
long last_button_click;
|
||||
double last_button_click;
|
||||
double time_of_last_frame;
|
||||
} xlib;
|
||||
|
||||
NK_INTERN long
|
||||
nk_timestamp(void)
|
||||
NK_INTERN double
|
||||
nk_get_time(void)
|
||||
{
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv, NULL) < 0) return 0;
|
||||
return (long)((long)tv.tv_sec * 1000 + (long)tv.tv_usec/1000);
|
||||
return ((double)tv.tv_sec + (double)tv.tv_usec/1000000);
|
||||
}
|
||||
|
||||
NK_INTERN unsigned long
|
||||
|
@ -747,6 +748,7 @@ nk_xlib_init(XFont *xfont, Display *dpy, int screen, Window root,
|
|||
XFreePixmap(dpy, blank);}
|
||||
xlib.surf = nk_xsurf_create(screen, w, h);
|
||||
nk_init_default(&xlib.ctx, font);
|
||||
xlib.time_of_last_frame = nk_get_time();
|
||||
return &xlib.ctx;
|
||||
}
|
||||
|
||||
|
@ -878,10 +880,10 @@ nk_xlib_handle_event(Display *dpy, int screen, Window win, XEvent *evt)
|
|||
const int x = evt->xbutton.x, y = evt->xbutton.y;
|
||||
if (evt->xbutton.button == Button1) {
|
||||
if (down) { /* Double-Click Button handler */
|
||||
long dt = nk_timestamp() - xlib.last_button_click;
|
||||
float dt = nk_get_time() - xlib.last_button_click;
|
||||
if (dt > NK_X11_DOUBLE_CLICK_LO && dt < NK_X11_DOUBLE_CLICK_HI)
|
||||
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_true);
|
||||
xlib.last_button_click = nk_timestamp();
|
||||
xlib.last_button_click = nk_get_time();
|
||||
} else nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, nk_false);
|
||||
nk_input_button(ctx, NK_BUTTON_LEFT, x, y, down);
|
||||
} else if (evt->xbutton.button == Button2)
|
||||
|
@ -990,6 +992,10 @@ nk_xlib_render(Drawable screen, struct nk_color clear)
|
|||
struct nk_context *ctx = &xlib.ctx;
|
||||
XSurface *surf = xlib.surf;
|
||||
|
||||
double now = nk_get_time();
|
||||
xlib.ctx.delta_time_seconds = now - xlib.time_of_last_frame;
|
||||
xlib.time_of_last_frame = now;
|
||||
|
||||
nk_xsurf_clear(xlib.surf, nk_color_from_byte(&clear.r));
|
||||
nk_foreach(cmd, &xlib.ctx)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue