Tiler

Data Structures | Typedefs | Functions
Tiler
Eina » Data Types

## Data Structures
struct | Eina_Tile_Grid_Info
| Grid type of a tiler. More...

## Typedefs
typedef struct _Eina_Tiler | Eina_Tiler
| Tiler type.
typedef struct Eina_Tile_Grid_Info | Eina_Tile_Grid_Info
| Grid type of a tiler.
typedef struct _Eina_Tile_Grid_Slicer | Eina_Tile_Grid_Slicer

## Functions
Eina_Tiler * | eina_tiler_new (int w, int h)
| Creates a new tiler with `w` width and `h` height. More...
void | eina_tiler_free (Eina_Tiler *t)
| Frees a tiler. More...
void | eina_tiler_tile_size_set (Eina_Tiler *t, int w, int h)
| Sets the size of tiles for a tiler. More...
void | eina_tiler_area_size_set (Eina_Tiler *t, int w, int h)
| Change the size of the area covered by the tiler. More...
void | eina_tiler_area_size_get (const Eina_Tiler *t, int *w, int *h)
| Get the size of the area covered by the tiler. More...
void | eina_tiler_strict_set (Eina_Tiler *t, Eina_Bool strict)
| Define if we need to follow a strict grid of tile or a loosy one. More...
Eina_Bool | eina_tiler_empty (Eina_Tiler *t)
| Tell if a tiler is empty or not. More...
Eina_Bool | eina_tiler_rect_add (Eina_Tiler *t, const Eina_Rectangle *r)
| Adds a rectangle to a tiler. More...
void | eina_tiler_rect_del (Eina_Tiler *t, const Eina_Rectangle *r)
| Removes a rectangle from a tiler. More...
void | eina_tiler_clear (Eina_Tiler *t)
| Removes all rectangles from tiles. More...
Eina_Iterator * | eina_tiler_iterator_new (const Eina_Tiler *t)
| Create a iterator to access the tilers calculated rectangles. More...
Eina_Iterator * | eina_tile_grid_slicer_iterator_new (int x, int y, int w, int h, int tile_w, int tile_h)
| Creates a new Eina_Iterator that iterates over a list of tiles. More...
Eina_Bool | eina_tiler_union (Eina_Tiler *dst, Eina_Tiler *src)
| Gets the union of two tilers. More...
Eina_Bool | eina_tiler_subtract (Eina_Tiler *dst, Eina_Tiler *src)
| Subtracts two tilers. More...
Eina_Tiler * | eina_tiler_intersection (Eina_Tiler *t1, Eina_Tiler *t2)
| Gets the intersection of two tilers. More...
Eina_Bool | eina_tiler_equal (Eina_Tiler *t1, Eina_Tiler *t2)
| Gets whether two tilers are equal in rects or not. More...
static Eina_Bool | eina_tile_grid_slicer_next (Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect)
| Iterates over the tiles set by eina_tile_grid_slicer_setup(). More...
static Eina_Bool | eina_tile_grid_slicer_setup (Eina_Tile_Grid_Slicer *slc, int x, int y, int w, int h, int tile_w, int tile_h)
| Setup an Eina_Tile_Grid_Slicer struct. More...

## Detailed Description

Warning
  This is a very low level tool, in most situations(for example if you're using evas) you won't need this.

# Basic usage

Eina_Tiler is a tool to facilitate calculations of which areas are damaged and thus need to be re-rendered. The basic usage of Eina_Tiler is to give it the size of your canvas and a set of rectangular areas that need re-rendering, from that and using heuristics it'll tell you an efficient way to re-render in the form of a set of non-overlapping rectangles that covers the whole area that needs re-rendering.

The following is pseudo-code showing some simple use of Eina_Tiler:

tiler = eina_tiler_new(MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT);
EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering, l, rect)
eina_tiler_add(tiler, rect);
itr = eina_tiler_iterator_new(tiler);
EINA_ITERATOR_FOREACH(itr, rect)
my_function_that_repaints_areas_of_the_canvas(rect);

See also
  eina_tiler_new()
  eina_tiler_rect_add()
  eina_tiler_iterator_new()

Warning
  There are no guarantees that this will be the most efficient way to re-render for any particular case.

# Grid Slicer

Grid slicer and Eina_Tiler are usually used together, that is however not necessary, they can be used independently. Grid slicer provides an easy API to divide an area in tiles which is useful in certain applications to divide the area that will be rendered into tiles. It's customary to, then create one Eina_Tiler for each tile.

The following is pseudo-code showing a very simplified use of grid slicer together with Eina_Tiler:

itr = eina_tile_grid_slicer_iterator_new(0, 0, MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
EINA_ITERATOR_FOREACH(itr, grid_info)
{
tiler = eina_tiler_new(grid_info->rect.w, grid_info->rect.w);
EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering_in_this_tile, l, rect)
eina_tiler_add(tiler, rect);
itr = eina_tiler_iterator_new(tiler);
EINA_ITERATOR_FOREACH(itr, rect)
my_function_that_repaints_areas_of_the_canvas(rect);
}

See also
  eina_tiler_new()
  eina_tiler_rect_add()
  eina_tile_grid_slicer_setup()
  eina_tile_grid_slicer_next()
  eina_tile_grid_slicer_iterator_new()

## Function Documentation

## ◆ eina_tiler_new()

Eina_Tiler* eina_tiler_new | ( | int | w,
|  | int | h
| ) |  |

Creates a new tiler with `w` width and `h` height.

Parameters

  w | Width of the tiler
  h | Height of the tiler

Returns
  The newly created tiler

See also
  eina_tiler_free()

Referenced by eina_tiler_intersection().

## ◆ eina_tiler_free()

void eina_tiler_free | ( | Eina_Tiler * | t | ) |

Frees a tiler.

Parameters

  t | The tiler to free.

This function frees `t`. It does not free the memory allocated for the elements of `t`.

Referenced by eina_tiler_intersection().

## ◆ eina_tiler_tile_size_set()

void eina_tiler_tile_size_set | ( | Eina_Tiler * | t,
|  | int | w,
|  | int | h
| ) |  |

Sets the size of tiles for a tiler.

Parameters

  t | The tiler whose tile size will be set.
  w | Width of the tiles.
  h | Height of the tiles.

Warning
  `w` and `h` must be greater than zero, otherwise tile size won't be changed.
  Tile size is not used!

## ◆ eina_tiler_area_size_set()

void eina_tiler_area_size_set | ( | Eina_Tiler * | t,
|  | int | w,
|  | int | h
| ) |  |

Change the size of the area covered by the tiler.

Parameters

  t | The tiler whose area size will be set.
  w | Width of the area.
  h | Height of the area.

Since
  1.8

Warning
  Must clear the tiler before changing its size.

## ◆ eina_tiler_area_size_get()

void eina_tiler_area_size_get | ( | const Eina_Tiler * | t,
|  | int * | w,
|  | int * | h
| ) |  |

Get the size of the area covered by the tiler.

Parameters

  t | The tiler whose area size will be fetched.
  w | Width of the area.
  h | Height of the area.

Since
  1.8

## ◆ eina_tiler_strict_set()

void eina_tiler_strict_set | ( | Eina_Tiler * | t,
|  | Eina_Bool | strict
| ) |  |

Define if we need to follow a strict grid of tile or a loosy one.

Parameters

  t | The tiler to apply the strict rules to.
  strict | Define if it will be strict or loosy

By default it will be loosy.

Since
  1.8

## ◆ eina_tiler_empty()

Eina_Bool eina_tiler_empty | ( | Eina_Tiler * | t | ) |

Tell if a tiler is empty or not.

Parameters

  t | The tiler to apply the strict rules to.

Returns
  EINA_TRUE when empty, EINA_FALSE when not.

Since
  1.8

References EINA_TRUE.

Referenced by eina_tiler_intersection().

## ◆ eina_tiler_rect_add()

Eina_Bool eina_tiler_rect_add | ( | Eina_Tiler * | t,
|  | const Eina_Rectangle * | r
| ) |  |

Adds a rectangle to a tiler.

Parameters

  t | The tiler in which to add a container.
  r | The rectangle to be added.

Returns
  EINA_TRUE on success, EINA_FALSE on failure.

See also
  eina_tiler_rect_del()

## ◆ eina_tiler_rect_del()

void eina_tiler_rect_del | ( | Eina_Tiler * | t,
|  | const Eina_Rectangle * | r
| ) |  |

Removes a rectangle from a tiler.

Parameters

  t | The tiler in which to add a container.
  r | The rectangle to be removed.

See also
  eina_tiler_rect_add()
  eina_tiler_clear()

## ◆ eina_tiler_clear()

void eina_tiler_clear | ( | Eina_Tiler * | t | ) |

Removes all rectangles from tiles.

Parameters

  t | The tiler to clear.

See also
  eina_tiler_rect_del()

## ◆ eina_tiler_iterator_new()

Eina_Iterator* eina_tiler_iterator_new | ( | const Eina_Tiler * | t | ) |

Create a iterator to access the tilers calculated rectangles.

Parameters

  t | The tiler to iterate over.

Returns
  A iterator containing Eina_Rectangle.

Referenced by eina_tiler_equal(), eina_tiler_intersection(), eina_tiler_subtract(), and eina_tiler_union().

## ◆ eina_tile_grid_slicer_iterator_new()

Eina_Iterator* eina_tile_grid_slicer_iterator_new | ( | int | x,
|  | int | y,
|  | int | w,
|  | int | h,
|  | int | tile_w,
|  | int | tile_h
| ) |  |

Creates a new Eina_Iterator that iterates over a list of tiles.

Parameters

  x | X axis coordinate.
  y | Y axis coordinate.
  w | width.
  h | height.
  tile_w | tile width.
  tile_h | tile height.

Returns
  A pointer to the Eina_Iterator. `NULL` on failure.

The region defined by x, y, w, h will be divided in to a grid of tiles of width tile_w and height `tile_h`, the returned iterator will iterate over every tile in the grid having as its data a Eina_Tile_Grid_Info.

Note
  This is a convenience function, iterating over the returned iterator is equivalent to calling eina_tile_grid_slicer_setup() and calling eina_tile_grid_slicer_next() untill it returns EINA_FALSE.

References EINA_MAGIC_SET, eina_tile_grid_slicer_setup(), FUNC_ITERATOR_FREE, and FUNC_ITERATOR_NEXT.

## ◆ eina_tiler_union()

Eina_Bool eina_tiler_union | ( | Eina_Tiler * | dst,
|  | Eina_Tiler * | src
| ) |  |

Gets the union of two tilers.

Parameters

  dst | The first tiler, will store the result.
  src | The second tiler.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

This fuction get the union of tilers `dst` and `src`. The result is stored in `dst`. It returns EINA_TRUE if it succeeds.

Since
  1.11

References EINA_FALSE, EINA_ITERATOR_FOREACH, eina_iterator_free(), eina_tiler_iterator_new(), EINA_TRUE, _Eina_Rectangle::h, and _Eina_Rectangle::w.

## ◆ eina_tiler_subtract()

Eina_Bool eina_tiler_subtract | ( | Eina_Tiler * | dst,
|  | Eina_Tiler * | src
| ) |  |

Subtracts two tilers.

Parameters

  dst | The first tiler, will store the result.
  src | The second tiler.

Returns
  EINA_TRUE on success, EINA_FALSE otherwise.

This fuction subtracts two tilers `dst` and `src`. The result is stored in `dst`. It returns EINA_TRUE if it succeeds.

Since
  1.11

References EINA_FALSE, EINA_ITERATOR_FOREACH, eina_iterator_free(), eina_tiler_iterator_new(), EINA_TRUE, _Eina_Rectangle::h, and _Eina_Rectangle::w.

## ◆ eina_tiler_intersection()

Eina_Tiler* eina_tiler_intersection | ( | Eina_Tiler * | t1,
|  | Eina_Tiler * | t2
| ) |  |

Gets the intersection of two tilers.

Parameters

  t1 | The first tile.
  t2 | The second tiler.

Returns
  A pointer of intersection result. `NULL` if intersection doesn't exist.

This fuction gest intersection of two tilers `t1` and `t2`. It returns a pointer of result if intersection of two tilers exists., otherwise returns NULL.

Since
  1.11

References eina_iterator_free(), eina_iterator_next(), eina_rectangles_intersect(), eina_tiler_empty(), eina_tiler_free(), eina_tiler_iterator_new(), eina_tiler_new(), _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.

## ◆ eina_tiler_equal()

Eina_Bool eina_tiler_equal | ( | Eina_Tiler * | t1,
|  | Eina_Tiler * | t2
| ) |  |

Gets whether two tilers are equal in rects or not.

Parameters

  t1 | The first tiler.
  t2 | The second tiler.

Returns
  EINA_TRUE is equal, EINA_FALSE is unequal.

This fuction gets result of comparison for `t1` and `t2`. It returns EINA_TRUE if tilers are equal.

Since
  1.11

References EINA_FALSE, eina_iterator_free(), eina_iterator_next(), EINA_MAGIC_NONE, EINA_MAGIC_SET, eina_rectangles_intersect(), eina_tile_grid_slicer_next(), eina_tiler_iterator_new(), EINA_TRUE, _Eina_Rectangle::h, _Eina_Rectangle::w, _Eina_Rectangle::x, and _Eina_Rectangle::y.

## ◆ eina_tile_grid_slicer_next()

static Eina_Bool eina_tile_grid_slicer_next | ( | Eina_Tile_Grid_Slicer * | slc,
|  | const Eina_Tile_Grid_Info ** | rect
| ) |  |
| inlinestatic

Iterates over the tiles set by eina_tile_grid_slicer_setup().

Parameters

  slc | Pointer to an Eina_Tile_Grid_Slicer struct.
  rect | Pointer to a struct Eina_Tile_Grid_Info *.

Returns
  EINA_TRUE if the current rect is valid. EINA_FALSE if there is no more rects to iterate over (and thus the current one isn't valid).

This functions iterates over each Eina_Tile_Grid_Info *rect of the grid. eina_tile_grid_slicer_setup() must be called first, and *rect is only valid if this function returns EINA_TRUE. Its content shouldn't be modified.

Note
  Consider using eina_tile_grid_slicer_iterator_new() instead.

Referenced by eina_tiler_equal().

## ◆ eina_tile_grid_slicer_setup()

static Eina_Bool eina_tile_grid_slicer_setup | ( | Eina_Tile_Grid_Slicer * | slc,
|  | int | x,
|  | int | y,
|  | int | w,
|  | int | h,
|  | int | tile_w,
|  | int | tile_h
| ) |  |
| inlinestatic

Setup an Eina_Tile_Grid_Slicer struct.

Parameters

  slc | Pointer to an Eina_Tile_Grid_Slicer struct.
  x | X axis coordinate.
  y | Y axis coordinate.
  w | width.
  h | height.
  tile_w | tile width.
  tile_h | tile height.

Returns
  A pointer to the Eina_Iterator. `NULL` on failure.

The region defined by x, y, w, h will be divided in to a grid of tiles of width tile_w and height `tile_h`, `slc` can then be used with eina_tile_grid_slicer_next() to access each tile.

Note
  Consider using eina_tile_grid_slicer_iterator_new() instead.

Referenced by eina_tile_grid_slicer_iterator_new().