blob: 6df52fb334aa6fbb81222b515655fb023cf4c411 [file] [log] [blame]
// Copyright 2021 Google LLC.
#ifndef Editor_DEFINED
#define Editor_DEFINED
#include <sstream>
#include "experimental/sktext/editor/Cursor.h"
#include "experimental/sktext/editor/Defaults.h"
#include "experimental/sktext/editor/Mouse.h"
#include "experimental/sktext/editor/Selection.h"
#include "experimental/sktext/editor/Texts.h"
#include "experimental/sktext/include/Text.h"
#include "experimental/sktext/include/Types.h"
#include "experimental/sktext/src/Paint.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkSurface.h"
#include "include/core/SkTime.h"
#include "tools/sk_app/Application.h"
#include "tools/sk_app/Window.h"
#include "tools/skui/ModifierKey.h"
namespace skia {
namespace editor {
using namespace skia::text;
class Editor : public sk_app::Window::Layer {
public:
static std::unique_ptr<Editor> Make(std::u16string text, SkSize size);
static std::unique_ptr<Editor> MakeDemo(SkScalar width, SkScalar height);
Editor(std::u16string text, SkSize size);
~Editor() override = default;
void paint(SkCanvas* canvas);
void blink() { fCursor->blink(); }
void onResize(int width, int height) override;
private:
void update();
void onAttach(sk_app::Window* w) override { fParent = w; }
void onPaint(SkSurface* surface) override;
bool onMouse(int x, int y, skui::InputState state, skui::ModifierKey modifiers) override;
bool onKey(skui::Key, skui::InputState, skui::ModifierKey) override;
bool onChar(SkUnichar c, skui::ModifierKey modifier) override;
void invalidate() { if (fParent) { fParent->inval(); } }
bool moveCursor(skui::Key key);
bool insertCodepoint(SkUnichar unichar);
bool deleteElement(skui::Key key);
std::unique_ptr<EditableText> fEditableText;
std::unique_ptr<DynamicText> fStatus;
std::unique_ptr<Cursor> fCursor;
std::unique_ptr<Mouse> fMouse;
sk_app::Window* fParent;
int fWidth;
int fHeight;
PositionType fDefaultPositionType;
bool fInsertMode;
};
} // namespace editor
} // namespace skia
#endif // Editor_DEFINED