AppFlowy/doc/EDITOR.md
2021-10-22 11:42:25 +08:00

75 lines
9.1 KiB
Markdown

```
// Widget Element RenderObject
//
// │ │
//
// ┌─────────────────────┐ │ ┌────────────────────────┐ │ ┌─────────────────────────┐
// │ RenderObjectWidget │◀────────────│ _TextLineElement │─────▶│ RenderEditableTextLine │
// └─────────────────────┘ │ └────────────────────────┘ │ └─────────────────────────┘
// △ │ │
// │ │ │ │ ┌─────────▽────────┐
// │ ▽ │RenderEditableBox │
// ┌────────────────────┐ │ ┌──────────────────────┐ │ └──────────────────┘
// ┌──│ EditableTextLine │ │ RenderObjectElement │ │
// │ └────────────────────┘ │ └──────────────────────┘ │ ▽
// │ ┌────────────┐
// │ │ │ │ RenderBox │
// │ └────────────┘
// │ body ┌────────────┐ │ │ │
// ├──────────▶│ TextLine │ ▽
// │ └────────────┘ │ │ ┌─────────────┐
// │ │RenderObject │
// │ ┌────────────┐ │ │ └─────────────┘
// └──────────▶│ Line │
// └────────────┘ │ │
//
// │ │ Layout, size, painting and
// Widget: holds the config for a Represents an actual comositing
// piece of UI. │ piece of UI │
//
//
```
```
// ┌────────────────────────┐ ┌──────────────────┐
// │ RawGestureDetector │─▶│ RenderEditor │──┐
// └────────────────────────┘ └──────────────────┘ │
// │
// 1. pass the gesture event │
// │
// │
// ┌───────────────────────────────────┐ │ ┌────────────────┐ ┌──────────────────┐ ┌──────────────────────────────┐
// │RawEditorStateTextInputClientMixin │──┼──▶│QuillController │◀──listen────│ RenderState │──▶│ _didChangeTextEditingValue │
// └───────────────────────────────────┘ │ └────────────────┘ └──────────────────┘ └──────────────────────────────┘
// │ │ ▲ │
// 1. pass the text input event │ │ │ ▼
// │ └─────2. notify change──────────┘ ┌─────────────────────────────────┐
// │ │ _onChangeTextEditingValue │
// ┌─────────────────────────────┐ │ └─────────────────────────────────┘
// │ RawEditorStateKeyboardMixin │───┘ │
// └─────────────────────────────┘ ▼
// ┌──────────────────────┐ Update the ScrollController's pos after
// 1. pass the keyboard cur/ delete/ shortcut event │ _showCaretOnScreen │ post frame
// └──────────────────────┘
// │
// ▼
// ┌──────────────────────┐
// │ Config cursor timer │
// └──────────────────────┘
// │
// ▼
// ┌───────────────────────┐ ┌───────────────────────────────────┐
// │ addPostFrameCallback │─▶│_updateOrDisposeSelectionOverlayIfN│
// └───────────────────────┘ └───────────────────────────────────┘
// │
// │
// ▼
// ┌────────────┐
// │ setState │ make the RenderState to rebuild
// └────────────┘
```