- Main Page
- Related Pages
- Modules
- Data Structures
- Files
- Examples

Data Structures | Macros | Typedefs | Functions | Variables
Rectangle
Tools

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

## Detailed Description

These functions provide rectangle management.

## Macro Definition Documentation

#define EINA_RECTANGLE_SET | ( |  | Rectangle,
|  |  | X,
|  |  | Y,
|  |  | W,
|  |  | H
| ) |  |

Value:
{ \
(Rectangle)->x = X; \
(Rectangle)->y = Y; \
(Rectangle)->w = W; \
(Rectangle)->h = H; \
}

Macro to set the values of a Eina_Rectangle.

Parameters

  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().

## Function Documentation

static int eina_spans_intersect | ( | int | c1,
|  | int | l1,
|  | int | c2,
|  | int | l2
| ) |  |
| inline static

Check if the given spans intersect.

Parameters

  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.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

This function returns EINA_TRUE if the given spans intersect, EINA_FALSE otherwise.

Referenced by eina_rectangles_intersect().

static Eina_Bool eina_rectangle_is_empty | ( | const Eina_Rectangle * | r | ) |
| inline static

Check if the given rectangle is empty.

Parameters

  r | The rectangle to check.

Returns
  EINA_TRUE if the rectangle is empty, EINA_FALSE otherwise.

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.

static void eina_rectangle_coords_from | ( | Eina_Rectangle * | r,
|  | int | x,
|  | int | y,
|  | int | w,
|  | int | h
| ) |  |
| inline static

Set the coordinates and size of the given rectangle.

Parameters

  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().

static Eina_Bool eina_rectangles_intersect | ( | const Eina_Rectangle * | r1,
|  | const Eina_Rectangle * | r2
| ) |  |
| inline static

Check if the given rectangles intersect.

Parameters

  r1 | The first rectangle.
  r2 | The second rectangle.

Returns
  EINA_TRUE if the rectangles intersect, EINA_FALSE otherwise.

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().

static Eina_Bool eina_rectangle_xcoord_inside | ( | const Eina_Rectangle * | r,
|  | int | x
| ) |  |
| inline static

Check if the given x-coordinate is in the rectangle .

Parameters

  r | The rectangle.
  x | The x coordinate.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

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().

static Eina_Bool eina_rectangle_ycoord_inside | ( | const Eina_Rectangle * | r,
|  | int | y
| ) |  |
| inline static

Check if the given y-coordinate is in the rectangle .

Parameters

  r | The rectangle.
  y | The y coordinate.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

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().

static Eina_Bool eina_rectangle_coords_inside | ( | const Eina_Rectangle * | r,
|  | int | x,
|  | int | y
| ) |  |
| inline static

Check if the given point is in the rectangle .

Parameters

  r | The rectangle.
  x | The x coordinate of the point.
  y | The y coordinate of the point.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

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.

static void eina_rectangle_union | ( | Eina_Rectangle * | dst,
|  | const Eina_Rectangle * | src
| ) |  |
| inline static

Get the union of two rectangles.

Parameters

  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.

static Eina_Bool eina_rectangle_intersection | ( | Eina_Rectangle * | dst,
|  | const Eina_Rectangle * | src
| ) |  |
| inline static

Get the intersection of two rectangles.

Parameters

  dst | The first rectangle.
  src | The second rectangle.

Returns
  EINA_TRUE if the rectangles intersect, EINA_FALSE otherwise.

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().

static Eina_Bool eina_rectangle_subtract | ( | Eina_Rectangle * | thiz,
|  | Eina_Rectangle * | other,
|  | Eina_Rectangle | out[4]
| ) |  |
| inline static

Subtract two rectangles.

Parameters

  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.

Parameters

  w | The width of the rectangle.
  h | The height of the rectangle.

Returns
  A newly allocated pool on success, `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.

Parameters

  rect | The rectangle.

Returns
  The pool of the given 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.

Parameters

  pool | The pool.
  w | The returned width.
  h | The returned height.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

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.

Parameters

  pool | The pool.

Returns
  The returned data.

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.

Parameters

  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.

Parameters

  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.

Parameters

  pool | The pool.

Returns
  The number of rectangles in 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.

Parameters

  pool | The pool.
  w | The width of the rectangle to request.
  h | The height of the rectangle to request.

Returns
  The requested rectangle on success, `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.

Parameters

  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.

Parameters

  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.

Returns
  The new rectangle on success, @ NULL otherwise.

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.

Parameters

  rect | The rectangle to free.

This function removes `rect` from the rectangles pool.

References eina_mempool_free().

Referenced by evas_render_updates_free().