diff --git a/src/globals.h b/src/globals.h index d8a2527fe4..6ed79a4c30 100644 --- a/src/globals.h +++ b/src/globals.h @@ -368,8 +368,8 @@ EXTERN int cterm_normal_fg_color INIT(= 0); EXTERN int cterm_normal_fg_bold INIT(= 0); EXTERN int cterm_normal_bg_color INIT(= 0); #ifdef FEAT_TERMGUICOLORS -EXTERN long_u cterm_normal_fg_gui_color INIT(= INVALCOLOR); -EXTERN long_u cterm_normal_bg_gui_color INIT(= INVALCOLOR); +EXTERN guicolor_T cterm_normal_fg_gui_color INIT(= INVALCOLOR); +EXTERN guicolor_T cterm_normal_bg_gui_color INIT(= INVALCOLOR); #endif #ifdef FEAT_AUTOCMD diff --git a/src/gui.c b/src/gui.c index a1c04b66e8..ed93c696c0 100644 --- a/src/gui.c +++ b/src/gui.c @@ -4790,7 +4790,7 @@ gui_get_color(char_u *name) int gui_get_lightness(guicolor_T pixel) { - long_u rgb = gui_mch_get_rgb(pixel); + long_u rgb = (long_u)gui_mch_get_rgb(pixel); return (int)( (((rgb >> 16) & 0xff) * 299) + (((rgb >> 8) & 0xff) * 587) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index ee73db3390..added7bd27 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -7020,7 +7020,7 @@ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag) /* * Return the RGB value of a pixel as long. */ - long_u + guicolor_T gui_mch_get_rgb(guicolor_T pixel) { #if GTK_CHECK_VERSION(3,0,0) @@ -7031,9 +7031,10 @@ gui_mch_get_rgb(guicolor_T pixel) gdk_colormap_query_color(gtk_widget_get_colormap(gui.drawarea), (unsigned long)pixel, &color); - return (((unsigned)color.red & 0xff00) << 8) + return (guicolor_T)( + (((unsigned)color.red & 0xff00) << 8) | ((unsigned)color.green & 0xff00) - | (((unsigned)color.blue & 0xff00) >> 8); + | (((unsigned)color.blue & 0xff00) >> 8)); #endif } diff --git a/src/gui_mac.c b/src/gui_mac.c index d750b3b1b6..8d79e55012 100644 --- a/src/gui_mac.c +++ b/src/gui_mac.c @@ -5181,10 +5181,10 @@ gui_mch_start_blink(void) /* * Return the RGB value of a pixel as long. */ - long_u + guicolor_T gui_mch_get_rgb(guicolor_T pixel) { - return (Red(pixel) << 16) + (Green(pixel) << 8) + Blue(pixel); + return (guicolor_T)((Red(pixel) << 16) + (Green(pixel) << 8) + Blue(pixel)); } diff --git a/src/gui_photon.c b/src/gui_photon.c index 1000a5eb5a..7b1462a1a3 100644 --- a/src/gui_photon.c +++ b/src/gui_photon.c @@ -1933,10 +1933,11 @@ gui_mch_setmouse(int x, int y) /* * Return the RGB value of a pixel as a long. */ - long_u + guicolor_T gui_mch_get_rgb(guicolor_T pixel) { - return PgRGB(PgRedValue(pixel), PgGreenValue(pixel), PgBlueValue(pixel)); + return (guicolor_T)(PgRGB(PgRedValue(pixel), + PgGreenValue(pixel), PgBlueValue(pixel))); } void diff --git a/src/gui_w32.c b/src/gui_w32.c index 78db43e6b3..773454feff 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -2263,11 +2263,11 @@ SaveInst(HINSTANCE hInst) /* * Return the RGB value of a pixel as a long. */ - long_u + guicolor_T gui_mch_get_rgb(guicolor_T pixel) { - return (GetRValue(pixel) << 16) + (GetGValue(pixel) << 8) - + GetBValue(pixel); + return (guicolor_T)((GetRValue(pixel) << 16) + (GetGValue(pixel) << 8) + + GetBValue(pixel)); } #if defined(FEAT_GUI_DIALOG) || defined(PROTO) diff --git a/src/gui_x11.c b/src/gui_x11.c index 7f09880cd0..2e3252d30b 100644 --- a/src/gui_x11.c +++ b/src/gui_x11.c @@ -3095,7 +3095,7 @@ gui_x11_blink_cb( /* * Return the RGB value of a pixel as a long. */ - long_u + guicolor_T gui_mch_get_rgb(guicolor_T pixel) { XColor xc; @@ -3105,8 +3105,8 @@ gui_mch_get_rgb(guicolor_T pixel) xc.pixel = pixel; XQueryColor(gui.dpy, colormap, &xc); - return ((xc.red & 0xff00) << 8) + (xc.green & 0xff00) - + ((unsigned)xc.blue >> 8); + return (guicolor_T)(((xc.red & 0xff00) << 8) + (xc.green & 0xff00) + + ((unsigned)xc.blue >> 8)); } /* diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro index f663dbaf10..124e2ae375 100644 --- a/src/proto/gui_gtk_x11.pro +++ b/src/proto/gui_gtk_x11.pro @@ -66,7 +66,7 @@ void gui_mch_menu_grey(vimmenu_T *menu, int grey); void gui_mch_menu_hidden(vimmenu_T *menu, int hidden); void gui_mch_draw_menubar(void); void gui_mch_enable_scrollbar(scrollbar_T *sb, int flag); -long_u gui_mch_get_rgb(guicolor_T pixel); +guicolor_T gui_mch_get_rgb(guicolor_T pixel); void gui_mch_getmouse(int *x, int *y); void gui_mch_setmouse(int x, int y); void gui_mch_mousehide(int hide); diff --git a/src/proto/gui_mac.pro b/src/proto/gui_mac.pro index ebe13f3300..9b59f1f484 100644 --- a/src/proto/gui_mac.pro +++ b/src/proto/gui_mac.pro @@ -78,7 +78,7 @@ void gui_mch_menu_grey(vimmenu_T *menu, int grey); void gui_mch_menu_hidden(vimmenu_T *menu, int hidden); void gui_mch_draw_menubar(void); int gui_mch_get_lightness(guicolor_T pixel); -long_u gui_mch_get_rgb(guicolor_T pixel); +guicolor_T gui_mch_get_rgb(guicolor_T pixel); int gui_mch_get_mouse_x(void); int gui_mch_get_mouse_y(void); void gui_mch_setmouse(int x, int y); diff --git a/src/proto/gui_photon.pro b/src/proto/gui_photon.pro index b03479c974..7681b87822 100644 --- a/src/proto/gui_photon.pro +++ b/src/proto/gui_photon.pro @@ -25,7 +25,7 @@ void mch_set_mouse_shape(int shape); void gui_mch_mousehide(int hide); void gui_mch_getmouse(int *x, int *y); void gui_mch_setmouse(int x, int y); -long_u gui_mch_get_rgb(guicolor_T pixel); +guicolor_T gui_mch_get_rgb(guicolor_T pixel); void gui_mch_new_colors(void); guicolor_T gui_mch_get_color(char_u *name); void gui_mch_set_fg_color(guicolor_T color); diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro index 20a92b9746..2eccf747fa 100644 --- a/src/proto/gui_w32.pro +++ b/src/proto/gui_w32.pro @@ -35,7 +35,7 @@ void gui_mch_enable_menu(int flag); void gui_mch_set_menu_pos(int x, int y, int w, int h); void gui_mch_menu_hidden(vimmenu_T *menu, int hidden); void gui_mch_draw_menubar(void); -long_u gui_mch_get_rgb(guicolor_T pixel); +guicolor_T gui_mch_get_rgb(guicolor_T pixel); void gui_mch_activate_window(void); void gui_mch_show_toolbar(int showit); void gui_mch_show_tabline(int showit); diff --git a/src/proto/gui_x11.pro b/src/proto/gui_x11.pro index ccaf99fd48..1e4410e318 100644 --- a/src/proto/gui_x11.pro +++ b/src/proto/gui_x11.pro @@ -24,7 +24,7 @@ void gui_mch_free_fontset(GuiFontset fontset); GuiFontset gui_mch_get_fontset(char_u *name, int giveErrorIfMissing, int fixed_width); int fontset_height(XFontSet fs); int fontset_height2(XFontSet fs); -guicolor_T gui_mch_get_color(char_u *reqname); +guicolor_T gui_mch_get_color(char_u *name); void gui_mch_set_fg_color(guicolor_T color); void gui_mch_set_bg_color(guicolor_T color); void gui_mch_set_sp_color(guicolor_T color); @@ -58,7 +58,7 @@ int gui_mch_is_blink_off(void); void gui_mch_set_blinking(long waittime, long on, long off); void gui_mch_stop_blink(void); void gui_mch_start_blink(void); -long_u gui_mch_get_rgb(guicolor_T pixel); +guicolor_T gui_mch_get_rgb(guicolor_T pixel); void gui_x11_callbacks(Widget textArea, Widget vimForm); void gui_mch_getmouse(int *x, int *y); void gui_mch_setmouse(int x, int y); diff --git a/src/proto/term.pro b/src/proto/term.pro index 93c6cb09bc..0c238d3d84 100644 --- a/src/proto/term.pro +++ b/src/proto/term.pro @@ -1,7 +1,7 @@ /* term.c */ guicolor_T termgui_mch_get_color(char_u *name); guicolor_T termgui_get_color(char_u *name); -long_u termgui_mch_get_rgb(guicolor_T color); +guicolor_T termgui_mch_get_rgb(guicolor_T color); int set_termname(char_u *term); void set_mouse_termcode(int n, char_u *s); void del_mouse_termcode(int n); @@ -25,8 +25,8 @@ void term_set_winpos(int x, int y); void term_set_winsize(int width, int height); void term_fg_color(int n); void term_bg_color(int n); -void term_fg_rgb_color(long_u rgb); -void term_bg_rgb_color(long_u rgb); +void term_fg_rgb_color(guicolor_T rgb); +void term_bg_rgb_color(guicolor_T rgb); void term_settitle(char_u *title); void ttest(int pairs); void add_long_to_buf(long_u val, char_u *dst); diff --git a/src/screen.c b/src/screen.c index 90ff60a024..c0901c063b 100644 --- a/src/screen.c +++ b/src/screen.c @@ -7878,7 +7878,7 @@ screen_start_highlight(int attr) else if (aep != NULL && cterm_normal_fg_bold && #ifdef FEAT_TERMGUICOLORS (p_tgc ? - (aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR): + (aep->ae_u.cterm.fg_rgb != INVALCOLOR): #endif (t_colors > 1 && aep->ae_u.cterm.fg_color) #ifdef FEAT_TERMGUICOLORS @@ -7907,9 +7907,9 @@ screen_start_highlight(int attr) #ifdef FEAT_TERMGUICOLORS if (p_tgc) { - if (aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR) + if (aep->ae_u.cterm.fg_rgb != INVALCOLOR) term_fg_rgb_color(aep->ae_u.cterm.fg_rgb); - if (aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR) + if (aep->ae_u.cterm.bg_rgb != INVALCOLOR) term_bg_rgb_color(aep->ae_u.cterm.bg_rgb); } else @@ -7969,8 +7969,8 @@ screen_stop_highlight(void) if (aep != NULL && #ifdef FEAT_TERMGUICOLORS (p_tgc ? - (aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR || - aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR): + (aep->ae_u.cterm.fg_rgb != INVALCOLOR + || aep->ae_u.cterm.bg_rgb != INVALCOLOR): #endif (aep->ae_u.cterm.fg_color || aep->ae_u.cterm.bg_color) #ifdef FEAT_TERMGUICOLORS @@ -8027,9 +8027,9 @@ screen_stop_highlight(void) #ifdef FEAT_TERMGUICOLORS if (p_tgc) { - if (cterm_normal_fg_gui_color != (long_u)INVALCOLOR) + if (cterm_normal_fg_gui_color != INVALCOLOR) term_fg_rgb_color(cterm_normal_fg_gui_color); - if (cterm_normal_bg_gui_color != (long_u)INVALCOLOR) + if (cterm_normal_bg_gui_color != INVALCOLOR) term_bg_rgb_color(cterm_normal_bg_gui_color); } else @@ -8062,10 +8062,9 @@ reset_cterm_colors(void) { /* set Normal cterm colors */ #ifdef FEAT_TERMGUICOLORS - if (p_tgc ? - (cterm_normal_fg_gui_color != (long_u)INVALCOLOR - || cterm_normal_bg_gui_color != (long_u)INVALCOLOR): - (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)) + if (p_tgc ? (cterm_normal_fg_gui_color != INVALCOLOR + || cterm_normal_bg_gui_color != INVALCOLOR) + : (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0)) #else if (cterm_normal_fg_color > 0 || cterm_normal_bg_color > 0) #endif @@ -9011,7 +9010,7 @@ can_clear(char_u *p) || gui.in_use #endif #ifdef FEAT_TERMGUICOLORS - || (p_tgc && cterm_normal_bg_gui_color == (long_u)INVALCOLOR) + || (p_tgc && cterm_normal_bg_gui_color == INVALCOLOR) || (!p_tgc && cterm_normal_bg_color == 0) #else || cterm_normal_bg_color == 0 diff --git a/src/structs.h b/src/structs.h index fbd01f3831..b9e31f10ad 100644 --- a/src/structs.h +++ b/src/structs.h @@ -92,8 +92,7 @@ typedef struct { # ifdef FEAT_XCLIPBOARD # include # endif -# define guicolor_T long_u /* avoid error in prototypes and - * make FEAT_TERMGUICOLORS work */ +# define guicolor_T long # define INVALCOLOR ((guicolor_T)0x1ffffff) #endif @@ -929,8 +928,8 @@ typedef struct attr_entry short_u fg_color; /* foreground color number */ short_u bg_color; /* background color number */ # ifdef FEAT_TERMGUICOLORS - long_u fg_rgb; /* foreground color RGB */ - long_u bg_rgb; /* background color RGB */ + guicolor_T fg_rgb; /* foreground color RGB */ + guicolor_T bg_rgb; /* background color RGB */ # endif } cterm; # ifdef FEAT_GUI diff --git a/src/syntax.c b/src/syntax.c index 427bed48f7..3865ac1ea3 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -8489,7 +8489,7 @@ color_name2handle(char_u *name) return gui.norm_pixel; #endif #ifdef FEAT_TERMGUICOLORS - if (cterm_normal_fg_gui_color != (long_u)INVALCOLOR) + if (cterm_normal_fg_gui_color != INVALCOLOR) return cterm_normal_fg_gui_color; /* Guess that the foreground is black or white. */ return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "black" : "white")); @@ -8504,7 +8504,7 @@ color_name2handle(char_u *name) return gui.back_pixel; #endif #ifdef FEAT_TERMGUICOLORS - if (cterm_normal_bg_gui_color != (long_u)INVALCOLOR) + if (cterm_normal_bg_gui_color != INVALCOLOR) return cterm_normal_bg_gui_color; /* Guess that the background is white or black. */ return GUI_GET_COLOR((char_u *)(*p_bg == 'l' ? "white" : "black")); @@ -8783,9 +8783,9 @@ hl_combine_attr(int char_attr, int prim_attr) if (spell_aep->ae_u.cterm.bg_color > 0) new_en.ae_u.cterm.bg_color = spell_aep->ae_u.cterm.bg_color; #ifdef FEAT_TERMGUICOLORS - if (spell_aep->ae_u.cterm.fg_rgb != (long_u)INVALCOLOR) + if (spell_aep->ae_u.cterm.fg_rgb != INVALCOLOR) new_en.ae_u.cterm.fg_rgb = spell_aep->ae_u.cterm.fg_rgb; - if (spell_aep->ae_u.cterm.bg_rgb != (long_u)INVALCOLOR) + if (spell_aep->ae_u.cterm.bg_rgb != INVALCOLOR) new_en.ae_u.cterm.bg_rgb = spell_aep->ae_u.cterm.bg_rgb; #endif } @@ -9077,7 +9077,7 @@ highlight_color( color = HL_TABLE()[id - 1].sg_gui_bg; if (color == INVALCOLOR) return NULL; - rgb = GUI_MCH_GET_RGB(color); + rgb = (long_u)GUI_MCH_GET_RGB(color); sprintf((char *)buf, "#%02x%02x%02x", (unsigned)(rgb >> 16), (unsigned)(rgb >> 8) & 255, diff --git a/src/term.c b/src/term.c index a521b7c062..bbd3a09f1a 100644 --- a/src/term.c +++ b/src/term.c @@ -77,9 +77,6 @@ struct builtin_term static struct builtin_term *find_builtin_term(char_u *name); static void parse_builtin_tcap(char_u *s); static void term_color(char_u *s, int n); -#ifdef FEAT_TERMGUICOLORS -static void term_rgb_color(char_u *s, long_u rgb); -#endif static void gather_termleader(void); #ifdef FEAT_TERMRESPONSE static void req_codes_from_term(void); @@ -1288,10 +1285,10 @@ termgui_get_color(char_u *name) return t; } - long_u + guicolor_T termgui_mch_get_rgb(guicolor_T color) { - return (long_u)color; + return color; } #endif @@ -2640,24 +2637,13 @@ term_color(char_u *s, int n) } #if defined(FEAT_TERMGUICOLORS) || defined(PROTO) - void -term_fg_rgb_color(long_u rgb) -{ - term_rgb_color(T_8F, rgb); -} - void -term_bg_rgb_color(long_u rgb) -{ - term_rgb_color(T_8B, rgb); -} - -#define RED(rgb) ((rgb>>16)&0xFF) -#define GREEN(rgb) ((rgb>> 8)&0xFF) -#define BLUE(rgb) ((rgb )&0xFF) +#define RED(rgb) (((long_u)(rgb) >> 16) & 0xFF) +#define GREEN(rgb) (((long_u)(rgb) >> 8) & 0xFF) +#define BLUE(rgb) (((long_u)(rgb) ) & 0xFF) static void -term_rgb_color(char_u *s, long_u rgb) +term_rgb_color(char_u *s, guicolor_T rgb) { #define MAX_COLOR_STR_LEN 100 char buf[MAX_COLOR_STR_LEN]; @@ -2666,6 +2652,18 @@ term_rgb_color(char_u *s, long_u rgb) (char *)s, RED(rgb), GREEN(rgb), BLUE(rgb)); OUT_STR(buf); } + + void +term_fg_rgb_color(guicolor_T rgb) +{ + term_rgb_color(T_8F, rgb); +} + + void +term_bg_rgb_color(guicolor_T rgb) +{ + term_rgb_color(T_8B, rgb); +} #endif #if (defined(FEAT_TITLE) && (defined(UNIX) || defined(VMS) \ diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim index edc3c386a8..24b05bec6a 100644 --- a/src/testdir/shared.vim +++ b/src/testdir/shared.vim @@ -109,19 +109,31 @@ func s:kill_server(cmd) endfunc " Wait for up to a second for "expr" to become true. -" Return time slept in milliseconds. +" Return time slept in milliseconds. With the +reltime feature this can be +" more than the actual waiting time. Without +reltime it can also be less. func WaitFor(expr) - let slept = 0 + " using reltime() is more accurate, but not always available + if has('reltime') + let start = reltime() + else + let slept = 0 + endif for i in range(100) try if eval(a:expr) + if has('reltime') + return float2nr(reltimefloat(reltime(start)) * 1000) + endif return slept endif catch endtry - let slept += 10 + if !has('reltime') + let slept += 10 + endif sleep 10m endfor + return 1000 endfunc " Run Vim, using the "vimcmd" file and "-u NORC". diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim index 46777d1ea5..70a41e90fd 100644 --- a/src/testdir/test_timers.vim +++ b/src/testdir/test_timers.vim @@ -19,7 +19,11 @@ func Test_oneshot() let timer = timer_start(50, 'MyHandler') let slept = WaitFor('g:val == 1') call assert_equal(1, g:val) - call assert_inrange(30, 100, slept) + if has('reltime') + call assert_inrange(50, 100, slept) + else + call assert_inrange(20, 100, slept) + endif endfunc func Test_repeat_three() @@ -27,7 +31,11 @@ func Test_repeat_three() let timer = timer_start(50, 'MyHandler', {'repeat': 3}) let slept = WaitFor('g:val == 3') call assert_equal(3, g:val) - call assert_inrange(80, 200, slept) + if has('reltime') + call assert_inrange(150, 250, slept) + else + call assert_inrange(80, 200, slept) + endif endfunc func Test_repeat_many() @@ -48,7 +56,11 @@ func Test_with_partial_callback() call timer_start(50, s:meow.bite) let slept = WaitFor('g:val == 1') call assert_equal(1, g:val) - call assert_inrange(30, 100, slept) + if has('reltime') + call assert_inrange(50, 130, slept) + else + call assert_inrange(20, 100, slept) + endif endfunc func Test_retain_partial() @@ -109,7 +121,11 @@ func Test_paused() let slept = WaitFor('g:val == 1') call assert_equal(1, g:val) - call assert_inrange(0, 10, slept) + if has('reltime') + call assert_inrange(0, 30, slept) + else + call assert_inrange(0, 10, slept) + endif endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index d08a2e6866..71b15c7173 100644 --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,14 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2243, +/**/ + 2242, +/**/ + 2241, +/**/ + 2240, /**/ 2239, /**/