ltkx

GUI toolkit for X11 (old)
git clone git://lumidify.org/ltkx.git (fast, but not encrypted)
git clone https://lumidify.org/ltkx.git (encrypted, but very slow)
git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltkx.git (over tor)
Log | Files | Refs | README | LICENSE

ltk.h (4635B)


      1 /*
      2  * This file is part of the Lumidify ToolKit (LTK)
      3  * Copyright (c) 2016, 2017, 2018 lumidify <nobody@lumidify.org>
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a copy
      6  * of this software and associated documentation files (the "Software"), to deal
      7  * in the Software without restriction, including without limitation the rights
      8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      9  * copies of the Software, and to permit persons to whom the Software is
     10  * furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice shall be included in all
     13  * copies or substantial portions of the Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     21  * SOFTWARE.
     22  */
     23 
     24 #ifndef _LTK_H_
     25 #define _LTK_H_
     26 
     27 /* Requires the following includes: <X11/Xlib.h>, <X11/Xutil.h> */
     28 
     29 typedef struct {
     30 	int x;
     31 	int y;
     32 	int w;
     33 	int h;
     34 } LtkRect;
     35 
     36 typedef enum {
     37 	LTK_STICKY_LEFT = 1 << 0,
     38 	LTK_STICKY_RIGHT = 1 << 1,
     39 	LTK_STICKY_TOP = 1 << 2,
     40 	LTK_STICKY_BOTTOM = 1 << 3
     41 } LtkStickyMask;
     42 
     43 typedef enum {
     44 	LTK_NORMAL = 0,
     45 	LTK_HOVER = 1,
     46 	LTK_PRESSED = 2,
     47 	LTK_ACTIVE = 3,
     48 	LTK_HOVERACTIVE = 4,
     49 	LTK_DISABLED = 5
     50 } LtkWidgetState;
     51 
     52 typedef struct LtkWindow LtkWindow;
     53 
     54 /* FIXME: change row, column, etc. to void* struct so
     55    other layout systems can be implemented */
     56 typedef struct LtkWidget {
     57 	LtkWindow *window;
     58 	struct LtkWidget *active_widget;
     59 	struct LtkWidget *hover_widget;
     60 	struct LtkWidget *parent;
     61 
     62 	void (*key_press) (void *, XEvent event);
     63 	void (*key_release) (void *, XEvent event);
     64 	void (*mouse_press) (void *, XEvent event);
     65 	void (*mouse_release) (void *, XEvent event);
     66 	void (*motion_notify) (void *, XEvent event);
     67 	void (*mouse_leave) (void *, XEvent event);
     68 	void (*mouse_enter) (void *, XEvent event);
     69 
     70 	void (*resize) (void *, int, int);
     71 	void (*draw) (void *);
     72 	void (*destroy) (void *);
     73 
     74 	LtkRect collision_rect; /* rect for collision with mouse */
     75 	LtkRect rect; /* rect in grid - this is only different when the widget is floating */
     76 	unsigned int row;
     77 	unsigned int column;
     78 	unsigned int row_span;
     79 	unsigned int column_span;
     80 	unsigned int needs_redraw;
     81 	LtkWidgetState state;
     82 	unsigned short sticky;
     83 } LtkWidget;
     84 
     85 typedef struct LtkWindow {
     86 	Window xwindow;
     87 	GC gc;
     88 	LtkWidget *root_widget;
     89 	int (*other_event) (LtkWindow *, XEvent event);
     90 	LtkRect rect;
     91 	LtkWidget **float_widgets;
     92 	int num_float_widgets;
     93 	int max_float_widgets;
     94 } LtkWindow;
     95 
     96 typedef struct LtkWindowTheme {
     97 	int border_width;
     98 	char *font;
     99 	XColor fg;
    100 	XColor bg;
    101 } LtkWindowTheme;
    102 
    103 typedef struct LtkButtonTheme LtkButtonTheme;
    104 
    105 typedef struct {
    106 	LtkWindowTheme *window;
    107 	LtkButtonTheme *button;
    108 } LtkTheme;
    109 
    110 typedef struct LtkTextManager LtkTextManager;
    111 LtkTextManager *ltk_get_text_manager(void);
    112 LtkTheme *ltk_get_theme(void);
    113 Display *ltk_get_display(void);
    114 Colormap ltk_get_colormap(void);
    115 
    116 LtkTheme *ltk_load_theme(const char *path);
    117 
    118 typedef struct LtkTextManager LtkTextManager;
    119 
    120 void ltk_window_invalidate_rect(LtkWindow *window, LtkRect rect);
    121 
    122 void ltk_init(const char *theme_path);
    123 
    124 void ltk_fatal(const char *msg);
    125 
    126 XColor ltk_create_xcolor(const char *hex);
    127 
    128 void ltk_mainloop(void);
    129 
    130 LtkWindow *ltk_create_window(const char *title, int x, int y,
    131 			     unsigned int w, unsigned int h);
    132 
    133 void ltk_redraw_window(LtkWindow *window, LtkRect rect);
    134 
    135 void ltk_remove_window(LtkWindow *window);
    136 
    137 void ltk_destroy_window(LtkWindow *window);
    138 
    139 void ltk_window_other_event(LtkWindow *window, XEvent event);
    140 
    141 void ltk_destroy_theme(LtkTheme *theme);
    142 
    143 int ltk_collide_rect(LtkRect rect, int x, int y);
    144 
    145 char *ltk_read_file(const char *path, unsigned long *len);
    146 
    147 void ltk_change_active_widget_state(void *widget, LtkWidgetState state);
    148 
    149 void ltk_remove_active_widget(void *widget);
    150 
    151 void ltk_remove_hover_widget(void *widget);
    152 
    153 void ltk_fill_widget_defaults(LtkWidget *widget, LtkWindow * window,
    154 	void (*draw) (void *), void (*destroy) (void *), unsigned int needs_redraw);
    155 
    156 void ltk_widget_mouse_press_event(void *widget, XEvent event);
    157 
    158 void ltk_widget_mouse_release_event(void *widget, XEvent event);
    159 
    160 void ltk_widget_motion_notify_event(void *widget, XEvent event);
    161 
    162 void ltk_handle_event(XEvent event);
    163 
    164 #endif