| # Web-specific coding conventions and terminology |
| |
| Here you will find various naming and structural conventions used in the Web |
| engine code. This is not a code style guide. For code style refer to |
| [Flutter's style guide][1]. This document does not apply outside the `web_ui` |
| directory. |
| |
| ## CanvasKit Renderer |
| |
| All code specific to the CanvasKit renderer lives in `lib/src/engine/canvaskit`. |
| |
| CanvasKit bindings should use the exact names defined in CanvasKit's JavaScript |
| API, even if it violates Flutter's style guide, such as function names that |
| start with a capital letter (e.g. "MakeSkVertices"). This makes it easier to find |
| the relevant code in Skia's source code. CanvasKit bindings should all go in |
| the `canvaskit_api.dart` file. |
| |
| Files and directories should use all-lower-case "canvaskit", without |
| capitalization or punctuation (such as "canvasKit", "canvas-kit", "canvas_kit"). |
| This is consistent with Skia's conventions. |
| |
| Variable, function, method, and class names should use camel case, i.e. |
| "canvasKit", "CanvasKit". |
| |
| In documentation (doc comments, flutter.dev website, markdown files, |
| blog posts, etc) refer to Flutter's usage of CanvasKit as "CanvasKit renderer" |
| (to avoid confusion with CanvasKit as the standalone library, which can be used |
| without Flutter). |
| |
| Classes that wrap CanvasKit classes should replace the `Sk` class prefix with |
| `Ck` (which stands for "CanvasKit"), e.g. `CkPaint` wraps `SkPaint`, `CkImage` |
| wraps `SkImage`. |
| |
| ## HTML Renderer |
| |
| All code specific to the HTML renderer lives in `lib/src/engine/html`. |
| |
| In documentation (doc comments, flutter.dev website, markdown files, |
| blog posts, etc) refer to Flutter's HTML implementation as "HTML renderer". We |
| include SVG, CSS, and Canvas 2D under the "HTML" umbrella. |
| |
| The implementation of the layer system uses the term "surface" to refer to |
| layers. We rely on persisting the DOM information across frames to gain |
| efficiency. Each concrete implementation of the `Surface` class should start |
| with the prefix `Persisted`, e.g. `PersistedOpacity`, `PersistedPicture`. |
| |
| ## Semantics |
| |
| The semantics (accessibility) code is shared between CanvasKit and HTML. All |
| semantics code lives in `lib/src/engine/semantics`. |
| |
| ## Text editing |
| |
| Text editing code is shared between CanvasKit and HTML, and it lives in |
| `lib/src/engine/text_editing`. |
| |
| ## Common utilities |
| |
| Small common utilities do not need dedicated directories. It is OK to put all |
| such utilities in `lib/src/engine` (see, for example, `alarm_clock.dart`). |
| |
| [1]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo |