mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-05 15:41:39 +02:00
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
# vim:fileencoding=utf-8
|
|
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
|
|
from threading import Lock
|
|
|
|
from .config import build_ansi_color_tables, to_color
|
|
from .fonts import load_font_family
|
|
|
|
from OpenGL.arrays import ArrayDatatype
|
|
from OpenGL.GL import (
|
|
GL_ARRAY_BUFFER,
|
|
GL_COLOR_BUFFER_BIT, GL_COMPILE_STATUS,
|
|
GL_FALSE, GL_FLOAT, GL_FRAGMENT_SHADER,
|
|
GL_LINK_STATUS, GL_RENDERER,
|
|
GL_SHADING_LANGUAGE_VERSION,
|
|
GL_STATIC_DRAW, GL_TEXTURE_2D, GL_TRIANGLES,
|
|
GL_TRUE, GL_UNPACK_ALIGNMENT, GL_VENDOR, GL_VERSION,
|
|
GL_VERTEX_SHADER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T,
|
|
GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER,
|
|
GL_LINEAR, GL_RGB, GL_RGBA, GL_UNSIGNED_BYTE, GL_TEXTURE0,
|
|
GL_REPEAT,
|
|
glActiveTexture, glAttachShader,
|
|
glBindBuffer, glBindTexture, glBindVertexArray,
|
|
glBufferData, glClear, glClearColor,
|
|
glCompileShader, glCreateProgram,
|
|
glCreateShader, glDeleteProgram,
|
|
glDeleteShader, glDrawArrays,
|
|
glEnableVertexAttribArray, glGenBuffers, glGenTextures,
|
|
glGenVertexArrays, glGetAttribLocation,
|
|
glGetProgramInfoLog, glGetProgramiv,
|
|
glGetShaderInfoLog, glGetShaderiv, glGetString,
|
|
glGetUniformLocation, glLinkProgram, glPixelStorei,
|
|
glShaderSource, glTexImage2D, glTexParameteri, glUniform1i, glUseProgram,
|
|
glVertexAttribPointer, glViewport)
|
|
|
|
|
|
class CharGrid:
|
|
|
|
def __init__(self, opts):
|
|
self.apply_opts(opts)
|
|
self.lock = Lock()
|
|
|
|
def apply_clear_color(self):
|
|
bg = self.default_bg
|
|
glClearColor(bg[0]/255, bg[1]/255, bg[2]/255, 1)
|
|
|
|
def apply_opts(self, opts):
|
|
self.opts = opts
|
|
build_ansi_color_tables(opts)
|
|
self.opts = opts
|
|
self.default_bg = self.original_bg = opts.background
|
|
self.default_fg = self.original_fg = opts.foreground
|
|
self.base_font_family = load_font_family(opts.font_family)
|
|
self.font_size = int(opts.font_size * 64)
|
|
self.apply_clear_color()
|
|
|
|
def on_resize(self, window, w, h):
|
|
glViewport(0, 0, w, h)
|
|
self.do_layout(w, h)
|
|
|
|
def do_layout(self, w, h):
|
|
pass
|
|
|
|
def redraw(self):
|
|
pass
|
|
|
|
def render(self):
|
|
with self.lock:
|
|
glClear(GL_COLOR_BUFFER_BIT)
|
|
|
|
def change_colors(self, changes):
|
|
dirtied = False
|
|
for which, val in changes.items():
|
|
if which in ('fg', 'bg'):
|
|
if not val:
|
|
setattr(self, 'default_' + which, getattr(self, 'original_' + which))
|
|
dirtied = True
|
|
else:
|
|
val = to_color(val)
|
|
if val is not None:
|
|
setattr(self, 'default_' + which, val)
|
|
dirtied = True
|
|
if dirtied:
|
|
self.apply_clear_color()
|
|
self.redraw()
|
|
|
|
def update_screen(self, changes):
|
|
self.redraw()
|