1cb93a386Sopenharmony_ci// Copyright 2021 Google LLC. 2cb93a386Sopenharmony_ci#ifndef Editor_DEFINED 3cb93a386Sopenharmony_ci#define Editor_DEFINED 4cb93a386Sopenharmony_ci#include <sstream> 5cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Cursor.h" 6cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Defaults.h" 7cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Mouse.h" 8cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Selection.h" 9cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Texts.h" 10cb93a386Sopenharmony_ci#include "experimental/sktext/include/Text.h" 11cb93a386Sopenharmony_ci#include "experimental/sktext/include/Types.h" 12cb93a386Sopenharmony_ci#include "experimental/sktext/src/Paint.h" 13cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 14cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 15cb93a386Sopenharmony_ci#include "include/core/SkTime.h" 16cb93a386Sopenharmony_ci#include "tools/sk_app/Application.h" 17cb93a386Sopenharmony_ci#include "tools/sk_app/Window.h" 18cb93a386Sopenharmony_ci#include "tools/skui/ModifierKey.h" 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cinamespace skia { 21cb93a386Sopenharmony_cinamespace editor { 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ciusing namespace skia::text; 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ciclass Editor : public sk_app::Window::Layer { 26cb93a386Sopenharmony_cipublic: 27cb93a386Sopenharmony_ci static std::unique_ptr<Editor> Make(std::u16string text, SkSize size); 28cb93a386Sopenharmony_ci static std::unique_ptr<Editor> MakeDemo(SkScalar width, SkScalar height); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci Editor(std::u16string text, SkSize size); 31cb93a386Sopenharmony_ci ~Editor() override = default; 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci void paint(SkCanvas* canvas); 34cb93a386Sopenharmony_ci void blink() { fCursor->blink(); } 35cb93a386Sopenharmony_ci void onResize(int width, int height) override; 36cb93a386Sopenharmony_ciprivate: 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci void update(); 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci void onAttach(sk_app::Window* w) override { fParent = w; } 41cb93a386Sopenharmony_ci void onPaint(SkSurface* surface) override; 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci bool onMouse(int x, int y, skui::InputState state, skui::ModifierKey modifiers) override; 44cb93a386Sopenharmony_ci bool onKey(skui::Key, skui::InputState, skui::ModifierKey) override; 45cb93a386Sopenharmony_ci bool onChar(SkUnichar c, skui::ModifierKey modifier) override; 46cb93a386Sopenharmony_ci void invalidate() { if (fParent) { fParent->inval(); } } 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci bool moveCursor(skui::Key key); 49cb93a386Sopenharmony_ci bool insertCodepoint(SkUnichar unichar); 50cb93a386Sopenharmony_ci bool deleteElement(skui::Key key); 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci std::unique_ptr<EditableText> fEditableText; 53cb93a386Sopenharmony_ci std::unique_ptr<DynamicText> fStatus; 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci std::unique_ptr<Cursor> fCursor; 56cb93a386Sopenharmony_ci std::unique_ptr<Mouse> fMouse; 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci sk_app::Window* fParent; 59cb93a386Sopenharmony_ci int fWidth; 60cb93a386Sopenharmony_ci int fHeight; 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci PositionType fDefaultPositionType; 63cb93a386Sopenharmony_ci bool fInsertMode; 64cb93a386Sopenharmony_ci}; 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci} // namespace editor 67cb93a386Sopenharmony_ci} // namespace skia 68cb93a386Sopenharmony_ci#endif // Editor_DEFINED 69