These functions provide rectangle management. More...
Data Structures | |
struct | _Eina_Position2D |
A 2D position in pixel coordinates. More... | |
struct | _Eina_Size2D |
A 2D size in pixel coordinates. More... | |
struct | _Eina_Rectangle |
union | _Eina_Rect |
Macros | |
#define | EINA_RECTANGLE_INIT { 0, 0, 0, 0} |
A zero-size rectangle. | |
#define | EINA_RECTANGLE_FORMAT "dx%d - %dx%d" |
A format string useful for printf-like functions. | |
#define | EINA_RECTANGLE_ARGS(r) (r)->x, (r)->y, (r)->w, (r)->h |
Separates the components of the rectangle structure into a comma-separated list, so they can be used as parameters. | |
#define | EINA_RECT(x, y, w, h) ((Eina_Rect) { { (x), (y), (w), (h) } }) |
Creates an instance of an Eina_Rect. | |
#define | EINA_RECT_ZERO() { EINA_RECTANGLE_INIT } |
A zero-size rectangle that can be used to initialize Eina_Rect structures. | |
#define | EINA_RECT_EMPTY() ((Eina_Rect) EINA_RECT_ZERO()) |
A zero-size rectangle that can be used to initialize Eina_Rect structures. | |
#define | EINA_POSITION2D(x, y) ((Eina_Position2D) { (x), (y) }) |
Creates an instance of an Eina_Position2D. | |
#define | EINA_SIZE2D(x, y) ((Eina_Size2D) { (x), (y) }) |
Creates an instance of an Eina_Size2D. | |
#define | EINA_SIZE2D_EQ(a, b) (((a).w == (b).w) && ((a).h == (b).h)) |
convenience macro for comparing two Eina_Size2D structs More... | |
#define | EINA_POSITION2D_EQ(a, b) (((a).x == (b).x) && ((a).y == (b).y)) |
convenience macro for comparing two Eina_Position2D structs More... | |
#define | EINA_POSITION2D_DISTANCE(a, b) sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)) |
Convenience macro for getting the distance from one point to another. More... | |
#define | EINA_RECTANGLE_SET(Rectangle, X, Y, W, H) |
Definition for the macro to set the values of a Eina_Rectangle. More... | |
#define | EINA_RECT_SET(rect, x, y, w, h) do { EINA_RECTANGLE_SET((&rect), x, y, w, h) } while (0) |
Functionally equivalent to EINA_RECTANGLE_SET. | |
Typedefs | |
typedef struct _Eina_Position2D | Eina_Position2D |
A 2D position in pixel coordinates. | |
typedef struct _Eina_Size2D | Eina_Size2D |
A 2D size in pixel coordinates. | |
typedef struct _Eina_Rectangle | Eina_Rectangle |
Simple rectangle structure. | |
typedef union _Eina_Rect | Eina_Rect |
A convenient rectangle structure which can be accessed in different ways. | |
typedef struct _Eina_Rectangle_Pool | Eina_Rectangle_Pool |
Type for an opaque pool of rectangles. | |
Enumerations | |
enum | Eina_Rectangle_Packing { Eina_Packing_Descending , Eina_Packing_Ascending , Eina_Packing_Bottom_Left , Eina_Packing_Bottom_Left_Skyline , Eina_Packing_Bottom_Left_Skyline_Improved } |
Type for an Eina Pool based on a packing algorithm. More... | |
enum | Eina_Rectangle_Outside { EINA_RECTANGLE_OUTSIDE_TOP = 1 , EINA_RECTANGLE_OUTSIDE_LEFT = 2 , EINA_RECTANGLE_OUTSIDE_BOTTOM = 4 , EINA_RECTANGLE_OUTSIDE_RIGHT = 8 } |
Enumeration of the positions around a rectangle. More... | |
Functions | |
static int | eina_spans_intersect (int c1, int l1, int c2, int l2) |
Checks if the given spans intersect. More... | |
static Eina_Bool | eina_rectangle_is_empty (const Eina_Rectangle *rect) |
Checks if the given rectangle is empty. More... | |
static void | eina_rectangle_coords_from (Eina_Rectangle *rect, int x, int y, int w, int h) |
Sets the coordinates and size of a rectangle. More... | |
static Eina_Bool | eina_rectangles_intersect (const Eina_Rectangle *rect1, const Eina_Rectangle *rect2) |
Checks if two rectangles intersect. More... | |
static Eina_Bool | eina_rectangle_xcoord_inside (const Eina_Rectangle *rect, int x) |
Checks if the given X-coordinate is in the rectangle. More... | |
static Eina_Bool | eina_rectangle_ycoord_inside (const Eina_Rectangle *rect, int y) |
Checks if the given Y-coordinate is in the rectangle. More... | |
static Eina_Bool | eina_rectangle_coords_inside (const Eina_Rectangle *rect, int x, int y) |
Checks if the given point is inside the rectangle. More... | |
static void | eina_rectangle_union (Eina_Rectangle *dst, const Eina_Rectangle *src) |
Gets the union of two rectangles. More... | |
static Eina_Bool | eina_rectangle_intersection (Eina_Rectangle *dst, const Eina_Rectangle *src) |
Gets the intersection of two rectangles. More... | |
static void | eina_rectangle_rescale_in (const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) |
FIXME I am useless and used by no one. More... | |
static void | eina_rectangle_rescale_out (const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) |
FIXME I am useless and used by no one. More... | |
static Eina_Bool | eina_rectangle_is_valid (const Eina_Rectangle *rect) |
Tells whether a rectangle is valid. More... | |
static int | eina_rectangle_max_x (Eina_Rectangle *rect) |
Gets the rectangle's maximum X coordinate. More... | |
static int | eina_rectangle_max_y (Eina_Rectangle *rect) |
Gets the rectangle maximum Y coordinate. More... | |
static Eina_Bool | eina_rectangle_x_cut (Eina_Rectangle *rect, Eina_Rectangle *slice, Eina_Rectangle *remainder, int amount) |
Slices a rectangle vertically into two subrectangles. More... | |
static Eina_Bool | eina_rectangle_y_cut (Eina_Rectangle *rect, Eina_Rectangle *slice, Eina_Rectangle *remainder, int amount) |
Slices a rectangle horizontally into two subrectangles. More... | |
static Eina_Bool | eina_rectangle_width_cut (Eina_Rectangle *rect, Eina_Rectangle *slice, Eina_Rectangle *remainder, int amount) |
Slices a rectangle vertically starting from right edge. More... | |
static Eina_Bool | eina_rectangle_height_cut (Eina_Rectangle *rect, Eina_Rectangle *slice, Eina_Rectangle *remainder, int amount) |
Slices a rectangle horizontally starting from top edge. More... | |
static Eina_Bool | eina_rectangle_subtract (Eina_Rectangle *rect, Eina_Rectangle *other, Eina_Rectangle out[4]) |
Subtracts two rectangles and returns the differences. More... | |
EINA_API Eina_Rectangle_Pool * | eina_rectangle_pool_new (int w, int h) |
Adds a rectangle in a new pool. More... | |
EINA_API Eina_Rectangle_Pool * | eina_rectangle_pool_get (Eina_Rectangle *rect) |
Returns the pool of the given rectangle. More... | |
EINA_API Eina_Bool | eina_rectangle_pool_geometry_get (Eina_Rectangle_Pool *pool, int *w, int *h) |
Returns the width and height of the given pool. More... | |
EINA_API void * | eina_rectangle_pool_data_get (Eina_Rectangle_Pool *pool) |
Gets the data from the given pool. More... | |
EINA_API void | eina_rectangle_pool_data_set (Eina_Rectangle_Pool *pool, const void *data) |
Sets the data to the given pool. More... | |
EINA_API void | eina_rectangle_pool_free (Eina_Rectangle_Pool *pool) |
Frees the given pool. More... | |
EINA_API int | eina_rectangle_pool_count (Eina_Rectangle_Pool *pool) |
Returns the number of rectangles in the given pool. More... | |
EINA_API Eina_Rectangle * | eina_rectangle_pool_request (Eina_Rectangle_Pool *pool, int w, int h) |
Requests a rectangle of given size in the given pool. More... | |
EINA_API void | eina_rectangle_pool_release (Eina_Rectangle *rect) |
Removes the given rectangle from the pool. More... | |
EINA_API Eina_Rectangle * | eina_rectangle_new (int x, int y, int w, int h) |
Creates a new rectangle. More... | |
EINA_API void | eina_rectangle_free (Eina_Rectangle *rect) |
Frees the given rectangle. More... | |
EINA_API void | eina_rectangle_pool_packing_set (Eina_Rectangle_Pool *pool, Eina_Rectangle_Packing type) |
Sets the type of given rectangle pool. More... | |
EINA_API Eina_Rectangle_Outside | eina_rectangle_outside_position (Eina_Rectangle *rect1, Eina_Rectangle *rect2) |
calculates where rect2 is outside of rect1. More... | |
static Eina_Bool | eina_rectangle_equal (const Eina_Rectangle *rect1, const Eina_Rectangle *rect2) |
Compares two rectangles for equality. More... | |
These functions provide rectangle management.
#define EINA_SIZE2D_EQ | ( | a, | |
b | |||
) | (((a).w == (b).w) && ((a).h == (b).h)) |
convenience macro for comparing two Eina_Size2D structs
[in] | a | An Eina_Size2D |
[in] | b | An Eina_Size2D |
#define EINA_POSITION2D_EQ | ( | a, | |
b | |||
) | (((a).x == (b).x) && ((a).y == (b).y)) |
convenience macro for comparing two Eina_Position2D structs
[in] | a | An Eina_Position2D |
[in] | b | An Eina_Position2D |
#define EINA_POSITION2D_DISTANCE | ( | a, | |
b | |||
) | sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)) |
Convenience macro for getting the distance from one point to another.
[in] | a | An Eina_Position2D |
[in] | b | An Eina_Position2D |
#define EINA_RECTANGLE_SET | ( | Rectangle, | |
X, | |||
Y, | |||
W, | |||
H | |||
) |
Definition for the macro to set the values of a Eina_Rectangle.
[out] | Rectangle | The rectangle. |
[in] | X | The X coordinate of the top left corner of the rectangle. |
[in] | Y | The Y coordinate of the top left corner of the rectangle. |
[in] | W | The width of the rectangle. |
[in] | H | The height of the rectangle. |
This macro set the values of Rectangle
. X
and Y
are the coordinates of the top left corner of Rectangle
, W
is its width and H
is its height.
Type for an Eina Pool based on a packing algorithm.
Enumeration of the positions around a rectangle.
|
inlinestatic |
Checks if the given spans intersect.
[in] | c1 | The column of the first span. |
[in] | l1 | The length of the first span. |
[in] | c2 | The column of the second span. |
[in] | l2 | The length of the second span. |
|
inlinestatic |
Checks if the given rectangle is empty.
[in] | rect | The rectangle to check. |
r
is empty, EINA_FALSE otherwise.No check is done on r
, so it must be a valid rectangle.
|
inlinestatic |
Sets the coordinates and size of a rectangle.
[out] | rect | The rectangle. |
[in] | x | The X coordinate of the rectangle's top-left corner. |
[in] | y | The Y coordinate of the rectangle's top-left corner. |
[in] | w | The width of the rectangle. |
[in] | 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.
Referenced by eina_rectangle_pool_request().
|
inlinestatic |
Checks if two rectangles intersect.
[in] | rect1 | The first rectangle. |
[in] | rect2 | The second rectangle. |
rect1
and rect2
intersect, EINA_FALSE otherwise.No check is done on rect1
and rect2
, so they must be valid rectangles.
Referenced by eina_tiler_equal(), and eina_tiler_intersection().
|
inlinestatic |
Checks if the given X-coordinate is in the rectangle.
[in] | rect | The rectangle. |
[in] | x | The X coordinate. |
x
is between the rectangle's left and right edges, EINA_FALSE otherwise.No check is done on r
, so it must be a valid rectangle.
|
inlinestatic |
Checks if the given Y-coordinate is in the rectangle.
[in] | rect | The rectangle. |
[in] | y | The Y coordinate. |
y
is between the rectangle's top and bottom edges, EINA_FALSE otherwise.No check is done on r
, so it must be a valid rectangle.
|
inlinestatic |
Checks if the given point is inside the rectangle.
[in] | rect | The rectangle. |
[in] | x | The x coordinate of the point. |
[in] | y | The y coordinate of the point. |
x
, y
) is within the edges of r
, EINA_FALSE otherwise.No check is done on r
, so it must be a valid rectangle.
|
inlinestatic |
Gets the union of two rectangles.
[in,out] | dst | The first rectangle. |
[in] | src | The second rectangle. |
Changes dst
to be the bounding box of both rectangles dst
and src
.
No check is done on dst
or src
, so they must be valid rectangles.
|
inlinestatic |
Gets the intersection of two rectangles.
[in,out] | dst | The first rectangle. |
[in] | src | The second rectangle. |
Changes dst
to be the rectangle represented by the intersection of dst
and src
. dst
is unchanged if the two rectangles do not intersect.
No check is done on dst
or src
, so they must be valid rectangles.
Referenced by eina_tiler_rect_add(), and eina_tiler_rect_del().
|
inlinestatic |
FIXME I am useless and used by no one.
in | The inner rectangle. |
out | The outer rectangle. |
res | The resulting rectangle. |
|
inlinestatic |
FIXME I am useless and used by no one.
in | The inner rectangle. |
out | The outer rectangle. |
res | The resulting rectangle. |
|
inlinestatic |
Tells whether a rectangle is valid.
[in] | rect | The rectangle. |
This function checks if both width and height attributes of the rectangle are positive integers. If so, the rectangle is considered valid, else the rectangle is invalid.
|
inlinestatic |
Gets the rectangle's maximum X coordinate.
[in] | rect | The rectangle. |
This function calculates the maximum X coordinate of the rectangle by summing the width
with the current x
coordinate of the rectangle.
|
inlinestatic |
Gets the rectangle maximum Y coordinate.
[in] | rect | The rectangle. |
This function calculates the maximum Y coordinate of the rectangle by summing the height
with the current y
coordinate of the rectangle.
|
inlinestatic |
Slices a rectangle vertically into two subrectangles.
[in] | rect | The rectangle to slice. |
[out] | slice | The sliced part of the rectangle. |
[out] | remainder | The left over part of the rectangle after slicing. |
[in] | amount | The slice location's horizontal distance from the left. |
Cut a rectangle vertically at a distance amount
from the rectangle's left edge. If the amount
value is greater than the rectangle's width, no cut is performed and EINA_FALSE is returned.
|
inlinestatic |
Slices a rectangle horizontally into two subrectangles.
[in] | rect | The rectangle to slice. |
[out] | slice | The sliced part of the rectangle. |
[out] | remainder | The left over part of the rectangle after slicing. |
[in] | amount | The slice location's vertical distance from the bottom. |
Cut a rectangle horizontally at a distance amount
from the rectangle's bottom edge. If the amount
value is greater than the rectangle's height, no cut is performed and EINA_FALSE is returned.
|
inlinestatic |
Slices a rectangle vertically starting from right edge.
[in] | rect | The rectangle to slice. |
[out] | slice | The sliced part of the rectangle. |
[out] | remainder | The left over part of the rectangle after slicing. |
[in] | amount | The slice location's horizontal distance from the right. |
Cut a rectangle vertically at a distance amount
from the rectangle's right edge. If the amount
value is greater than the rectangle's width, no cut is performed and EINA_FALSE is returned.
|
inlinestatic |
Slices a rectangle horizontally starting from top edge.
[in] | rect | The rectangle to slice. |
[out] | slice | The sliced part of the rectangle. |
[out] | remainder | The left over part of the rectangle after slicing. |
[in] | amount | The slice location's vertical distance from the top. |
Cut a rectangle horizontally at a distance amount
from the rectangle's top edge. If the amount
value is greater than the rectangle width, no cut is performed and EINA_FALSE is returned.
|
inlinestatic |
Subtracts two rectangles and returns the differences.
[in] | rect | The minuend rectangle. |
[in] | other | The subtrahend rectangle. |
[out] | out | An array of differences between the two rectangles. |
This function subtracts two rectangles and stores the resulting differences into the out
array. There will be at most four differences; use eina_rectangle_is_valid to confirm the exact number.
EINA_API Eina_Rectangle_Pool * eina_rectangle_pool_new | ( | int | w, |
int | h | ||
) |
Adds a rectangle in a new pool.
[in] | w | The width of the rectangle. |
[in] | 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 DBG, EINA_FALSE, eina_list_append(), EINA_MAGIC_SET, Eina_Packing_Ascending, and eina_rectangle_new().
EINA_API Eina_Rectangle_Pool * eina_rectangle_pool_get | ( | Eina_Rectangle * | rect | ) |
Returns the pool of the given rectangle.
[in] | rect | The rectangle. |
This function returns the pool in which rect
is. If rect
is NULL
, NULL
is returned.
References EINA_SAFETY_ON_NULL_RETURN_VAL.
EINA_API Eina_Bool eina_rectangle_pool_geometry_get | ( | Eina_Rectangle_Pool * | pool, |
int * | w, | ||
int * | h | ||
) |
Returns the width and height of the given pool.
[in] | pool | The pool. |
[out] | w | The returned width. |
[out] | 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, EINA_SAFETY_ON_NULL_RETURN_VAL, and EINA_TRUE.
EINA_API void * eina_rectangle_pool_data_get | ( | Eina_Rectangle_Pool * | pool | ) |
Gets the data from the given pool.
[in] | 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
.
References EINA_SAFETY_ON_NULL_RETURN_VAL.
EINA_API void eina_rectangle_pool_data_set | ( | Eina_Rectangle_Pool * | pool, |
const void * | data | ||
) |
Sets the data to the given pool.
[in,out] | pool | The pool. |
[in] | data | The data to set. |
This function sets data
to pool
. If pool
is NULL
, this function does nothing.
References DBG, and EINA_SAFETY_ON_NULL_RETURN.
EINA_API void eina_rectangle_pool_free | ( | Eina_Rectangle_Pool * | pool | ) |
Frees the given pool.
[in] | pool | The pool to free. |
This function frees the allocated data of pool
. If pool
is NULL
, this function returned immediately.
References DBG, EINA_INLIST_GET, EINA_LIST_FREE, EINA_MAGIC_NONE, EINA_MAGIC_SET, eina_mempool_free(), eina_rectangle_free(), EINA_SAFETY_ON_NULL_RETURN, and eina_trash_pop().
EINA_API int eina_rectangle_pool_count | ( | Eina_Rectangle_Pool * | pool | ) |
Returns the number of rectangles in the given pool.
[in] | pool | The pool. |
This function returns the number of rectangles in pool
.
References EINA_SAFETY_ON_NULL_RETURN_VAL.
EINA_API Eina_Rectangle * eina_rectangle_pool_request | ( | Eina_Rectangle_Pool * | pool, |
int | w, | ||
int | h | ||
) |
Requests a rectangle of given size in the given pool.
[in,out] | pool | The pool. |
[in] | w | The width of the rectangle to request. |
[in] | h | The height of the rectangle to request. |
NULL
otherwise.This function retrieves 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 DBG, EINA_FALSE, EINA_INLIST_GET, eina_inlist_prepend(), eina_list_sort(), EINA_MAGIC_SET, eina_mempool_malloc(), Eina_Packing_Bottom_Left_Skyline_Improved, eina_rectangle_coords_from(), EINA_SAFETY_ON_NULL_RETURN_VAL, eina_trash_pop(), EINA_TRUE, and _Eina_Rectangle::w.
EINA_API void eina_rectangle_pool_release | ( | Eina_Rectangle * | rect | ) |
Removes the given rectangle from the pool.
[in,out] | 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 DBG, EINA_FALSE, EINA_INLIST_FOREACH, EINA_INLIST_GET, eina_inlist_remove(), EINA_MAGIC_NONE, EINA_MAGIC_SET, eina_mempool_free(), Eina_Packing_Bottom_Left_Skyline_Improved, eina_rectangle_new(), EINA_SAFETY_ON_NULL_RETURN, eina_trash_push(), _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
EINA_API Eina_Rectangle * eina_rectangle_new | ( | int | x, |
int | y, | ||
int | w, | ||
int | h | ||
) |
Creates a new rectangle.
[in] | x | The X coordinate of the top left corner of the rectangle. |
[in] | y | The Y coordinate of the top left corner of the rectangle. |
[in] | w | The width of the rectangle. |
[in] | h | The height of the rectangle. |
This function creates a rectangle whose 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
.
References eina_mempool_malloc(), EINA_RECTANGLE_SET, eina_spinlock_release(), eina_spinlock_take(), and eina_trash_pop().
Referenced by eina_rectangle_pool_new(), and eina_rectangle_pool_release().
EINA_API void eina_rectangle_free | ( | Eina_Rectangle * | rect | ) |
Frees the given rectangle.
[in] | rect | The rectangle to free. |
This function removes rect
from the rectangles pool.
References eina_mempool_free(), EINA_SAFETY_ON_NULL_RETURN, eina_spinlock_release(), eina_spinlock_take(), and eina_trash_push().
Referenced by eina_rectangle_pool_free(), evas_norender_with_updates(), and evas_render_updates_free().
EINA_API void eina_rectangle_pool_packing_set | ( | Eina_Rectangle_Pool * | pool, |
Eina_Rectangle_Packing | type | ||
) |
Sets the type of given rectangle pool.
[in,out] | pool | The rectangle pool for which type is to be set. |
[in] | type | Type of Eina Pool based on packing algorithm. |
This function sets type
of pool
.
References DBG, Eina_Packing_Ascending, Eina_Packing_Descending, and EINA_SAFETY_ON_NULL_RETURN.
EINA_API Eina_Rectangle_Outside eina_rectangle_outside_position | ( | Eina_Rectangle * | rect1, |
Eina_Rectangle * | rect2 | ||
) |
calculates where rect2 is outside of rect1.
[in] | rect1 | The rect to use as anchor |
[in] | rect2 | The rect to look for outside positions |
References EINA_RECTANGLE_OUTSIDE_BOTTOM, EINA_RECTANGLE_OUTSIDE_LEFT, EINA_RECTANGLE_OUTSIDE_RIGHT, EINA_RECTANGLE_OUTSIDE_TOP, _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.
|
inlinestatic |
Compares two rectangles for equality.
[in] | rect1 | First rectangle. Must not be NULL. |
[in] | rect2 | Second rectangle. Must not be NULL. |
No check is made on the rectangles, so they should be valid and non NULL for this function to be meaningful.