# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit a09138afa57adb4b76dba8ca72dc7ee2642a5c8d
    parent 626b0ae40c71b6c1e02ece79bf033432647381a6
    Author: Devin J. Pohly <djpohly@gmail.com>
    Date:   Tue, 10 Oct 2017 12:17:25 -0500

    Move font/fontspec variables into x.c and XWindow

    Signed-off-by: Devin J. Pohly <djpohly@gmail.com>

    Diffstat:
    Mst.c | 11-----------
    Mst.h | 8++------
    Mx.c | 18+++++++++++++-----

    3 files changed, 15 insertions(+), 22 deletions(-)
    diff --git a/st.c b/st.c
    @@ -28,9 +28,6 @@
     #include <X11/cursorfont.h>
     #include <X11/Xft/Xft.h>

    -#define Glyph Glyph_
    -#define Font Font_
    -
     #include "st.h"
     #include "win.h"

    @@ -196,7 +193,6 @@ static size_t utf8validate(Rune *, size_t);
     static char *base64dec(const char *);

     static ssize_t xwrite(int, const char *, size_t);
    -static void *xrealloc(void *, size_t);

     /* Globals */
     TermWindow win;
    @@ -218,10 +214,6 @@ static CSIEscape csiescseq;
     static STREscape strescseq;
     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 utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
     static Rune utfmin[UTF_SIZ + 1] = {       0,    0,  0x80,  0x800,  0x10000};
    @@ -2516,9 +2508,6 @@ tresize(int col, int row)
     		free(term.alt[i]);
     	}

    -	/* resize to new width */
    -	term.specbuf = xrealloc(term.specbuf, col * sizeof(GlyphFontSpec));
    -
     	/* resize to new height */
     	term.line = xrealloc(term.line, row * sizeof(Line));
     	term.alt  = xrealloc(term.alt,  row * sizeof(Line));
    diff --git a/st.h b/st.h
    @@ -92,6 +92,7 @@ typedef unsigned short ushort;

     typedef uint_least32_t Rune;

    +#define Glyph Glyph_
     typedef struct {
     	Rune u;           /* character code */
     	ushort mode;      /* attribute flags */
    @@ -100,7 +101,6 @@ typedef struct {
     } Glyph;

     typedef Glyph *Line;
    -typedef XftGlyphFontSpec GlyphFontSpec;

     typedef struct {
     	Glyph attr; /* current char attributes */
    @@ -116,7 +116,6 @@ typedef struct {
     	Line *line;   /* screen */
     	Line *alt;    /* alternate screen */
     	int *dirty;  /* dirtyness of lines */
    -	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
     	TCursor c;    /* cursor */
     	int top;      /* top    scroll limit */
     	int bot;      /* bottom scroll limit */
    @@ -213,6 +212,7 @@ size_t utf8decode(char *, Rune *, size_t);
     size_t utf8encode(Rune, char *);

     void *xmalloc(size_t);
    +void *xrealloc(void *, size_t);
     char *xstrdup(char *);

     /* Globals */
    @@ -231,10 +231,6 @@ extern char *opt_name;
     extern char *opt_title;
     extern int oldbutton;

    -extern char *usedfont;
    -extern double usedfontsize;
    -extern double defaultfontsize;
    -
     /* config.h globals */
     extern char font[];
     extern int borderpx;
    diff --git a/x.c b/x.c
    @@ -17,10 +17,6 @@

     static char *argv0;
     #include "arg.h"
    -
    -#define Glyph Glyph_
    -#define Font Font_
    -
     #include "st.h"
     #include "win.h"

    @@ -35,6 +31,7 @@ static char *argv0;

     typedef XftDraw *Draw;
     typedef XftColor Color;
    +typedef XftGlyphFontSpec GlyphFontSpec;

     /* Purely graphic info */
     typedef struct {
    @@ -42,6 +39,7 @@ typedef struct {
     	Colormap cmap;
     	Window win;
     	Drawable buf;
    +	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
     	Atom xembed, wmdeletewin, netwmname, netwmpid;
     	XIM xim;
     	XIC xic;
    @@ -59,6 +57,7 @@ typedef struct {
     } XSelection;

     /* Font structure */
    +#define Font Font_
     typedef struct {
     	int height;
     	int width;
    @@ -166,6 +165,9 @@ typedef struct {
     /* Fontcache is an array now. A new font will be appended to the array. */
     static Fontcache frc[16];
     static int frclen = 0;
    +static char *usedfont = NULL;
    +static double usedfontsize = 0;
    +static double defaultfontsize = 0;

     void
     zoom(const Arg *arg)
    @@ -605,6 +607,9 @@ xresize(int col, int row)
     			DefaultDepth(xw.dpy, xw.scr));
     	XftDrawChange(xw.draw, xw.buf);
     	xclear(0, 0, win.w, win.h);
    +
    +	/* resize to new width */
    +	xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec));
     }

     ushort
    @@ -965,6 +970,9 @@ xinit(void)
     	XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
     	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 */
     	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;

    -		specs = term.specbuf;
    +		specs = xw.specbuf;
     		numspecs = xmakeglyphfontspecs(specs, &term.line[y][x1], x2 - x1, x1, y);

     		i = ox = 0;