]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0646: GTK3 GUI slow on HiDPI/4K with software rendering v9.2.0646
authorChristoffer Aasted <dezzadk@gmail.com>
Sun, 14 Jun 2026 15:46:12 +0000 (15:46 +0000)
committerChristian Brabandt <cb@256bit.org>
Sun, 14 Jun 2026 15:46:12 +0000 (15:46 +0000)
Problem:  GTK3 GUI slow on HiDPI/4K with software rendering
Solution: Turn off Alpha rendering processing (Christoffer Aasted)

Reduces the processing load significantly, since it contains no alpha
channel.

https://www.cairographics.org/manual/cairo-cairo-surface-t.html#CAIRO-CONTENT-COLOR-ALPHA:CAPS

Tested on aarch64 with a rpi5 and 4k/hidpi integer scaling.

Slowest gvim I have encountered yet.

Slow symptoms;
* Startup
* Scrolling
* Drawing text
* Loading new buffers

related: #18002
closes:  #20513

Signed-off-by: Christoffer Aasted <dezzadk@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/gui_gtk_x11.c
src/version.c

index b99f49062f1748ca09771b2fd4b11dcd446b06b9..5fe1ea730bc2e9987dce12f64cd81a7e9dde15d9 100644 (file)
@@ -814,7 +814,7 @@ scale_factor_event(GtkWidget *widget,
     gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
     gui.surface = gdk_window_create_similar_surface(
            gtk_widget_get_window(widget),
-           CAIRO_CONTENT_COLOR_ALPHA,
+           CAIRO_CONTENT_COLOR,
            w, h);
 
     int            usable_height = h;
@@ -2900,7 +2900,7 @@ drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED)
 #if GTK_CHECK_VERSION(3,0,0)
     gui.surface = gdk_window_create_similar_surface(
            gtk_widget_get_window(widget),
-           CAIRO_CONTENT_COLOR_ALPHA,
+           CAIRO_CONTENT_COLOR,
            gtk_widget_get_allocated_width(widget),
            gtk_widget_get_allocated_height(widget));
 #else
@@ -3035,7 +3035,7 @@ drawarea_configure_event_cb(GtkWidget           *widget,
 
     gui.surface = gdk_window_create_similar_surface(
            gtk_widget_get_window(widget),
-           CAIRO_CONTENT_COLOR_ALPHA,
+           CAIRO_CONTENT_COLOR,
            event->width, event->height);
 
     gtk_widget_queue_draw(widget);
index 4a8bfe821302753584e9ada9facb7fd824d7f876..959bc0f9af6ce8cf3b94c22255c556fcc3e9f596 100644 (file)
@@ -759,6 +759,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    646,
 /**/
     645,
 /**/