- xw.h = xw.fh;
- xw.w = xw.fw;
- } else {
- /* window - default size */
- xw.h = 2*BORDER + term.row * xw.ch;
- xw.w = 2*BORDER + term.col * xw.cw;
- xw.fx = 0;
- xw.fy = 0;
- }
-
- attrs.background_pixel = dc.xft_col[DefaultBG].pixel;
- attrs.border_pixel = dc.xft_col[DefaultBG].pixel;
- attrs.bit_gravity = NorthWestGravity;
- attrs.event_mask = FocusChangeMask | KeyPressMask
- | ExposureMask | VisibilityChangeMask | StructureNotifyMask
- | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
- attrs.colormap = xw.cmap;
-
- parent = opt_embed ? strtol(opt_embed, NULL, 0) : XRootWindow(xw.dpy, xw.scr);
- xw.win = XCreateWindow(xw.dpy, parent, xw.fx, xw.fy,
- xw.w, xw.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
- xw.vis,
- CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
- | CWColormap,
- &attrs);
-
- /* double buffering */
- if(!XdbeQueryExtension(xw.dpy, &major, &minor))
- die("Xdbe extension is not present\n");
- xw.buf = XdbeAllocateBackBufferName(xw.dpy, xw.win, XdbeCopied);
-
- /* Xft rendering context */
- xw.xft_draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
-
- /* input methods */
- xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL);
- xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing
- | XIMStatusNothing, XNClientWindow, xw.win,
- XNFocusWindow, xw.win, NULL);
- /* gc */
- dc.gc = XCreateGC(xw.dpy, xw.win, 0, NULL);
-
- /* white cursor, black outline */
- cursor = XCreateFontCursor(xw.dpy, XC_xterm);
- XDefineCursor(xw.dpy, xw.win, cursor);
- XRecolorCursor(xw.dpy, cursor,
- &(XColor){.red = 0xffff, .green = 0xffff, .blue = 0xffff},
- &(XColor){.red = 0x0000, .green = 0x0000, .blue = 0x0000});
-
- xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
- xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False);
- XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1);
-
- xresettitle();
- XMapWindow(xw.dpy, xw.win);
- xhints();
- XSync(xw.dpy, 0);
-}
-
-void
-xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
- int winx = BORDER + x * xw.cw, winy = BORDER + y * xw.ch,
- width = charlen * xw.cw;
- Font *font = &dc.font;
- XGlyphInfo extents;
- XftColor *fg = &dc.xft_col[base.fg], *bg = &dc.xft_col[base.bg],
- *temp, revfg, revbg;
- XRenderColor colfg, colbg;
-
- if(base.mode & ATTR_REVERSE)
- temp = fg, fg = bg, bg = temp;
-
- if(base.mode & ATTR_BOLD) {
- if(BETWEEN(base.fg, 0, 7)) {
- /* basic system colors */
- fg = &dc.xft_col[base.fg + 8];
- } else if(BETWEEN(base.fg, 16, 195)) {
- /* 256 colors */
- fg = &dc.xft_col[base.fg + 36];
- } else if(BETWEEN(base.fg, 232, 251)) {
- /* greyscale */
- fg = &dc.xft_col[base.fg + 4];