diff options
Diffstat (limited to 'util/alevt/xio.h')
-rw-r--r-- | util/alevt/xio.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/util/alevt/xio.h b/util/alevt/xio.h new file mode 100644 index 0000000..664b701 --- /dev/null +++ b/util/alevt/xio.h @@ -0,0 +1,80 @@ +#ifndef VTXIO_H +#define VTXIO_H + +#include <X11/Xlib.h> +#include "vt.h" +#include "dllist.h" + +typedef u32 lbits; +#define ALL_LINES ((1ul << H) - 1) + +/* one xio per display */ +struct xio +{ + struct dl_node node[1]; + int argc; + char **argv; + Display *dpy; /* display connection */ + int fd; /* the displays file descriptor */ + Atom xa_del_win; /* WM_DELETE_WINDOW atom */ + Atom xa_targets; /* TARGETS atom (selection) */ + Atom xa_timestamp; /* TIMESTAMP atom (selection) */ + Atom xa_text; /* TEXT atom (selection) */ + Atom xa_multiple; /* MULTIPLE atom (selection) */ + Window group_leader; /* unmapped window */ + int screen; /* DefaultScreen */ + int width, height; /* DisplayWidth/Height */ + int depth; /* DefaultDepth */ + Window root; /* DefaultRoot */ + Colormap cmap; + int color[16]; /* 8 normal, 8 dim intensity */ + Pixmap font[2]; /* normal, dbl-height */ + Pixmap icon; /* icon pixmap */ + struct dl_head windows[1]; /* all windows on this display */ +}; + +/* one vt_win per window */ +struct xio_win +{ + struct dl_node node[1]; + struct xio *xio; /* display */ + Window win; /* the drawing window */ + Time tstamp; /* timestamp of last user event */ + GC gc; /* it's graphics context */ + u8 ch[H*W]; /* the page contents */ + lbits modified, hidden, lhidden; /* states for each line */ + lbits dheight, blink, concealed; /* attributes for each line */ + int fg, bg; /* current foreground/background */ + int blink_on; /* blinking on */ + int reveal; /* reveal concealed text */ + void (*handler)(void *data, struct vt_event *ev); /* event-handler */ + void *data; /* data for the event-handler */ + int curs_x, curs_y; /* cursor position */ + u8 title[32]; /* the user title */ + // selection support + int sel_start_x, sel_start_y; + Time sel_start_t; + Time sel_set_t; /* time we got selection owner */ + int sel_x1, sel_y1, sel_x2, sel_y2; /* selected area */ + Pixmap sel_pixmap; /* for pixmap-selection requests */ +}; + +struct xio *xio_open_dpy(char *dpy, int argc, char **argv); +struct xio_win *xio_open_win(struct xio *xio, char *geom); +void xio_close_win(struct xio_win *xw, int dpy_too); +void xio_close_dpy(struct xio *xio); +void xio_set_handler(struct xio_win *xw, void *handler, void *data); +void xio_clear_win(struct xio_win *xw); +void xio_put_line(struct xio_win *xw, int line, u8 *data); +void xio_put_str(struct xio_win *xw, int line, u8 *c_str); +int xio_get_line(struct xio_win *xw, int line, u8 *data); +int xio_set_concealed(struct xio_win *xw, int on); +void xio_update_win(struct xio_win *xw); +void xio_fd_handler(int fd, void *handler, void *data); +void xio_cancel_selection(struct xio_win *xw); +void xio_query_selection(struct xio_win *xw); +void xio_set_selection(struct xio_win *xw, int x1, int y1, int x2, int y2); +void xio_set_cursor(struct xio_win *xw, int x, int y); +void xio_event_loop(void); +void xio_title(struct xio_win *xw, char *title); +#endif |