grid.h (3680B)
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_GRID_H_ 25 #define _LTK_GRID_H_ 26 27 /* Requires the following incude: <X11/Xlib.h>, "ltk.h" */ 28 29 /* 30 * Struct to represent a grid widget. 31 */ 32 typedef struct LtkGrid { 33 LtkWidget widget; 34 unsigned int rows; 35 unsigned int columns; 36 LtkWidget **widget_grid; 37 unsigned int *row_heights; 38 unsigned int *column_widths; 39 unsigned int *row_weights; 40 unsigned int *column_weights; 41 unsigned int *row_pos; 42 unsigned int *column_pos; 43 } LtkGrid; 44 45 /* 46 * Set the weight of a row in a grid. 47 * grid: The grid. 48 * row: The row. 49 * weight: The weight to set the row to. 50 */ 51 void ltk_set_row_weight(LtkGrid * grid, int row, int weight); 52 53 /* 54 * Set the weight of a column in a grid. 55 * grid: The grid. 56 * column: The column. 57 * weight: The weight to set the row to. 58 */ 59 void ltk_set_column_weight(LtkGrid * grid, int column, int weight); 60 61 /* 62 * Draw all the widgets in a grid. 63 * grid: The grid to draw the widgets of. 64 */ 65 void ltk_draw_grid(LtkGrid * grid); 66 67 /* 68 * Create a grid. 69 * window: The window the grid will displayed on. 70 * rows: The number of rows in the grid. 71 * columns: The number of columns in the grid. 72 */ 73 LtkGrid *ltk_create_grid(LtkWindow * window, int rows, int columns); 74 75 /* 76 * Destroy a grid. 77 * grid: Pointer to the grid. 78 */ 79 void ltk_destroy_grid(LtkGrid *grid); 80 81 /* 82 * Recalculate the positions and dimensions of the 83 * columns, rows, and widgets in a grid. 84 * grid: Pointer to the grid. 85 */ 86 void ltk_recalculate_grid(LtkGrid *grid); 87 88 /* 89 * Grid a widget. 90 * widget: Pointer to the widget. 91 * grid: The grid. 92 * row: The row to grid the widget in. 93 * column: The column to grid the widget in. 94 * rowspan: The amount of rows the widget should span. 95 * columnspan: The amount of columns the widget should span. 96 * sticky: Mask of the sticky values (LTK_STICKY_*). 97 */ 98 void ltk_grid_widget(LtkWidget *widget, LtkGrid *grid, int row, int column, 99 int rowspan, int columnspan, unsigned short sticky); 100 101 /* 102 * Delegate a mouse press event on the grid to the proper widget. 103 * grid: The grid. 104 * event: The event to be handled. 105 */ 106 void ltk_grid_mouse_press(LtkGrid *grid, XEvent event); 107 108 /* 109 * Delegate a mouse release event on the grid to the proper widget. 110 * grid: The grid. 111 * event: The event to be handled. 112 */ 113 void ltk_grid_mouse_release(LtkGrid *grid, XEvent event); 114 115 /* 116 * Delegate a mouse motion event on the grid to the proper widget. 117 * grid: The grid. 118 * event: The event to be handled. 119 */ 120 void ltk_grid_motion_notify(LtkGrid *grid, XEvent event); 121 122 #endif