Fix #130
This commit is contained in:
parent
c64527c333
commit
e6cff1e9b6
17
kitty/glfw.c
17
kitty/glfw.c
@ -43,15 +43,23 @@ typedef struct {
|
|||||||
GLFWcursor *standard_cursor, *click_cursor, *arrow_cursor;
|
GLFWcursor *standard_cursor, *click_cursor, *arrow_cursor;
|
||||||
} WindowWrapper;
|
} 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 {{{
|
// callbacks {{{
|
||||||
static WindowWrapper* the_window = NULL;
|
static WindowWrapper* the_window = NULL;
|
||||||
update_viewport_size_func update_viewport_size = NULL;
|
update_viewport_size_func update_viewport_size = NULL;
|
||||||
|
|
||||||
static void
|
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) {
|
if (width > 100 && height > 100) {
|
||||||
update_viewport_size(width, height);
|
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);
|
WINDOW_CALLBACK(framebuffer_size_callback, "ii", width, height);
|
||||||
glfwPostEmptyEvent();
|
glfwPostEmptyEvent();
|
||||||
} else fprintf(stderr, "Ignoring resize request for tiny size: %dx%d\n", width, height);
|
} 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();
|
double now = monotonic();
|
||||||
global_state.last_mouse_activity_at = now;
|
global_state.last_mouse_activity_at = now;
|
||||||
global_state.cursor_blink_zero_time = 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);
|
mouse_event(-1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +148,7 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
|
|||||||
the_window = self;
|
the_window = self;
|
||||||
self->window = glfwCreateWindow(width, height, title, NULL, NULL);
|
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; }
|
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->standard_cursor = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR);
|
||||||
self->click_cursor = glfwCreateStandardCursor(GLFW_HAND_CURSOR);
|
self->click_cursor = glfwCreateStandardCursor(GLFW_HAND_CURSOR);
|
||||||
self->arrow_cursor = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
|
self->arrow_cursor = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
|
||||||
|
|||||||
@ -70,6 +70,7 @@ typedef struct {
|
|||||||
double mouse_x, mouse_y;
|
double mouse_x, mouse_y;
|
||||||
bool mouse_button_pressed[20];
|
bool mouse_button_pressed[20];
|
||||||
int viewport_width, viewport_height;
|
int viewport_width, viewport_height;
|
||||||
|
double viewport_x_ratio, viewport_y_ratio;
|
||||||
unsigned int cell_width, cell_height;
|
unsigned int cell_width, cell_height;
|
||||||
PyObject *application_title;
|
PyObject *application_title;
|
||||||
PyObject *boss;
|
PyObject *boss;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user