0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

updated for version 7.0022

This commit is contained in:
Bram Moolenaar
2004-12-12 11:33:30 +00:00
parent 293ee4d421
commit d8b0cf1cc5
20 changed files with 347 additions and 120 deletions

View File

@@ -1240,14 +1240,29 @@ gui_mch_get_font(
int giveErrorIfMissing)
{
LOGFONT lf;
GuiFont font;
GuiFont font = NOFONT;
get_logfont(&lf, name, NULL);
font = get_font_handle(&lf);
if (get_logfont(&lf, name, NULL, giveErrorIfMissing) == OK)
font = get_font_handle(&lf);
if (font == NOFONT && giveErrorIfMissing)
EMSG2(_(e_font), name);
return font;
}
/*
* Return the name of font "font" in allocated memory.
* Don't know how to get the actual name, thus use the provided name.
*/
char_u *
gui_mch_get_fontname(font, name)
GuiFont font;
char_u *name;
{
if (name == NULL)
return NULL;
return vim_strsave(name);
}
void
gui_mch_free_font(GuiFont font)
{
@@ -2600,21 +2615,65 @@ gui_mch_exit(int rc)
#endif
}
static char_u *
logfont2name(LOGFONT lf)
{
char *p;
char *res;
char *charset_name;
charset_name = charset_id2name((int)lf.lfCharSet);
res = alloc((unsigned)(strlen(lf.lfFaceName) + 20
+ (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
if (res != NULL)
{
p = res;
/* make a normal font string out of the lf thing:*/
sprintf((char *)p, "%s:h%d", lf.lfFaceName, pixels_to_points(
lf.lfHeight < 0 ? -lf.lfHeight : lf.lfHeight, TRUE));
while (*p)
{
if (*p == ' ')
*p = '_';
++p;
}
#ifndef MSWIN16_FASTTEXT
if (lf.lfItalic)
STRCAT(p, ":i");
if (lf.lfWeight >= FW_BOLD)
STRCAT(p, ":b");
#endif
if (lf.lfUnderline)
STRCAT(p, ":u");
if (lf.lfStrikeOut)
STRCAT(p, ":s");
if (charset_name != NULL)
{
STRCAT(p, ":c");
STRCAT(p, charset_name);
}
}
return res;
}
/*
* Initialise vim to use the font with the given name. Return FAIL if the font
* could not be loaded, OK otherwise.
* Initialise vim to use the font with the given name.
* Return FAIL if the font could not be loaded, OK otherwise.
*/
int
gui_mch_init_font(char_u *font_name, int fontset)
{
LOGFONT lf;
GuiFont font = NOFONT;
char_u *p;
/* Load the font */
if (get_logfont(&lf, font_name, NULL))
if (get_logfont(&lf, font_name, NULL, TRUE) == OK)
font = get_font_handle(&lf);
if (font == NOFONT)
return FAIL;
if (font_name == NULL)
font_name = lf.lfFaceName;
#if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
@@ -2627,46 +2686,21 @@ gui_mch_init_font(char_u *font_name, int fontset)
gui.norm_font = font;
current_font_height = lf.lfHeight;
GetFontSize(font);
hl_set_font_name(lf.lfFaceName);
/* When setting 'guifont' to "*" replace it with the actual font name. */
if (STRCMP(font_name, "*") == 0 && STRCMP(p_guifont, "*") == 0)
p = logfont2name(lf);
if (p != NULL)
{
char *charset_name;
char_u *p;
hl_set_font_name(p);
charset_name = charset_id2name((int)lf.lfCharSet);
p = alloc((unsigned)(strlen(lf.lfFaceName) + 20
+ (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
if (p != NULL)
/* When setting 'guifont' to "*" replace it with the actual font name.
* */
if (STRCMP(font_name, "*") == 0 && STRCMP(p_guifont, "*") == 0)
{
/* make a normal font string out of the lf thing:*/
sprintf((char *)p, "%s:h%d", lf.lfFaceName, pixels_to_points(
lf.lfHeight < 0 ? -lf.lfHeight : lf.lfHeight, TRUE));
vim_free(p_guifont);
p_guifont = p;
while (*p)
{
if (*p == ' ')
*p = '_';
++p;
}
#ifndef MSWIN16_FASTTEXT
if (lf.lfItalic)
STRCAT(p, ":i");
if (lf.lfWeight >= FW_BOLD)
STRCAT(p, ":b");
#endif
if (lf.lfUnderline)
STRCAT(p, ":u");
if (lf.lfStrikeOut)
STRCAT(p, ":s");
if (charset_name != NULL)
{
STRCAT(p, ":c");
STRCAT(p, charset_name);
}
}
else
vim_free(p);
}
#ifndef MSWIN16_FASTTEXT