From: Michael D. Lowis Date: Wed, 11 Apr 2018 20:18:38 +0000 (-0400) Subject: refactored x11 and win code X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=d33fda33e7f66463886b5c6b36e1c68fade261fa;p=projs%2Ftide.git refactored x11 and win code --- diff --git a/inc/win.h b/inc/win.h index 7651154..3d40fc4 100644 --- a/inc/win.h +++ b/inc/win.h @@ -1,3 +1,115 @@ +typedef void* XFont; + +typedef struct { + uint32_t attr; /* attributes applied to this cell */ + uint32_t rune; /* rune value for the cell */ +} XGlyph; + +typedef struct { + void* font; + uint32_t glyph; + short x; + short y; +} XGlyphSpec; + +/* key definitions */ +enum Keys { + /* Define some runes in the private use area of unicode to represent + * special keys */ + KEY_F1 = (0xE000+0), + KEY_F2 = (0xE000+1), + KEY_F3 = (0xE000+2), + KEY_F4 = (0xE000+3), + KEY_F5 = (0xE000+4), + KEY_F6 = (0xE000+5), + KEY_F7 = (0xE000+6), + KEY_F8 = (0xE000+7), + KEY_F9 = (0xE000+8), + KEY_F10 = (0xE000+9), + KEY_F11 = (0xE000+10), + KEY_F12 = (0xE000+11), + KEY_INSERT = (0xE000+12), + KEY_DELETE = (0xE000+13), + KEY_HOME = (0xE000+14), + KEY_END = (0xE000+15), + KEY_PGUP = (0xE000+16), + KEY_PGDN = (0xE000+17), + KEY_UP = (0xE000+18), + KEY_DOWN = (0xE000+19), + KEY_RIGHT = (0xE000+20), + KEY_LEFT = (0xE000+21), + + /* ASCII Control Characters */ + KEY_CTRL_TILDE = 0x00, + KEY_CTRL_2 = 0x00, + KEY_CTRL_A = 0x01, + KEY_CTRL_B = 0x02, + KEY_CTRL_C = 0x03, + KEY_CTRL_D = 0x04, + KEY_CTRL_E = 0x05, + KEY_CTRL_F = 0x06, + KEY_CTRL_G = 0x07, + KEY_BACKSPACE = 0x08, + KEY_CTRL_H = 0x08, + KEY_TAB = 0x09, + KEY_CTRL_I = 0x09, + KEY_CTRL_J = 0x0A, + KEY_CTRL_K = 0x0B, + KEY_CTRL_L = 0x0C, + KEY_ENTER = 0x0D, + KEY_CTRL_M = 0x0D, + KEY_CTRL_N = 0x0E, + KEY_CTRL_O = 0x0F, + KEY_CTRL_P = 0x10, + KEY_CTRL_Q = 0x11, + KEY_CTRL_R = 0x12, + KEY_CTRL_S = 0x13, + KEY_CTRL_T = 0x14, + KEY_CTRL_U = 0x15, + KEY_CTRL_V = 0x16, + KEY_CTRL_W = 0x17, + KEY_CTRL_X = 0x18, + KEY_CTRL_Y = 0x19, + KEY_CTRL_Z = 0x1A, + KEY_ESCAPE = 0x1B, + KEY_CTRL_LSQ_BRACKET = 0x1B, + KEY_CTRL_3 = 0x1B, + KEY_CTRL_4 = 0x1C, + KEY_CTRL_BACKSLASH = 0x1C, + KEY_CTRL_5 = 0x1D, + KEY_CTRL_RSQ_BRACKET = 0x1D, + KEY_CTRL_6 = 0x1E, + KEY_CTRL_7 = 0x1F, + KEY_CTRL_SLASH = 0x1F, + KEY_CTRL_UNDERSCORE = 0x1F, +}; + +/* Key modifier masks */ +enum { + ModNone = 0, + ModShift = (1 << 0), + ModCapsLock = (1 << 1), + ModCtrl = (1 << 2), + ModAlt = (1 << 3), + ModNumLock = (1 << 4), + ModScrollLock = (1 << 5), + ModWindows = (1 << 6), + ModOneOrMore = (ModCtrl|ModAlt), + ModAny = -1 +}; + +/* Selection identifiers */ +enum { + PRIMARY = 0, + CLIPBOARD = 1 +}; + +void x11_init(void); +bool x11_keymodsset(int mask); +void x11_window(char* name); +bool x11_sel_get(int selid, void(*cbfn)(char*)); +bool x11_sel_set(int selid, char* str); + enum { MouseLeft = 1, MouseMiddle = 2, @@ -30,10 +142,9 @@ void win_loop(void); void win_quit(void); View* win_view(WinRegion id); Buf* win_buf(WinRegion id); -bool win_btnpressed(int btn); +//bool win_btnpressed(int btn); WinRegion win_getregion(void); void win_setregion(WinRegion id); -void win_setscroll(double offset, double visible); /* move these to x11.c when possible */ extern int SearchDir; diff --git a/inc/x11.h b/inc/x11.h deleted file mode 100644 index 979c05b..0000000 --- a/inc/x11.h +++ /dev/null @@ -1,119 +0,0 @@ -typedef void* XFont; - -typedef struct { - uint32_t attr; /* attributes applied to this cell */ - uint32_t rune; /* rune value for the cell */ -} XGlyph; - -typedef struct { - void* font; - uint32_t glyph; - short x; - short y; -} XGlyphSpec; - -/* key definitions */ -enum Keys { - /* Define some runes in the private use area of unicode to represent - * special keys */ - KEY_F1 = (0xE000+0), - KEY_F2 = (0xE000+1), - KEY_F3 = (0xE000+2), - KEY_F4 = (0xE000+3), - KEY_F5 = (0xE000+4), - KEY_F6 = (0xE000+5), - KEY_F7 = (0xE000+6), - KEY_F8 = (0xE000+7), - KEY_F9 = (0xE000+8), - KEY_F10 = (0xE000+9), - KEY_F11 = (0xE000+10), - KEY_F12 = (0xE000+11), - KEY_INSERT = (0xE000+12), - KEY_DELETE = (0xE000+13), - KEY_HOME = (0xE000+14), - KEY_END = (0xE000+15), - KEY_PGUP = (0xE000+16), - KEY_PGDN = (0xE000+17), - KEY_UP = (0xE000+18), - KEY_DOWN = (0xE000+19), - KEY_RIGHT = (0xE000+20), - KEY_LEFT = (0xE000+21), - - /* ASCII Control Characters */ - KEY_CTRL_TILDE = 0x00, - KEY_CTRL_2 = 0x00, - KEY_CTRL_A = 0x01, - KEY_CTRL_B = 0x02, - KEY_CTRL_C = 0x03, - KEY_CTRL_D = 0x04, - KEY_CTRL_E = 0x05, - KEY_CTRL_F = 0x06, - KEY_CTRL_G = 0x07, - KEY_BACKSPACE = 0x08, - KEY_CTRL_H = 0x08, - KEY_TAB = 0x09, - KEY_CTRL_I = 0x09, - KEY_CTRL_J = 0x0A, - KEY_CTRL_K = 0x0B, - KEY_CTRL_L = 0x0C, - KEY_ENTER = 0x0D, - KEY_CTRL_M = 0x0D, - KEY_CTRL_N = 0x0E, - KEY_CTRL_O = 0x0F, - KEY_CTRL_P = 0x10, - KEY_CTRL_Q = 0x11, - KEY_CTRL_R = 0x12, - KEY_CTRL_S = 0x13, - KEY_CTRL_T = 0x14, - KEY_CTRL_U = 0x15, - KEY_CTRL_V = 0x16, - KEY_CTRL_W = 0x17, - KEY_CTRL_X = 0x18, - KEY_CTRL_Y = 0x19, - KEY_CTRL_Z = 0x1A, - KEY_ESCAPE = 0x1B, - KEY_CTRL_LSQ_BRACKET = 0x1B, - KEY_CTRL_3 = 0x1B, - KEY_CTRL_4 = 0x1C, - KEY_CTRL_BACKSLASH = 0x1C, - KEY_CTRL_5 = 0x1D, - KEY_CTRL_RSQ_BRACKET = 0x1D, - KEY_CTRL_6 = 0x1E, - KEY_CTRL_7 = 0x1F, - KEY_CTRL_SLASH = 0x1F, - KEY_CTRL_UNDERSCORE = 0x1F, -}; - -/* Key modifier masks */ -enum { - ModNone = 0, - ModShift = (1 << 0), - ModCapsLock = (1 << 1), - ModCtrl = (1 << 2), - ModAlt = (1 << 3), - ModNumLock = (1 << 4), - ModScrollLock = (1 << 5), - ModWindows = (1 << 6), - ModOneOrMore = (ModCtrl|ModAlt), - ModAny = -1 -}; - -/* Selection identifiers */ -enum { - PRIMARY = 0, - CLIPBOARD = 1 -}; - -void x11_init(void); -bool x11_keymodsset(int mask); -void x11_window(char* name); -XFont x11_font_load(char* name); -size_t x11_font_height(XFont fnt); -size_t x11_font_width(XFont fnt); -size_t x11_font_descent(XFont fnt); -void x11_font_getglyph(XFont font, XGlyphSpec* spec, uint32_t rune); -size_t x11_font_getglyphs(XGlyphSpec* specs, const XGlyph* glyphs, int len, XFont font, int x, int y); -void x11_draw_rect(int color, int x, int y, int width, int height); -void x11_draw_glyphs(int fg, int bg, XGlyphSpec* specs, size_t nspecs, bool eol); -bool x11_sel_get(int selid, void(*cbfn)(char*)); -bool x11_sel_set(int selid, char* str); diff --git a/lib/x11.c b/lib/x11.c index e640e0e..e363880 100644 --- a/lib/x11.c +++ b/lib/x11.c @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -21,6 +20,15 @@ /******************************************************************************/ static void die(const char* msg); +static XFont x11_font_load(char* name); +static size_t x11_font_height(XFont fnt); +static size_t x11_font_width(XFont fnt); +static size_t x11_font_descent(XFont fnt); +static void x11_font_getglyph(XFont font, XGlyphSpec* spec, uint32_t rune); +static size_t x11_font_getglyphs(XGlyphSpec* specs, const XGlyph* glyphs, int len, XFont font, int x, int y); +static void x11_draw_rect(int color, int x, int y, int width, int height); +static void x11_draw_glyphs(int fg, int bg, XGlyphSpec* specs, size_t nspecs, bool eol); + static uint32_t special_keys(uint32_t key); static uint32_t getkey(XEvent* e); static void mouse_click(int btn, bool pressed, int x, int y); diff --git a/tide.c b/tide.c index 87f04ac..96da7d8 100644 --- a/tide.c +++ b/tide.c @@ -1,6 +1,5 @@ #define _XOPEN_SOURCE 700 #include -#include #include #include #include