Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
patch 8.0.1800: X11: getting color is slow
Problem: X11: getting color is slow.
Solution: Avoid using sprintf() and XParseColor(), put the RGB values in
XColor directly.
- Loading branch information
Showing
with
13 additions
and
2 deletions.
-
+11
−2
src/gui_x11.c
-
+2
−0
src/version.c
|
@@ -2296,15 +2296,24 @@ gui_mch_get_color(char_u *name) |
|
|
guicolor_T |
|
|
gui_mch_get_rgb_color(int r, int g, int b) |
|
|
{ |
|
|
char spec[8]; /* space enough to hold "#RRGGBB" */ |
|
|
XColor available; |
|
|
Colormap colormap; |
|
|
|
|
|
/* Using XParseColor() is very slow, put rgb in XColor directly. |
|
|
|
|
|
char spec[8]; // space enough to hold "#RRGGBB" |
|
|
vim_snprintf(spec, sizeof(spec), "#%.2x%.2x%.2x", r, g, b); |
|
|
colormap = DefaultColormap(gui.dpy, DefaultScreen(gui.dpy)); |
|
|
if (XParseColor(gui.dpy, colormap, (char *)spec, &available) != 0 |
|
|
&& XAllocColor(gui.dpy, colormap, &available) != 0) |
|
|
return (guicolor_T)available.pixel; |
|
|
*/ |
|
|
colormap = DefaultColormap(gui.dpy, DefaultScreen(gui.dpy)); |
|
|
vim_memset(&available, 0, sizeof(XColor)); |
|
|
available.red = r << 8; |
|
|
available.green = g << 8; |
|
|
available.blue = b << 8; |
|
|
if (XAllocColor(gui.dpy, colormap, &available) != 0) |
|
|
return (guicolor_T)available.pixel; |
|
|
|
|
|
return INVALCOLOR; |
|
|
} |
|
|
|
@@ -761,6 +761,8 @@ static char *(features[]) = |
|
|
|
|
|
static int included_patches[] = |
|
|
{ /* Add new patch number below this line */ |
|
|
/**/ |
|
|
1800, |
|
|
/**/ |
|
|
1799, |
|
|
/**/ |
|
|