These functions provide rectangle management. More...
Data Structures | |
struct | _Eina_Rectangle |
Macros | |
#define | EINA_RECTANGLE_INIT { 0, 0, 0, 0} |
#define | EINA_RECTANGLE_FORMAT "dx%d - %dx%d" |
#define | EINA_RECTANGLE_ARGS(r) (r)->x, (r)->y, (r)->w, (r)->h |
#define | EINA_RECTANGLE_SET(Rectangle, X, Y, W, H) |
Macro to set the values of a Eina_Rectangle. More... | |
Typedefs | |
typedef struct _Eina_Rectangle | Eina_Rectangle |
Simple rectangle structure. | |
typedef struct _Eina_Rectangle_Pool | Eina_Rectangle_Pool |
Type for an opaque pool of rectangle. | |
Functions | |
static int | eina_spans_intersect (int c1, int l1, int c2, int l2) |
Check if the given spans intersect. More... | |
static Eina_Bool | eina_rectangle_is_empty (const Eina_Rectangle *r) |
Check if the given rectangle is empty. More... | |
static void | eina_rectangle_coords_from (Eina_Rectangle *r, int x, int y, int w, int h) |
Set the coordinates and size of the given rectangle. More... | |
static Eina_Bool | eina_rectangles_intersect (const Eina_Rectangle *r1, const Eina_Rectangle *r2) |
Check if the given rectangles intersect. More... | |
static Eina_Bool | eina_rectangle_xcoord_inside (const Eina_Rectangle *r, int x) |
Check if the given x-coordinate is in the rectangle . More... | |
static Eina_Bool | eina_rectangle_ycoord_inside (const Eina_Rectangle *r, int y) |
Check if the given y-coordinate is in the rectangle . More... | |
static Eina_Bool | eina_rectangle_coords_inside (const Eina_Rectangle *r, int x, int y) |
Check if the given point is in the rectangle . More... | |
static void | eina_rectangle_union (Eina_Rectangle *dst, const Eina_Rectangle *src) |
Get the union of two rectangles. More... | |
static Eina_Bool | eina_rectangle_intersection (Eina_Rectangle *dst, const Eina_Rectangle *src) |
Get the intersection of two rectangles. More... | |
static void | eina_rectangle_rescale_in (const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) |
static void | eina_rectangle_rescale_out (const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) |
static Eina_Bool | eina_rectangle_is_valid (const Eina_Rectangle *r) |
static int | eina_rectangle_max_x (Eina_Rectangle *thiz) |
static int | eina_rectangle_max_y (Eina_Rectangle *thiz) |
static Eina_Bool | eina_rectangle_x_cut (Eina_Rectangle *thiz, Eina_Rectangle *slice, Eina_Rectangle *leftover, int amount) |
static Eina_Bool | eina_rectangle_y_cut (Eina_Rectangle *thiz, Eina_Rectangle *slice, Eina_Rectangle *leftover, int amount) |
static Eina_Bool | eina_rectangle_width_cut (Eina_Rectangle *thiz, Eina_Rectangle *slice, Eina_Rectangle *leftover, int amount) |
static Eina_Bool | eina_rectangle_height_cut (Eina_Rectangle *thiz, Eina_Rectangle *slice, Eina_Rectangle *leftover, int amount) |
static Eina_Bool | eina_rectangle_subtract (Eina_Rectangle *thiz, Eina_Rectangle *other, Eina_Rectangle out[4]) |
Subtract two rectangles. More... | |
EAPI Eina_Rectangle_Pool * | eina_rectangle_pool_new (int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT |
Add a rectangle in a new pool. More... | |
EAPI Eina_Rectangle_Pool * | eina_rectangle_pool_get (Eina_Rectangle *rect) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) |
Return the pool of the given rectangle. More... | |
EAPI Eina_Bool | eina_rectangle_pool_geometry_get (Eina_Rectangle_Pool *pool, int *w, int *h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT |
Return the width and height of the given pool. More... | |
EAPI void * | eina_rectangle_pool_data_get (Eina_Rectangle_Pool *pool) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) |
Get the data from the given pool. More... | |
EAPI void | eina_rectangle_pool_data_set (Eina_Rectangle_Pool *pool, const void *data) EINA_ARG_NONNULL(1) |
Set the data to the given pool. More... | |
EAPI void | eina_rectangle_pool_free (Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) |
Free the given pool. More... | |
EAPI int | eina_rectangle_pool_count (Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT |
Return the number of rectangles in the given pool. More... | |
EAPI Eina_Rectangle * | eina_rectangle_pool_request (Eina_Rectangle_Pool *pool, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) |
Request a rectangle of given size in the given pool. More... | |
EAPI void | eina_rectangle_pool_release (Eina_Rectangle *rect) EINA_ARG_NONNULL(1) |
Remove the given rectangle from the pool. More... | |
EAPI Eina_Rectangle * | eina_rectangle_new (int x, int y, int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT |
Create a new rectangle. More... | |
EAPI void | eina_rectangle_free (Eina_Rectangle *rect) EINA_ARG_NONNULL(1) |
Free the given rectangle. More... | |
Variables | |
static Eina_Bool | EINA_WARN_UNUSED_RESULT |
These functions provide rectangle management.
#define EINA_RECTANGLE_SET | ( | Rectangle, | |
X, | |||
Y, | |||
W, | |||
H | |||
) |
Macro to set the values of a Eina_Rectangle.
Rectangle | The rectangle to set the values. |
X | The X coordinate of the top left corner of the rectangle. |
Y | The Y coordinate of the top left corner of the rectangle. |
W | The width of the rectangle. |
H | The height of the rectangle. |
This macro set the values of Rectangle
. (X
, Y
) is the coordinates of the top left corner of Rectangle
, W
is its width and H
is its height.
Referenced by eina_rectangle_new().
|
inlinestatic |
Check if the given spans intersect.
c1 | The column of the first span. |
l1 | The length of the first span. |
c2 | The column of the second span. |
l2 | The length of the second span. |
This function returns EINA_TRUE if the given spans intersect, EINA_FALSE otherwise.
Referenced by eina_rectangles_intersect().
|
inlinestatic |
Check if the given rectangle is empty.
r | The rectangle to check. |
This function returns EINA_TRUE if r
is empty, EINA_FALSE otherwise. No check is done on r
, so it must be a valid rectangle.
References EINA_FALSE, EINA_TRUE, _Eina_Rectangle::h, and _Eina_Rectangle::w.
|
inlinestatic |
Set the coordinates and size of the given rectangle.
r | The rectangle. |
x | The top-left x coordinate of the rectangle. |
y | The top-left y coordinate of the rectangle. |
w | The width of the rectangle. |
h | The height of the rectangle. |
This function sets its top-left x coordinate to x
, its top-left y coordinate to y
, its width to w
and its height to h
. No check is done on r
, so it must be a valid rectangle.
References _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
Referenced by eina_rectangle_pool_request(), and eina_rectangle_subtract().
|
inlinestatic |
Check if the given rectangles intersect.
r1 | The first rectangle. |
r2 | The second rectangle. |
This function returns EINA_TRUE if r1
and r2
intersect, EINA_FALSE otherwise. No check is done on r1
and r2
, so they must be valid rectangles.
References EINA_FALSE, eina_spans_intersect(), EINA_TRUE, _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
Referenced by eina_rectangle_intersection().
|
inlinestatic |
Check if the given x-coordinate is in the rectangle .
r | The rectangle. |
x | The x coordinate. |
This function returns EINA_TRUE if x
is in r
with respect to the horizontal direction, EINA_FALSE otherwise. No check is done on r
, so it must be a valid rectangle.
References EINA_FALSE, EINA_TRUE, _Eina_Rectangle::w, and _Eina_Rectangle::x.
Referenced by eina_rectangle_coords_inside().
|
inlinestatic |
Check if the given y-coordinate is in the rectangle .
r | The rectangle. |
y | The y coordinate. |
This function returns EINA_TRUE if y
is in r
with respect to the vertical direction, EINA_FALSE otherwise. No check is done on r
, so it must be a valid rectangle.
References EINA_FALSE, EINA_TRUE, _Eina_Rectangle::h, and _Eina_Rectangle::y.
Referenced by eina_rectangle_coords_inside().
|
inlinestatic |
Check if the given point is in the rectangle .
r | The rectangle. |
x | The x coordinate of the point. |
y | The y coordinate of the point. |
This function returns EINA_TRUE if the point of coordinate (x
, y
) is in r
, EINA_FALSE otherwise. No check is done on r
, so it must be a valid rectangle.
References EINA_FALSE, eina_rectangle_xcoord_inside(), eina_rectangle_ycoord_inside(), and EINA_TRUE.
|
inlinestatic |
Get the union of two rectangles.
dst | The first rectangle. |
src | The second rectangle. |
This function get the union of the rectangles dst
and src
. The result is stored in dst
. No check is done on dst
or src
, so they must be valid rectangles.
References _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
|
inlinestatic |
Get the intersection of two rectangles.
dst | The first rectangle. |
src | The second rectangle. |
This function get the intersection of the rectangles dst
and src
. The result is stored in dst
. No check is done on dst
or src
, so they must be valid rectangles.
References EINA_FALSE, eina_rectangles_intersect(), EINA_TRUE, _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
Referenced by eina_rectangle_subtract(), eina_tiler_rect_add(), and eina_tiler_rect_del().
|
inlinestatic |
Subtract two rectangles.
thiz | The minuend rectangle |
other | The subtrahend rectangle |
This function subtract two rectangles. The difference is stored on out
There will be at most four differences, use eina_rectangle_is_valid to confirm the number of differences.
References EINA_FALSE, eina_rectangle_coords_from(), eina_rectangle_intersection(), EINA_TRUE, _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
EAPI Eina_Rectangle_Pool* eina_rectangle_pool_new | ( | int | w, |
int | h | ||
) |
Add a rectangle in a new pool.
w | The width of the rectangle. |
h | The height of the rectangle. |
NULL
otherwise.This function adds the rectangle of size (width
, height
) to a new pool. If the pool can not be created, NULL
is returned. Otherwise the newly allocated pool is returned.
References EINA_FALSE, eina_list_append(), EINA_MAGIC_SET, and eina_rectangle_new().
EAPI Eina_Rectangle_Pool* eina_rectangle_pool_get | ( | Eina_Rectangle * | rect | ) |
Return the pool of the given rectangle.
rect | The rectangle. |
This function returns the pool in which rect
is. If rect
is NULL
, NULL
is returned.
EAPI Eina_Bool eina_rectangle_pool_geometry_get | ( | Eina_Rectangle_Pool * | pool, |
int * | w, | ||
int * | h | ||
) |
Return the width and height of the given pool.
pool | The pool. |
w | The returned width. |
h | The returned height. |
This function returns the width and height of pool
and store them in respectively w
and h
if they are not NULL
. If pool
is NULL
, EINA_FALSE is returned. Otherwise EINA_TRUE is returned.
References EINA_FALSE, and EINA_TRUE.
EAPI void* eina_rectangle_pool_data_get | ( | Eina_Rectangle_Pool * | pool | ) |
Get the data from the given pool.
pool | The pool. |
This function gets the data from pool
set by eina_rectangle_pool_data_set(). If pool
is NULL
, this function returns NULL
.
EAPI void eina_rectangle_pool_data_set | ( | Eina_Rectangle_Pool * | pool, |
const void * | data | ||
) |
Set the data to the given pool.
pool | The pool. |
data | The data to set. |
This function sets data
to pool
. If pool
is NULL
, this function does nothing.
EAPI void eina_rectangle_pool_free | ( | Eina_Rectangle_Pool * | pool | ) |
Free the given pool.
pool | The pool to free. |
This function frees the allocated data of pool
. If pool
is NULL
, this function returned immediately.
References EINA_INLIST_GET, EINA_MAGIC_NONE, EINA_MAGIC_SET, and eina_mempool_free().
EAPI int eina_rectangle_pool_count | ( | Eina_Rectangle_Pool * | pool | ) |
Return the number of rectangles in the given pool.
pool | The pool. |
This function returns the number of rectangles in pool
.
EAPI Eina_Rectangle* eina_rectangle_pool_request | ( | Eina_Rectangle_Pool * | pool, |
int | w, | ||
int | h | ||
) |
Request a rectangle of given size in the given pool.
pool | The pool. |
w | The width of the rectangle to request. |
h | The height of the rectangle to request. |
NULL
otherwise.This function retrieve from pool
the rectangle of width w
and height h
. If pool
is NULL
, or w
or h
are non-positive, the function returns NULL
. If w
or h
are greater than the pool size, the function returns NULL
. On success, the function returns the rectangle which matches the size (w
, h
). Otherwise it returns NULL
.
References EINA_COMPARE_CB, EINA_FALSE, EINA_INLIST_GET, eina_inlist_prepend(), eina_list_sort(), EINA_MAGIC_SET, eina_mempool_malloc(), eina_rectangle_coords_from(), EINA_TRUE, and _Eina_Rectangle::w.
EAPI void eina_rectangle_pool_release | ( | Eina_Rectangle * | rect | ) |
Remove the given rectangle from the pool.
rect | The rectangle to remove from the pool. |
This function removes rect
from the pool. If rect
is NULL
, the function returns immediately. Otherwise it removes rect
from the pool.
References EINA_FALSE, EINA_INLIST_GET, eina_inlist_remove(), EINA_MAGIC_NONE, EINA_MAGIC_SET, eina_mempool_free(), eina_rectangle_new(), _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
EAPI Eina_Rectangle* eina_rectangle_new | ( | int | x, |
int | y, | ||
int | w, | ||
int | h | ||
) |
Create a new rectangle.
x | The X coordinate of the top left corner of the rectangle. |
y | The Y coordinate of the top left corner of the rectangle. |
w | The width of the rectangle. |
h | The height of the rectangle. |
This function creates a rectangle which top left corner has the coordinates (x
, y
), with height w
and height h
and adds it to the rectangles pool. No check is done on w
and h
. This function returns a new rectangle on success, NULL
otherwhise.
References eina_mempool_malloc(), and EINA_RECTANGLE_SET.
Referenced by eina_rectangle_pool_new(), and eina_rectangle_pool_release().
EAPI void eina_rectangle_free | ( | Eina_Rectangle * | rect | ) |
Free the given rectangle.
rect | The rectangle to free. |
This function removes rect
from the rectangles pool.
References eina_mempool_free().
Referenced by evas_render_updates_free().