123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- From 1635e04d3643dd4caa0c7c2043b585c6d7e4705f Mon Sep 17 00:00:00 2001
- From: Rizqi Nur Assyaufi <bandithijo@gmail.com>
- Date: Mon, 18 Jul 2022 01:15:45 +0800
- Subject: [PATCH] [st][patch][font2] Add patch for st-0.8.5
- ---
- config.def.h | 6 +++
- x.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 107 insertions(+)
- diff --git a/config.def.h b/config.def.h
- index 91ab8ca..717b2f0 100644
- --- a/config.def.h
- +++ b/config.def.h
- @@ -6,6 +6,12 @@
- * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
- */
- static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
- +/* Spare fonts */
- +static char *font2[] = {
- +/* "Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */
- +/* "Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */
- +};
- +
- static int borderpx = 2;
- /*
- diff --git a/x.c b/x.c
- index 8a16faa..220fc4f 100644
- --- a/x.c
- +++ b/x.c
- @@ -157,6 +157,8 @@ static void xhints(void);
- static int xloadcolor(int, const char *, Color *);
- static int xloadfont(Font *, FcPattern *);
- static void xloadfonts(const char *, double);
- +static int xloadsparefont(FcPattern *, int);
- +static void xloadsparefonts(void);
- static void xunloadfont(Font *);
- static void xunloadfonts(void);
- static void xsetenv(void);
- @@ -306,6 +308,7 @@ zoomabs(const Arg *arg)
- {
- xunloadfonts();
- xloadfonts(usedfont, arg->f);
- + xloadsparefonts();
- cresize(0, 0);
- redraw();
- xhints();
- @@ -1034,6 +1037,101 @@ xloadfonts(const char *fontstr, double fontsize)
- FcPatternDestroy(pattern);
- }
- +int
- +xloadsparefont(FcPattern *pattern, int flags)
- +{
- + FcPattern *match;
- + FcResult result;
- +
- + match = FcFontMatch(NULL, pattern, &result);
- + if (!match) {
- + return 1;
- + }
- +
- + if (!(frc[frclen].font = XftFontOpenPattern(xw.dpy, match))) {
- + FcPatternDestroy(match);
- + return 1;
- + }
- +
- + frc[frclen].flags = flags;
- + /* Believe U+0000 glyph will present in each default font */
- + frc[frclen].unicodep = 0;
- + frclen++;
- +
- + return 0;
- +}
- +
- +void
- +xloadsparefonts(void)
- +{
- + FcPattern *pattern;
- + double sizeshift, fontval;
- + int fc;
- + char **fp;
- +
- + if (frclen != 0)
- + die("can't embed spare fonts. cache isn't empty");
- +
- + /* Calculate count of spare fonts */
- + fc = sizeof(font2) / sizeof(*font2);
- + if (fc == 0)
- + return;
- +
- + /* Allocate memory for cache entries. */
- + if (frccap < 4 * fc) {
- + frccap += 4 * fc - frccap;
- + frc = xrealloc(frc, frccap * sizeof(Fontcache));
- + }
- +
- + for (fp = font2; fp - font2 < fc; ++fp) {
- +
- + if (**fp == '-')
- + pattern = XftXlfdParse(*fp, False, False);
- + else
- + pattern = FcNameParse((FcChar8 *)*fp);
- +
- + if (!pattern)
- + die("can't open spare font %s\n", *fp);
- +
- + if (defaultfontsize > 0) {
- + sizeshift = usedfontsize - defaultfontsize;
- + if (sizeshift != 0 &&
- + FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval) ==
- + FcResultMatch) {
- + fontval += sizeshift;
- + FcPatternDel(pattern, FC_PIXEL_SIZE);
- + FcPatternDel(pattern, FC_SIZE);
- + FcPatternAddDouble(pattern, FC_PIXEL_SIZE, fontval);
- + }
- + }
- +
- + FcPatternAddBool(pattern, FC_SCALABLE, 1);
- +
- + FcConfigSubstitute(NULL, pattern, FcMatchPattern);
- + XftDefaultSubstitute(xw.dpy, xw.scr, pattern);
- +
- + if (xloadsparefont(pattern, FRC_NORMAL))
- + die("can't open spare font %s\n", *fp);
- +
- + FcPatternDel(pattern, FC_SLANT);
- + FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
- + if (xloadsparefont(pattern, FRC_ITALIC))
- + die("can't open spare font %s\n", *fp);
- +
- + FcPatternDel(pattern, FC_WEIGHT);
- + FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
- + if (xloadsparefont(pattern, FRC_ITALICBOLD))
- + die("can't open spare font %s\n", *fp);
- +
- + FcPatternDel(pattern, FC_SLANT);
- + FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
- + if (xloadsparefont(pattern, FRC_BOLD))
- + die("can't open spare font %s\n", *fp);
- +
- + FcPatternDestroy(pattern);
- + }
- +}
- +
- void
- xunloadfont(Font *f)
- {
- @@ -1131,6 +1229,9 @@ xinit(int cols, int rows)
- usedfont = (opt_font == NULL)? font : opt_font;
- xloadfonts(usedfont, 0);
- + /* spare fonts */
- + xloadsparefonts();
- +
- /* colors */
- xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
- xloadcols();
- --
- 2.37.1
|