forked from aniani/vim
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.
This commit is contained in:
@@ -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,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user