Move font/fontspec variables into x.c and XWindow

Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
This commit is contained in:
Devin J. Pohly 2017-10-10 12:17:25 -05:00
parent 626b0ae40c
commit a09138afa5
3 changed files with 15 additions and 22 deletions

11
st.c
View File

@ -28,9 +28,6 @@
#include <X11/cursorfont.h> #include <X11/cursorfont.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
#define Glyph Glyph_
#define Font Font_
#include "st.h" #include "st.h"
#include "win.h" #include "win.h"
@ -196,7 +193,6 @@ static size_t utf8validate(Rune *, size_t);
static char *base64dec(const char *); static char *base64dec(const char *);
static ssize_t xwrite(int, const char *, size_t); static ssize_t xwrite(int, const char *, size_t);
static void *xrealloc(void *, size_t);
/* Globals */ /* Globals */
TermWindow win; TermWindow win;
@ -218,10 +214,6 @@ static CSIEscape csiescseq;
static STREscape strescseq; static STREscape strescseq;
static int iofd = 1; static int iofd = 1;
char *usedfont = NULL;
double usedfontsize = 0;
double defaultfontsize = 0;
static uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0}; static uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
static Rune utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000}; static Rune utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
@ -2516,9 +2508,6 @@ tresize(int col, int row)
free(term.alt[i]); free(term.alt[i]);
} }
/* resize to new width */
term.specbuf = xrealloc(term.specbuf, col * sizeof(GlyphFontSpec));
/* resize to new height */ /* resize to new height */
term.line = xrealloc(term.line, row * sizeof(Line)); term.line = xrealloc(term.line, row * sizeof(Line));
term.alt = xrealloc(term.alt, row * sizeof(Line)); term.alt = xrealloc(term.alt, row * sizeof(Line));

8
st.h
View File

@ -92,6 +92,7 @@ typedef unsigned short ushort;
typedef uint_least32_t Rune; typedef uint_least32_t Rune;
#define Glyph Glyph_
typedef struct { typedef struct {
Rune u; /* character code */ Rune u; /* character code */
ushort mode; /* attribute flags */ ushort mode; /* attribute flags */
@ -100,7 +101,6 @@ typedef struct {
} Glyph; } Glyph;
typedef Glyph *Line; typedef Glyph *Line;
typedef XftGlyphFontSpec GlyphFontSpec;
typedef struct { typedef struct {
Glyph attr; /* current char attributes */ Glyph attr; /* current char attributes */
@ -116,7 +116,6 @@ typedef struct {
Line *line; /* screen */ Line *line; /* screen */
Line *alt; /* alternate screen */ Line *alt; /* alternate screen */
int *dirty; /* dirtyness of lines */ int *dirty; /* dirtyness of lines */
GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
TCursor c; /* cursor */ TCursor c; /* cursor */
int top; /* top scroll limit */ int top; /* top scroll limit */
int bot; /* bottom scroll limit */ int bot; /* bottom scroll limit */
@ -213,6 +212,7 @@ size_t utf8decode(char *, Rune *, size_t);
size_t utf8encode(Rune, char *); size_t utf8encode(Rune, char *);
void *xmalloc(size_t); void *xmalloc(size_t);
void *xrealloc(void *, size_t);
char *xstrdup(char *); char *xstrdup(char *);
/* Globals */ /* Globals */
@ -231,10 +231,6 @@ extern char *opt_name;
extern char *opt_title; extern char *opt_title;
extern int oldbutton; extern int oldbutton;
extern char *usedfont;
extern double usedfontsize;
extern double defaultfontsize;
/* config.h globals */ /* config.h globals */
extern char font[]; extern char font[];
extern int borderpx; extern int borderpx;

18
x.c
View File

@ -17,10 +17,6 @@
static char *argv0; static char *argv0;
#include "arg.h" #include "arg.h"
#define Glyph Glyph_
#define Font Font_
#include "st.h" #include "st.h"
#include "win.h" #include "win.h"
@ -35,6 +31,7 @@ static char *argv0;
typedef XftDraw *Draw; typedef XftDraw *Draw;
typedef XftColor Color; typedef XftColor Color;
typedef XftGlyphFontSpec GlyphFontSpec;
/* Purely graphic info */ /* Purely graphic info */
typedef struct { typedef struct {
@ -42,6 +39,7 @@ typedef struct {
Colormap cmap; Colormap cmap;
Window win; Window win;
Drawable buf; Drawable buf;
GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
Atom xembed, wmdeletewin, netwmname, netwmpid; Atom xembed, wmdeletewin, netwmname, netwmpid;
XIM xim; XIM xim;
XIC xic; XIC xic;
@ -59,6 +57,7 @@ typedef struct {
} XSelection; } XSelection;
/* Font structure */ /* Font structure */
#define Font Font_
typedef struct { typedef struct {
int height; int height;
int width; int width;
@ -166,6 +165,9 @@ typedef struct {
/* Fontcache is an array now. A new font will be appended to the array. */ /* Fontcache is an array now. A new font will be appended to the array. */
static Fontcache frc[16]; static Fontcache frc[16];
static int frclen = 0; static int frclen = 0;
static char *usedfont = NULL;
static double usedfontsize = 0;
static double defaultfontsize = 0;
void void
zoom(const Arg *arg) zoom(const Arg *arg)
@ -605,6 +607,9 @@ xresize(int col, int row)
DefaultDepth(xw.dpy, xw.scr)); DefaultDepth(xw.dpy, xw.scr));
XftDrawChange(xw.draw, xw.buf); XftDrawChange(xw.draw, xw.buf);
xclear(0, 0, win.w, win.h); xclear(0, 0, win.w, win.h);
/* resize to new width */
xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec));
} }
ushort ushort
@ -965,6 +970,9 @@ xinit(void)
XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h);
/* font spec buffer */
xw.specbuf = xmalloc(term.col * sizeof(GlyphFontSpec));
/* Xft rendering context */ /* Xft rendering context */
xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
@ -1456,7 +1464,7 @@ drawregion(int x1, int y1, int x2, int y2)
term.dirty[y] = 0; term.dirty[y] = 0;
specs = term.specbuf; specs = xw.specbuf;
numspecs = xmakeglyphfontspecs(specs, &term.line[y][x1], x2 - x1, x1, y); numspecs = xmakeglyphfontspecs(specs, &term.line[y][x1], x2 - x1, x1, y);
i = ox = 0; i = ox = 0;