# agera::display progress track
## Geometry
* [x] `Vector2d`
* [x] `Matrix2d`
## Rendering
Rendering a display object takes parent inherited fields such as alpha and returns a `BitmapData`. It is not decided yet if it should be done in the GPU or CPU.
## Colors
`agera::display` uses `agera::util::Color` to represent colors, which additionally includes an `alpha` channel.
## DisplayObject
* [ ] Alpha
* [ ] Position
* [ ] Skew
* [ ] Filters
- Blur, color multiplier, shadow
* [ ] Scale (a non-uniform `Vector2d`)
* [ ] Rotation (`rotation_degrees()` and `rotation_radians()` as well as `set_`)
* [ ] Rotation X/Y/Z for 3D rotation
* [ ] Registration point (`registration_point()`, `set_registration_point()`)
- Each component of the point must be in the range 0 to 1. A value of 0.5 means center.
* [ ] `transform_matrix`
- If set, defines the transformation matrix for this display object, overriding all other transformation fields (position, rotation, scale, skew).
## Controls
* [ ] ?
## Focusable
* [ ] ?
## TextField
* Crates in use
- https://crates.io/crates/htmlentity
* [ ] `text`
* [ ] Getter
* [ ] Setter
* [ ] `html`
* [ ] Getter
* [ ] Setter
* [ ] `line_count`
* [ ] Selection
* [ ] `selectable`
* [ ] `selection_begin_index`
* [ ] `selection_end_index`
* [ ] Editable
## Shape
`Shape` should support fill and stroke operations. Additionally, text filling should be supported.
```rust
use agera::{common::*, display::*, geom::*, text::*};
let shape = Shape::new();
shape.clear()
.begin_fill("green".parse().unwrap())
.draw(Rectangle(Vector2d(0.0, 0.0), Vector2d(100.0, 100.0)))
.draw(Circle { radius: 10.0, position: Vector2d(0.0, 0.0) })
.move_to(position)
.end_fill();
```
* [ ] `shape.clear()`
- [ ] Clear graphics commands
- [ ] Clear fill and line style settings
* [ ] `shape.draw_round_rect(position, rectangle, corner_radius)`
* [ ] `shape.draw_graphics_data(graphics_data)` (takes a `Vec<GraphicsData>`)
* [ ] `Draw<T>` trait with a `.draw()` method
- [ ] `Draw<Rectangle>`
- [ ] `Draw<Circle>`
- [ ] `Draw<Ellipse>`
* [ ] Gradient line style (`shape.line_gradient_style(...)`)
- [ ] Linear
- [ ] Radial
* [ ] Solid line style (`shape.line_style(...)`)
* [ ] Gradient fill (`shape.begin_gradient_fill(...)`)
- [ ] Linear
- [ ] Radial
* [ ] Bitmap fill (`shape.begin_bitmap_fill(...)`)
* [ ] Solid fill (`shape.begin_fill(...)`)
* [ ] `shape.cubic_curve_to(control_1_position, control_2_position, anchor_position)`
* [ ] `shape.curve_to(control_position, anchor_position)`
* [ ] `GraphicsData`
- An enumeration consisting of command variants resulting from line style, fill style and path calls in `Shape`.
* [ ] `GraphicsData::from_svg_contents(xml_string)`
- Returns `Result<Vec<GraphicsData>, SvgParseError>`
- [ ] `Gradient`
- Enumeration consisting of `Linear` and `Radial` variants, with common methods that applies to both variants such as `colors()` and `ratios()`.
## Bitmap
* [ ] ?