ad5944cf8d
Insert/Delete/Backspace Status line Change-Id: I38727ddb86bf20cdd6c64363c33ffda03ab3c2c7 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/431179 Reviewed-by: Julia Lavrova <jlavrova@google.com> Commit-Queue: Julia Lavrova <jlavrova@google.com>
72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
// Copyright 2019 Google LLC.
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
// Proof of principle of a text editor written with Skia & SkShaper.
|
|
// https://bugs.skia.org/9020
|
|
|
|
#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"
|
|
|
|
#include "experimental/sktext/editor/Editor.h"
|
|
|
|
#include "third_party/icu/SkLoadICU.h"
|
|
|
|
#include <fstream>
|
|
#include <memory>
|
|
|
|
using namespace skia::text;
|
|
namespace skia {
|
|
namespace editor {
|
|
|
|
struct EditorApplication : public sk_app::Application {
|
|
std::unique_ptr<sk_app::Window> fWindow;
|
|
std::unique_ptr<Editor> fLayer;
|
|
double fNextTime = -DBL_MAX;
|
|
|
|
EditorApplication(std::unique_ptr<sk_app::Window> win) : fWindow(std::move(win)) {}
|
|
|
|
bool init(const char* path) {
|
|
fWindow->attach(sk_app::Window::kRaster_BackendType);
|
|
|
|
fLayer = Editor::MakeDemo(fWindow->width(), fWindow->height());
|
|
|
|
fWindow->pushLayer(fLayer.get());
|
|
fWindow->setTitle("Editor");
|
|
|
|
fLayer->onResize(fWindow->width(), fWindow->height());
|
|
fWindow->show();
|
|
return true;
|
|
}
|
|
~EditorApplication() override { fWindow->detach(); }
|
|
|
|
void onIdle() override {
|
|
double now = SkTime::GetNSecs();
|
|
if (now >= fNextTime) {
|
|
constexpr double kHalfPeriodNanoSeconds = 0.5 * 1e9;
|
|
fNextTime = now + kHalfPeriodNanoSeconds;
|
|
fLayer->blink();
|
|
fWindow->inval();
|
|
}
|
|
}
|
|
};
|
|
} // namespace text
|
|
} // namespace skia
|
|
|
|
sk_app::Application* sk_app::Application::Create(int argc, char** argv, void* dat) {
|
|
if (!SkLoadICU()) {
|
|
SK_ABORT("SkLoadICU failed.");
|
|
}
|
|
std::unique_ptr<sk_app::Window> win(sk_app::Window::CreateNativeWindow(dat));
|
|
if (!win) {
|
|
SK_ABORT("CreateNativeWindow failed.");
|
|
}
|
|
std::unique_ptr<skia::editor::EditorApplication> app(new skia::editor::EditorApplication(std::move(win)));
|
|
(void)app->init(argc > 1 ? argv[1] : nullptr);
|
|
return app.release();
|
|
}
|