Move font/fontspec variables into x.c and XWindow - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a09138afa57adb4b76dba8ca72dc7ee2642a5c8d
 (DIR) parent 626b0ae40c71b6c1e02ece79bf033432647381a6
 (HTM) 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:
         M st.c                                |      11 -----------
         M st.h                                |       8 ++------
         M x.c                                 |      18 +++++++++++++-----
       
       3 files changed, 15 insertions(+), 22 deletions(-)
       ---
 (DIR) 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));
 (DIR) 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;
 (DIR) 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;