69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
// 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
|