Skip to content

Commit 3c069b0

Browse files
committed
Test
1 parent f2bd971 commit 3c069b0

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

kitty/child-monitor.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ schedule_write_to_child(unsigned long id, unsigned int num, ...) {
286286
}
287287
screen->write_buf_sz = screen->write_buf_used + sz;
288288
screen->write_buf = PyMem_RawRealloc(screen->write_buf, screen->write_buf_sz);
289-
if (screen->write_buf == NULL) { fatal("Out of memory."); }
289+
if (screen->write_buf == NULL) fatal("Out of memory.");
290290
}
291291
va_start(ap, num);
292292
for (unsigned int i = 0; i < num; i++) {
@@ -299,7 +299,7 @@ schedule_write_to_child(unsigned long id, unsigned int num, ...) {
299299
if (screen->write_buf_sz > BUFSIZ && screen->write_buf_used < BUFSIZ) {
300300
screen->write_buf_sz = BUFSIZ;
301301
screen->write_buf = PyMem_RawRealloc(screen->write_buf, screen->write_buf_sz);
302-
if (screen->write_buf == NULL) { fatal("Out of memory."); }
302+
if (screen->write_buf == NULL) fatal("Out of memory.");
303303
}
304304
if (screen->write_buf_used) wakeup_io_loop(false);
305305
screen_mutex(unlock, write);
@@ -639,10 +639,13 @@ render_os_window(OSWindow *os_window, double now, unsigned int active_window_id,
639639
if (w->visible && WD.screen) {
640640
before_render();
641641
bool is_active_window = i == tab->active_window;
642-
draw_cells(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx * x_ratio, WD.dy * y_ratio, WD.screen, os_window, is_active_window, true);
643-
if (WD.screen->start_visual_bell_at != 0) {
644-
double bell_left = global_state.opts.visual_bell_duration - (now - WD.screen->start_visual_bell_at);
645-
set_maximum_wait(bell_left);
642+
if (WD.screen->render_not_only_pixel_scroll) {
643+
WD.screen->render_not_only_pixel_scroll = false;
644+
draw_cells(WD.vao_idx, WD.gvao_idx, WD.xstart, WD.ystart, WD.dx * x_ratio, WD.dy * y_ratio, WD.screen, os_window, is_active_window, true);
645+
if (WD.screen->start_visual_bell_at != 0) {
646+
double bell_left = global_state.opts.visual_bell_duration - (now - WD.screen->start_visual_bell_at);
647+
set_maximum_wait(bell_left);
648+
}
646649
}
647650
after_render(os_window, (WD.screen->scrolled_by_pixels * 2.0) / os_window->viewport_height);
648651
w->cursor_visible_at_last_render = WD.screen->cursor_render_info.is_visible; w->last_cursor_x = WD.screen->cursor_render_info.x; w->last_cursor_y = WD.screen->cursor_render_info.y; w->last_cursor_shape = WD.screen->cursor_render_info.shape;

kitty/screen.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
100100
self->is_dirty = true;
101101
self->scroll_changed = false;
102102
self->pixel_scroll_changed = false;
103+
self->render_not_only_pixel_scroll = false;
103104
self->margin_top = 0; self->margin_bottom = self->lines - 1;
104105
self->history_line_added_count = 0;
105106
RESET_CHARSETS;

kitty/screen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ typedef struct {
7676
Selection selection;
7777
SelectionBoundary last_rendered_selection_start, last_rendered_selection_end, last_rendered_url_start, last_rendered_url_end;
7878
Selection url_range;
79-
bool use_latin1, selection_updated_once, is_dirty, scroll_changed, pixel_scroll_changed;
79+
bool use_latin1, selection_updated_once, is_dirty, scroll_changed, pixel_scroll_changed, render_not_only_pixel_scroll;
8080
Cursor *cursor;
8181
SavepointBuffer main_savepoints, alt_savepoints;
8282
SavemodesBuffer modes_savepoints;

kitty/shaders.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ void setup_scroll(OSWindow *os_window) {
184184
glGenTextures(1, &os_window->scroll_texture_id);
185185
glBindTexture(GL_TEXTURE_2D, os_window->scroll_texture_id);
186186
printf("%d %d\n", os_window->viewport_width, os_window->viewport_height);
187-
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, os_window->viewport_width, os_window->viewport_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
187+
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, os_window->viewport_width, os_window->viewport_height + 100, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
188188
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 400, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
189189
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
190190
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -217,7 +217,7 @@ void before_render() {
217217
// first pass
218218
glBindFramebuffer(GL_FRAMEBUFFER, scroll_framebuffer);
219219
//glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
220-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // we're not using the stencil buffer now
220+
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // we're not using the stencil buffer now
221221
}
222222

223223
void after_render(OSWindow *os_window, double pixels) {
@@ -360,6 +360,7 @@ cell_prepare_to_render(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, GLfloa
360360
bool disable_ligatures = screen->disable_ligatures == DISABLE_LIGATURES_CURSOR;
361361

362362
if (screen->scroll_changed || screen->is_dirty || (disable_ligatures && cursor_pos_changed)) {
363+
screen->render_not_only_pixel_scroll = true;
363364
sz = sizeof(GPUCell) * screen->lines * screen->columns;
364365
address = alloc_and_map_vao_buffer(vao_idx, sz, cell_data_buffer, GL_STREAM_DRAW, GL_WRITE_ONLY);
365366
screen_update_cell_data(screen, address, fonts_data, disable_ligatures && cursor_pos_changed);
@@ -373,6 +374,7 @@ cell_prepare_to_render(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, GLfloa
373374
}
374375

375376
if (screen_is_selection_dirty(screen)) {
377+
screen->render_not_only_pixel_scroll = true;
376378
sz = screen->lines * screen->columns;
377379
address = alloc_and_map_vao_buffer(vao_idx, sz, selection_buffer, GL_STREAM_DRAW, GL_WRITE_ONLY);
378380
screen_apply_selection(screen, address, sz);
@@ -381,6 +383,7 @@ cell_prepare_to_render(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, GLfloa
381383
}
382384

383385
if (gvao_idx && grman_update_layers(screen->grman, screen->scrolled_by, xstart, ystart, dx, dy, screen->columns, screen->lines, screen->cell_size)) {
386+
screen->render_not_only_pixel_scroll = true;
384387
send_graphics_data_to_gpu(screen->grman->count, gvao_idx, screen->grman->render_data);
385388
changed = true;
386389
}

0 commit comments

Comments
 (0)