st-font2-0.8.5.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-font2-0.8.5.diff (4196B)
---
1 From 1635e04d3643dd4caa0c7c2043b585c6d7e4705f Mon Sep 17 00:00:00 2001
2 From: Rizqi Nur Assyaufi <bandithijo@gmail.com>
3 Date: Mon, 18 Jul 2022 01:15:45 +0800
4 Subject: [PATCH] [st][patch][font2] Add patch for st-0.8.5
5
6 ---
7 config.def.h | 6 +++
8 x.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++
9 2 files changed, 107 insertions(+)
10
11 diff --git a/config.def.h b/config.def.h
12 index 91ab8ca..717b2f0 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -6,6 +6,12 @@
16 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
17 */
18 static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
19 +/* Spare fonts */
20 +static char *font2[] = {
21 +/* "Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */
22 +/* "Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */
23 +};
24 +
25 static int borderpx = 2;
26
27 /*
28 diff --git a/x.c b/x.c
29 index 8a16faa..220fc4f 100644
30 --- a/x.c
31 +++ b/x.c
32 @@ -157,6 +157,8 @@ static void xhints(void);
33 static int xloadcolor(int, const char *, Color *);
34 static int xloadfont(Font *, FcPattern *);
35 static void xloadfonts(const char *, double);
36 +static int xloadsparefont(FcPattern *, int);
37 +static void xloadsparefonts(void);
38 static void xunloadfont(Font *);
39 static void xunloadfonts(void);
40 static void xsetenv(void);
41 @@ -306,6 +308,7 @@ zoomabs(const Arg *arg)
42 {
43 xunloadfonts();
44 xloadfonts(usedfont, arg->f);
45 + xloadsparefonts();
46 cresize(0, 0);
47 redraw();
48 xhints();
49 @@ -1034,6 +1037,101 @@ xloadfonts(const char *fontstr, double fontsize)
50 FcPatternDestroy(pattern);
51 }
52
53 +int
54 +xloadsparefont(FcPattern *pattern, int flags)
55 +{
56 + FcPattern *match;
57 + FcResult result;
58 +
59 + match = FcFontMatch(NULL, pattern, &result);
60 + if (!match) {
61 + return 1;
62 + }
63 +
64 + if (!(frc[frclen].font = XftFontOpenPattern(xw.dpy, match))) {
65 + FcPatternDestroy(match);
66 + return 1;
67 + }
68 +
69 + frc[frclen].flags = flags;
70 + /* Believe U+0000 glyph will present in each default font */
71 + frc[frclen].unicodep = 0;
72 + frclen++;
73 +
74 + return 0;
75 +}
76 +
77 +void
78 +xloadsparefonts(void)
79 +{
80 + FcPattern *pattern;
81 + double sizeshift, fontval;
82 + int fc;
83 + char **fp;
84 +
85 + if (frclen != 0)
86 + die("can't embed spare fonts. cache isn't empty");
87 +
88 + /* Calculate count of spare fonts */
89 + fc = sizeof(font2) / sizeof(*font2);
90 + if (fc == 0)
91 + return;
92 +
93 + /* Allocate memory for cache entries. */
94 + if (frccap < 4 * fc) {
95 + frccap += 4 * fc - frccap;
96 + frc = xrealloc(frc, frccap * sizeof(Fontcache));
97 + }
98 +
99 + for (fp = font2; fp - font2 < fc; ++fp) {
100 +
101 + if (**fp == '-')
102 + pattern = XftXlfdParse(*fp, False, False);
103 + else
104 + pattern = FcNameParse((FcChar8 *)*fp);
105 +
106 + if (!pattern)
107 + die("can't open spare font %s\n", *fp);
108 +
109 + if (defaultfontsize > 0) {
110 + sizeshift = usedfontsize - defaultfontsize;
111 + if (sizeshift != 0 &&
112 + FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval) ==
113 + FcResultMatch) {
114 + fontval += sizeshift;
115 + FcPatternDel(pattern, FC_PIXEL_SIZE);
116 + FcPatternDel(pattern, FC_SIZE);
117 + FcPatternAddDouble(pattern, FC_PIXEL_SIZE, fontval);
118 + }
119 + }
120 +
121 + FcPatternAddBool(pattern, FC_SCALABLE, 1);
122 +
123 + FcConfigSubstitute(NULL, pattern, FcMatchPattern);
124 + XftDefaultSubstitute(xw.dpy, xw.scr, pattern);
125 +
126 + if (xloadsparefont(pattern, FRC_NORMAL))
127 + die("can't open spare font %s\n", *fp);
128 +
129 + FcPatternDel(pattern, FC_SLANT);
130 + FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
131 + if (xloadsparefont(pattern, FRC_ITALIC))
132 + die("can't open spare font %s\n", *fp);
133 +
134 + FcPatternDel(pattern, FC_WEIGHT);
135 + FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
136 + if (xloadsparefont(pattern, FRC_ITALICBOLD))
137 + die("can't open spare font %s\n", *fp);
138 +
139 + FcPatternDel(pattern, FC_SLANT);
140 + FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
141 + if (xloadsparefont(pattern, FRC_BOLD))
142 + die("can't open spare font %s\n", *fp);
143 +
144 + FcPatternDestroy(pattern);
145 + }
146 +}
147 +
148 void
149 xunloadfont(Font *f)
150 {
151 @@ -1131,6 +1229,9 @@ xinit(int cols, int rows)
152 usedfont = (opt_font == NULL)? font : opt_font;
153 xloadfonts(usedfont, 0);
154
155 + /* spare fonts */
156 + xloadsparefonts();
157 +
158 /* colors */
159 xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
160 xloadcols();
161 --
162 2.37.1
163