Mercurial > molko
diff libmlk-ui/ui/align.h @ 243:71b3b7036de7
misc: lot of cleanups,
- prefix libraries with libmlk,
- move assets from source directories closes #2520,
- prefix header guards closes #2519
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 28 Nov 2020 22:37:30 +0100 |
parents | libui/ui/align.h@9733d379be89 |
children | 08ab73b32832 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-ui/ui/align.h Sat Nov 28 22:37:30 2020 +0100 @@ -0,0 +1,102 @@ +/* + * align.h -- user interface alignment + * + * Copyright (c) 2020 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MOLKO_UI_ALIGN_H +#define MOLKO_UI_ALIGN_H + +/** + * \file align.h + * \brief User interface alignment. + */ + +/** + * \brief Label alignment in bounding box. + * + * The alignment is described as following: + * + * ``` + * +---------------------+ + * | 2 3 4 | + * | | + * | 9 1 5 | + * | | + * | 8 7 6 | + * +---------------------+ + * ``` + * + * The default value of 0 (LABEL_ALIGN_NONE) means the alignment isn't used. + */ +enum align { + ALIGN_NONE, /*!< No alignment. */ + ALIGN_CENTER, /*!< Align to the center. */ + ALIGN_TOP_LEFT, /*!< Top left. */ + ALIGN_TOP, /*!< Top center (aligned horizontally). */ + ALIGN_TOP_RIGHT, /*!< Top right. */ + ALIGN_RIGHT, /*!< Right (aligned vertically). */ + ALIGN_BOTTOM_RIGHT, /*!< Bottom right. */ + ALIGN_BOTTOM, /*!< Bottom (aligned horizontally). */ + ALIGN_BOTTOM_LEFT, /*!< Bottom left. */ + ALIGN_LEFT /*!< Left (aligned vertically). */ +}; + +/** + * Align the given object relative to its parent region. + * + * The arguments are described as following: + * + * ``` + * Example of ALIGN_LEFT (centered vertically but placed on the left.) + * + * px, py + * +----------pw----------+ + * | | + * | x, y | + * | +---w---+ | + * ph h | | + * | +-------+ | + * | | + * | | + * +----------------------+ + * ``` + * + * As a convenience, x and y are left untouched if align is ALIGN_NONE which + * means you can set the coordinates to default values and still call the align + * function without need to check. + * + * \param align the desired alignment + * \param x the pointer to x coordinate to modify (may be NULL) + * \param y the pointer yo y coordinate to modify (may be NULL) + * \param w the object width + * \param h the object height + * \param px the parent region start + * \param py the parent region start + * \param pw the parent region width + * \param ph the parent region height + */ +void +align(enum align align, + int *x, + int *y, + unsigned int w, + unsigned int h, + int px, + int py, + unsigned int pw, + unsigned int ph); + +#endif /* !MOLKO_UI_ALIGN_H */