libg.h - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       libg.h (6115B)
       ---
            1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
            2 #ifndef _LIBG_H
            3 #define _LIBG_H
            4 
            5 /*
            6  *  Like Plan9's libg.h, but suitable for inclusion on non-Plan9 machines
            7  */
            8 
            9 #include <X11/Xft/Xft.h>
           10 
           11 enum{ EMAXMSG = 128+8192 }; /* max event size */
           12 
           13 /*
           14  * Cursors
           15  */
           16 
           17 enum{
           18     DefaultCursor,
           19     ArrowCursor,
           20     BullseyeCursor,
           21     SweepCursor,
           22     DeadCursor,
           23     LockCursor
           24 };
           25 
           26 /*
           27  * Types
           28  */
           29 
           30 typedef struct  Bitmap      Bitmap;
           31 typedef struct  Point       Point;
           32 typedef struct  Rectangle   Rectangle;
           33 typedef struct  Keystroke   Keystroke;
           34 typedef struct  Mouse       Mouse;
           35 typedef struct  Menu        Menu;
           36 typedef struct  Event       Event;
           37 typedef struct  RGB     RGB;
           38 
           39 struct  Point
           40 {
           41     int x;
           42     int y;
           43 };
           44 
           45 struct Rectangle
           46 {
           47     Point min;
           48     Point max;
           49 };
           50 
           51 struct  Bitmap
           52 {
           53     Rectangle r;        /* rectangle in data area, local coords */
           54     Rectangle clipr;    /* clipping region */
           55     int ldepth;
           56     int id;     /* as known by the X server */
           57     Bitmap  *cache;     /* zero; distinguishes bitmap from layer */
           58     XftDraw *fd; /* font drawable */
           59     int flag;       /* flag used by X implementation of libg */
           60 };
           61 
           62 struct  Mouse
           63 {
           64     int     buttons; /* bit array: LMR=124 */
           65     Point       xy;
           66     uint64_t   msec;
           67     char *a;
           68 };
           69 
           70 struct  Keystroke
           71 {
           72     int k;
           73     int c;
           74     int t;
           75     Point p;
           76     const char *a;
           77 };
           78 
           79 struct Menu
           80 {
           81     char    **item;
           82     char    *(*gen)(int);
           83     int lasthit;
           84 };
           85 
           86 struct  Event
           87 {
           88     Keystroke   keystroke;
           89     Mouse       mouse;
           90     int     n;      /* number of characters in mesage */
           91     unsigned char   data[EMAXMSG];  /* message from an arbitrary file descriptor */
           92 };
           93 
           94 struct RGB
           95 {
           96     uint64_t   red;
           97     uint64_t   green;
           98     uint64_t   blue;
           99 };
          100 
          101 enum{
          102     Knone,      /* invalid command type */
          103     Kdefault,   /* perform default command action */
          104     Kraw,       /* insert raw character code, subject to transformation (e.g. tab expansion) */
          105     Kcommand,   /* execute command (see below) */
          106     Kend        /* mark the end of a command list */
          107 };
          108 
          109 enum{
          110     Cnone,      /* no command */
          111     Cdefault,   /* default action */
          112     Csysmax
          113 };
          114 
          115 enum{
          116     Tcurrent,   /* command is sent to focused layer */
          117     Tmouse      /* command is sent to layer containing the mouse */
          118 };
          119 
          120 /*
          121  * Codes for bitblt etc.
          122  *
          123  *         D
          124  *       0   1
          125  *         ---------
          126  *   0 | 1 | 2 |
          127  *     S   |---|---|
          128  *   1 | 4 | 8 |
          129  *         ---------
          130  *
          131  *  Usually used as D|S; DorS is so tracebacks are readable.
          132  */
          133 typedef
          134 enum    Fcode
          135 {
          136     Zero        = 0x0,
          137     DnorS       = 0x1,
          138     DandnotS    = 0x2,
          139     notS        = 0x3,
          140     notDandS    = 0x4,
          141     notD        = 0x5,
          142     DxorS       = 0x6,
          143     DnandS      = 0x7,
          144     DandS       = 0x8,
          145     DxnorS      = 0x9,
          146     D       = 0xA,
          147     DornotS     = 0xB,
          148     S       = 0xC,
          149     notDorS     = 0xD,
          150     DorS        = 0xE,
          151     F       = 0xF
          152 } Fcode;
          153 
          154 /*
          155  * Miscellany
          156  */
          157 
          158 typedef void     (*Errfunc)(char *);
          159 
          160 extern void addlatin(char, char, int16_t);
          161 extern Point     add(Point, Point);
          162 extern Point     sub(Point, Point);
          163 extern Point     mul(Point, int);
          164 extern Point     divpt(Point, int);
          165 extern Rectangle rsubp(Rectangle, Point);
          166 extern Rectangle raddp(Rectangle, Point);
          167 extern Rectangle inset(Rectangle, int);
          168 extern Rectangle rmul(Rectangle, int);
          169 extern Rectangle rdiv(Rectangle, int);
          170 extern Rectangle rshift(Rectangle, int);
          171 extern Rectangle rcanon(Rectangle);
          172 extern Bitmap*   balloc(Rectangle, int);
          173 extern void  bfree(Bitmap*);
          174 extern int   rectclip(Rectangle*, Rectangle);
          175 extern void  xtbinit(Errfunc, char*, int*, char**, char**);
          176 extern void  bclose(void);
          177 extern void  berror(char*);
          178 extern void  bitblt2(Bitmap*, Point, Bitmap*, Rectangle, Fcode, uint64_t, uint64_t);
          179 extern void  bitblt(Bitmap*, Point, Bitmap*, Rectangle, Fcode);
          180 
          181 extern Point     string(Bitmap*, Point, XftFont*, char*, Fcode);
          182 extern int64_t     strwidth(XftFont*, char*);
          183 extern int64_t  charwidth(XftFont*, wchar_t);
          184 extern void  texture(Bitmap*, Rectangle, Bitmap*, Fcode);
          185 extern void  wrbitmap(Bitmap*, int, int, unsigned char*);
          186 extern int   ptinrect(Point, Rectangle);
          187 extern int   rectXrect(Rectangle, Rectangle);
          188 extern int   eqpt(Point, Point);
          189 extern int   eqrect(Rectangle, Rectangle);
          190 extern void  border(Bitmap*, Rectangle, int, Fcode, uint64_t);
          191 extern void  cursorswitch(unsigned int);
          192 extern void  cursorset(Point);
          193 extern Rectangle bscreenrect(Rectangle*);
          194 extern void  bflush(void);
          195 
          196 extern int   clipr(Bitmap*, Rectangle);
          197 extern int   scrpix(int*,int*);
          198 extern uint64_t getbg(void);
          199 
          200 extern void  einit(uint64_t);
          201 extern uint64_t estart(uint64_t, int, size_t, bool);
          202 
          203 extern uint64_t event(Event*);
          204 extern uint64_t eread(uint64_t, Event*);
          205 extern Mouse     emouse(void);
          206 extern Keystroke     ekbd(void);
          207 extern void  pushkbd(int c);
          208 extern int   ecanread(uint64_t);
          209 extern int   ecanmouse(void);
          210 extern int   ecankbd(void);
          211 extern void  ereshaped(Rectangle);  /* supplied by user */
          212 
          213 extern int   menuhit(int, Mouse*, Menu*);
          214 extern Rectangle getrect(int, Mouse*);
          215 
          216 extern void  rdcolmap(Bitmap*, RGB*);
          217 extern void  wrcolmap(Bitmap*, RGB*);
          218 extern void raisewindow(void);
          219 
          220 /* Extra functions supplied by libXg */
          221 extern int  snarfswap(char*, int, char**);
          222 
          223 enum{
          224     Emouse      = 1,
          225     Ekeyboard   = 2
          226 };
          227 
          228 extern Point     Pt(int, int);
          229 extern Rectangle Rect(int, int, int, int);
          230 extern Rectangle Rpt(Point, Point);
          231 
          232 
          233 #define Dx(r)   ((r).max.x-(r).min.x)
          234 #define Dy(r)   ((r).max.y-(r).min.y)
          235 
          236 
          237 extern  Bitmap  screen;
          238 extern  XftFont *font;
          239 extern  XftColor fontcolor;
          240 extern  XftColor bgcolor;
          241 
          242 #define BGSHORT(p)      (((p)[0]<<0) | ((p)[1]<<8))
          243 #define BGLONG(p)       ((BGSHORT(p)<<0) | (BGSHORT(p+2)<<16))
          244 #define BPSHORT(p, v)       ((p)[0]=(v), (p)[1]=((v)>>8))
          245 #define BPLONG(p, v)        (BPSHORT(p, (v)), BPSHORT(p+2, (v)>>16))
          246 
          247 extern int installbinding(int, KeySym, int, int, const char *);
          248 extern int installchord(int, int, int, int, const char *);
          249 extern int removebinding(int, KeySym);
          250 extern int removechord(int, int);
          251 
          252 extern char foregroundspec[1024];
          253 extern char backgroundspec[1024];
          254 extern char borderspec[1024];
          255 extern char fontspec[1024];
          256 #endif