| SKY SDK |
| ======== |
| |
| Sky and Sky's SDK are designed as layered frameworks, where each layer |
| depends on the ones below it but could be replaced wholesale. |
| |
| The bottom-most layer is the Sky Platform, which is exposed to Dart |
| code as [various ```dart:``` packages](https://api.dartlang.org/), |
| including ```dart:sky```. |
| |
| The [base/](base/) directory contains libraries that extend these core |
| APIs to provide base classes for tree structures |
| ([base/node.dart](base/node.dart)), hit testing |
| ([base/hit_test.dart](base/hit_test.dart)), debugging |
| ([base/debug.dart](base/debug.dart)), and task scheduling |
| ([base/scheduler.dart](base/scheduler.dart)). |
| |
| Above this are the files in the [painting/](painting/) directory, |
| which provide APIs related to drawing graphics, and in the |
| [animation/](animation/) directory, which provide core primitives for |
| animating values. |
| |
| Layout primitives are provided in the next layer, found in the |
| [rendering/](rendering/) directory. They use ```dart:sky``` and the |
| APIs exposed in painting/ to provide a retained-mode layout and |
| rendering model for applications or documents. |
| |
| Widgets are provided by the files in the [widgets/](widgets/) |
| directory, using a reactive framework. They use data given in the |
| [theme/](theme/) directory to select styles consistent with Material |
| Design. |
| |
| Text input widgets are layered on this mechanism and can be found in |
| the [editing/](editing/) directory. |
| |
| Alongside the above is the [mojo/](mojo/) directory, which contains |
| anything that uses the Mojo IPC mechanism, typically as part of |
| wrapping host operating system features. Some of those Host APIs are |
| implemented in the host system's preferred language. |
| |
| Here is a diagram summarising all this: |
| |
| +-----------------------------+ ------ |
| | YOUR APP | |
| | +--------------------+--+ |
| | | editing/ | | |
| | +--+-------------------++ | |
| | | widgets/ (theme/) | | |
| | ++---------------------++ | Dart |
| | | rendering/ | | |
| +-+---------+------------+ | |
| | painting/ | animation/ | | |
| +---------------+--------+ | |
| | base/ | mojo/ | |
| +------------+--+-+----+------+ ------- |
| | dart:sky | | | Host | |
| +--------+---+ | | APIs | C++ |
| | Skia | Dart | +------+ ObjC |
| +--------+--------+ | Java |
| | Mojo | |
| +-----------------------------+ ------- |
| | Host Operating System | C/C++ |
| +-----------------------------+ ------- |
| |
| TODO(ianh): document dart:sky and the Host APIs somewhere |
| |
| Sky Engine API |
| -------------- |
| |
| The Sky engine API provides efficient, immutable wrappers |
| for common Skia C++ types, notably Color, Point, and Rect. |
| Because these wrappers are immutable, they are suitable |
| for storage in final member variables of widget classes. |
| More complex Skia wrappers such as Paint and RRect are |
| mutable, to more closely match the Skia APIs. We recommend |
| constructing wrappers for complex Skia classes dynamically |
| during the painting phase based on the underlying state of |
| the widget. |