Merge pull request #34 from sebosp/cursorWindowFocusAware
cursor empty fill and no blink when not focused
This commit is contained in:
commit
8300fb31e5
@ -70,6 +70,7 @@ class Boss(Thread):
|
|||||||
startup_session = create_session(opts, args)
|
startup_session = create_session(opts, args)
|
||||||
self.cursor_blink_zero_time = monotonic()
|
self.cursor_blink_zero_time = monotonic()
|
||||||
self.cursor_blinking = True
|
self.cursor_blinking = True
|
||||||
|
self.window_is_focused = True
|
||||||
self.glfw_window_title = None
|
self.glfw_window_title = None
|
||||||
self.action_queue = Queue()
|
self.action_queue = Queue()
|
||||||
self.pending_resize = False
|
self.pending_resize = False
|
||||||
@ -287,10 +288,15 @@ class Boss(Thread):
|
|||||||
|
|
||||||
@callback
|
@callback
|
||||||
def on_focus(self, window, focused):
|
def on_focus(self, window, focused):
|
||||||
|
self.window_is_focused = focused
|
||||||
w = self.active_window
|
w = self.active_window
|
||||||
if w is not None:
|
if w is not None:
|
||||||
yield w
|
yield w
|
||||||
w.focus_changed(focused)
|
w.focus_changed(focused)
|
||||||
|
if focused:
|
||||||
|
self.start_cursor_blink()
|
||||||
|
else:
|
||||||
|
self.stop_cursor_blinking()
|
||||||
|
|
||||||
def display_scrollback(self, data):
|
def display_scrollback(self, data):
|
||||||
if self.opts.scrollback_in_new_tab:
|
if self.opts.scrollback_in_new_tab:
|
||||||
@ -408,7 +414,7 @@ class Boss(Thread):
|
|||||||
self.ui_timers.add_if_missing(((n + 1) * d / 1000) - now, glfw_post_empty_event)
|
self.ui_timers.add_if_missing(((n + 1) * d / 1000) - now, glfw_post_empty_event)
|
||||||
if draw_cursor:
|
if draw_cursor:
|
||||||
with self.cursor_program:
|
with self.cursor_program:
|
||||||
active.char_grid.render_cursor(rd, self.cursor_program)
|
active.char_grid.render_cursor(rd, self.cursor_program, self.window_is_focused)
|
||||||
|
|
||||||
def gui_close_window(self, window):
|
def gui_close_window(self, window):
|
||||||
if window.char_grid.buffer_id is not None:
|
if window.char_grid.buffer_id is not None:
|
||||||
|
|||||||
@ -14,7 +14,7 @@ from .utils import get_logical_dpi, to_color, set_primary_selection, open_url, c
|
|||||||
from .fast_data_types import (
|
from .fast_data_types import (
|
||||||
glUniform2ui, glUniform4f, glUniform1i, glUniform2f, glDrawArraysInstanced,
|
glUniform2ui, glUniform4f, glUniform1i, glUniform2f, glDrawArraysInstanced,
|
||||||
GL_TRIANGLE_FAN, glEnable, glDisable, GL_BLEND, glDrawArrays, ColorProfile,
|
GL_TRIANGLE_FAN, glEnable, glDisable, GL_BLEND, glDrawArrays, ColorProfile,
|
||||||
CURSOR_BEAM, CURSOR_BLOCK, CURSOR_UNDERLINE, DATA_CELL_SIZE
|
CURSOR_BEAM, CURSOR_BLOCK, CURSOR_UNDERLINE, DATA_CELL_SIZE, GL_LINE_LOOP
|
||||||
)
|
)
|
||||||
|
|
||||||
Cursor = namedtuple('Cursor', 'x y shape color blink')
|
Cursor = namedtuple('Cursor', 'x y shape color blink')
|
||||||
@ -454,7 +454,7 @@ class CharGrid:
|
|||||||
def render_cells(self, sg, cell_program, sprites):
|
def render_cells(self, sg, cell_program, sprites):
|
||||||
render_cells(self.buffer_id, sg, cell_program, sprites)
|
render_cells(self.buffer_id, sg, cell_program, sprites)
|
||||||
|
|
||||||
def render_cursor(self, sg, cursor_program):
|
def render_cursor(self, sg, cursor_program, is_focused):
|
||||||
cursor = self.current_cursor
|
cursor = self.current_cursor
|
||||||
if not self.screen.cursor_visible or self.scrolled_by:
|
if not self.screen.cursor_visible or self.scrolled_by:
|
||||||
return
|
return
|
||||||
@ -481,5 +481,8 @@ class CharGrid:
|
|||||||
glUniform4f(ul('color'), col[0], col[1], col[2], alpha)
|
glUniform4f(ul('color'), col[0], col[1], col[2], alpha)
|
||||||
glUniform2f(ul('xpos'), left, right)
|
glUniform2f(ul('xpos'), left, right)
|
||||||
glUniform2f(ul('ypos'), top, bottom)
|
glUniform2f(ul('ypos'), top, bottom)
|
||||||
|
if is_focused:
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4)
|
||||||
|
else:
|
||||||
|
glDrawArrays(GL_LINE_LOOP, 0, 4)
|
||||||
glDisable(GL_BLEND)
|
glDisable(GL_BLEND)
|
||||||
|
|||||||
@ -654,7 +654,7 @@ int add_module_gl_constants(PyObject *module) {
|
|||||||
GLC(GL_VENDOR);
|
GLC(GL_VENDOR);
|
||||||
GLC(GL_SHADING_LANGUAGE_VERSION);
|
GLC(GL_SHADING_LANGUAGE_VERSION);
|
||||||
GLC(GL_RENDERER);
|
GLC(GL_RENDERER);
|
||||||
GLC(GL_TRIANGLE_FAN); GLC(GL_TRIANGLE_STRIP); GLC(GL_TRIANGLES);
|
GLC(GL_TRIANGLE_FAN); GLC(GL_TRIANGLE_STRIP); GLC(GL_TRIANGLES); GLC(GL_LINE_LOOP);
|
||||||
GLC(GL_COLOR_BUFFER_BIT);
|
GLC(GL_COLOR_BUFFER_BIT);
|
||||||
GLC(GL_VERTEX_SHADER);
|
GLC(GL_VERTEX_SHADER);
|
||||||
GLC(GL_FRAGMENT_SHADER);
|
GLC(GL_FRAGMENT_SHADER);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user