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
|
guicolor_T
|
||||||
gui_mch_get_rgb_color(int r, int g, int b)
|
gui_mch_get_rgb_color(int r, int g, int b)
|
||||||
{
|
{
|
||||||
char spec[8]; /* space enough to hold "#RRGGBB" */
|
|
||||||
XColor available;
|
XColor available;
|
||||||
Colormap colormap;
|
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);
|
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
|
if (XParseColor(gui.dpy, colormap, (char *)spec, &available) != 0
|
||||||
&& XAllocColor(gui.dpy, colormap, &available) != 0)
|
&& XAllocColor(gui.dpy, colormap, &available) != 0)
|
||||||
return (guicolor_T)available.pixel;
|
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;
|
return INVALCOLOR;
|
||||||
}
|
}
|
||||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1800,
|
||||||
/**/
|
/**/
|
||||||
1799,
|
1799,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user