This commit is contained in:
Kovid Goyal 2017-09-26 09:10:24 +05:30
parent c64527c333
commit e6cff1e9b6
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 14 additions and 4 deletions

View File

@ -43,15 +43,23 @@ typedef struct {
GLFWcursor *standard_cursor, *click_cursor, *arrow_cursor;
} WindowWrapper;
static void update_viewport(GLFWwindow *window) {
int w, h;
glfwGetFramebufferSize(window, &global_state.viewport_width, &global_state.viewport_height);
glfwGetWindowSize(window, &w, &h);
global_state.viewport_x_ratio = (double)global_state.viewport_width / (double)w;
global_state.viewport_y_ratio = (double)global_state.viewport_height / (double)h;
}
// callbacks {{{
static WindowWrapper* the_window = NULL;
update_viewport_size_func update_viewport_size = NULL;
static void
framebuffer_size_callback(GLFWwindow UNUSED *w, int width, int height) {
framebuffer_size_callback(GLFWwindow *w, int width, int height) {
if (width > 100 && height > 100) {
update_viewport_size(width, height);
global_state.viewport_width = width; global_state.viewport_height = height;
update_viewport(w);
WINDOW_CALLBACK(framebuffer_size_callback, "ii", width, height);
glfwPostEmptyEvent();
} else fprintf(stderr, "Ignoring resize request for tiny size: %dx%d\n", width, height);
@ -89,7 +97,8 @@ cursor_pos_callback(GLFWwindow *w, double x, double y) {
double now = monotonic();
global_state.last_mouse_activity_at = now;
global_state.cursor_blink_zero_time = now;
global_state.mouse_x = x; global_state.mouse_y = y;
global_state.mouse_x = (int)(x * global_state.viewport_x_ratio);
global_state.mouse_y = (int)(y * global_state.viewport_y_ratio);
mouse_event(-1, 0);
}
@ -139,7 +148,7 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
the_window = self;
self->window = glfwCreateWindow(width, height, title, NULL, NULL);
if (self->window == NULL) { Py_CLEAR(self); the_window = NULL; PyErr_SetString(PyExc_ValueError, "Failed to create GLFWwindow"); return NULL; }
global_state.viewport_width = width; global_state.viewport_height = height;
update_viewport(self->window);
self->standard_cursor = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR);
self->click_cursor = glfwCreateStandardCursor(GLFW_HAND_CURSOR);
self->arrow_cursor = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);

View File

@ -70,6 +70,7 @@ typedef struct {
double mouse_x, mouse_y;
bool mouse_button_pressed[20];
int viewport_width, viewport_height;
double viewport_x_ratio, viewport_y_ratio;
unsigned int cell_width, cell_height;
PyObject *application_title;
PyObject *boss;