Skip to content

Instantly share code, notes, and snippets.

@mattn
Created June 16, 2015 01:08
Show Gist options
  • Save mattn/c9b429f98f3146364a94 to your computer and use it in GitHub Desktop.
Save mattn/c9b429f98f3146364a94 to your computer and use it in GitHub Desktop.
diff -r 7a8dcf699b22 runtime/doc/options.txt
--- a/runtime/doc/options.txt Tue Jun 09 21:33:31 2015 +0200
+++ b/runtime/doc/options.txt Tue Jun 16 10:08:21 2015 +0900
@@ -3557,6 +3557,10 @@
HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS,
SYMBOL, THAI, TURKISH, VIETNAMESE ANSI and BALTIC.
Normally you would use "cDEFAULT".
+ qXX - quality XX. Valid charsets are: PROOF, DRAFT,
+ ANTIALIASED, UNANTIALIASED, CLEARTYPE, DEFAULT.
+ Normally you would use "qDEFAULT".
+ Some quality values isn't supported in legacy OSs.
Use a ':' to separate the options.
- A '_' can be used in the place of a space, so you don't need to use
diff -r 7a8dcf699b22 src/gui_w48.c
--- a/src/gui_w48.c Tue Jun 09 21:33:31 2015 +0200
+++ b/src/gui_w48.c Tue Jun 16 10:08:21 2015 +0900
@@ -3090,7 +3090,7 @@
{
char *p;
char *res;
- char *charset_name;
+ char *charset_name, *quality_name;
char *font_name = lf.lfFaceName;
charset_name = charset_id2name((int)lf.lfCharSet);
@@ -3104,6 +3104,8 @@
(char_u **)&font_name, &len);
}
#endif
+ quality_name = quality_id2name((int)lf.lfQuality);
+
res = alloc((unsigned)(strlen(font_name) + 20
+ (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
if (res != NULL)
@@ -3133,6 +3135,11 @@
STRCAT(p, ":c");
STRCAT(p, charset_name);
}
+ if (quality_name != NULL)
+ {
+ STRCAT(p, ":q");
+ STRCAT(p, quality_name);
+ }
}
#ifdef FEAT_MBYTE
diff -r 7a8dcf699b22 src/os_mswin.c
--- a/src/os_mswin.c Tue Jun 09 21:33:31 2015 +0200
+++ b/src/os_mswin.c Tue Jun 16 10:08:21 2015 +0900
@@ -2746,6 +2746,33 @@
{NULL, 0}
};
+struct quality_pair
+{
+ char *name;
+ DWORD quality;
+};
+
+static struct quality_pair
+quality_pairs[] = {
+#ifdef CLEARTYPE_QUALITY
+ {"CLEARTYPE", CLEARTYPE_QUALITY},
+#endif
+#ifdef ANTIALIASED_QUALITY
+ {"ANTIALIASED", ANTIALIASED_QUALITY},
+#endif
+#ifdef NOANTIALIASED_QUALITY
+ {"NOANTIALIASED", NOANTIALIASED_QUALITY},
+#endif
+#ifdef PROOF_QUALITY
+ {"PROOF", PROOF_QUALITY},
+#endif
+#ifdef PROOF_QUALITY
+ {"DRAFT", DRAFT_QUALITY},
+#endif
+ {"DEFAULT", DEFAULT_QUALITY},
+ {NULL, 0}
+};
+
/*
* Convert a charset ID to a name.
* Return NULL when not recognized.
@@ -2761,6 +2788,21 @@
return cp->name;
}
+/*
+ * Convert a quality ID to a name.
+ * Return NULL when not recognized.
+ */
+ char *
+quality_id2name(DWORD id)
+{
+ struct quality_pair *qp;
+
+ for (qp = quality_pairs; qp->name != NULL; ++qp)
+ if (id == qp->quality)
+ break;
+ return qp->name;
+}
+
static const LOGFONT s_lfDefault =
{
-12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
@@ -3046,6 +3088,26 @@
}
break;
}
+ case 'q':
+ {
+ struct quality_pair *qp;
+
+ for (qp = quality_pairs; qp->name != NULL; ++qp)
+ if (STRNCMP(p, qp->name, strlen(qp->name)) == 0)
+ {
+ lf->lfQuality = qp->quality;
+ p += strlen(qp->name);
+ break;
+ }
+ if (qp->name == NULL && verbose)
+ {
+ vim_snprintf((char *)IObuff, IOSIZE,
+ _("E244: Illegal quality name \"%s\" in font name \"%s\""), p, name);
+ EMSG(IObuff);
+ break;
+ }
+ break;
+ }
default:
if (verbose)
{
diff -r 7a8dcf699b22 src/proto/os_mswin.pro
--- a/src/proto/os_mswin.pro Tue Jun 09 21:33:31 2015 +0200
+++ b/src/proto/os_mswin.pro Tue Jun 16 10:08:21 2015 +0900
@@ -49,5 +49,6 @@
char_u *serverGetReply __ARGS((HWND server, int *expr_res, int remove, int wait));
void serverProcessPendingMessages __ARGS((void));
char *charset_id2name __ARGS((int id));
+char *quality_id2name __ARGS((DWORD id));
int get_logfont __ARGS((LOGFONT *lf, char_u *name, HDC printer_dc, int verbose));
/* vim: set ft=c : */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment