// Copyright 2021 Google LLC. #ifndef Cursor_DEFINED #define Cursor_DEFINED #include #include "experimental/sktext/editor/Defaults.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 Cursor { public: static std::unique_ptr Make(); Cursor(); virtual ~Cursor() = default; void place(SkPoint xy, SkSize size) { if (size.width() < DEFAULT_CURSOR_WIDTH) { size.fWidth = DEFAULT_CURSOR_WIDTH; } fXY = xy; fSize = size; } void place(SkRect rect) { if (rect.width() < DEFAULT_CURSOR_WIDTH) { rect.fRight = rect.fLeft + DEFAULT_CURSOR_WIDTH; } fXY = SkPoint::Make(rect.fLeft, rect.fTop); fSize = SkSize::Make(rect.width(), rect.height()); } void blink() { fBlink = !fBlink; } SkPoint getPosition() const { return fXY; } SkPoint getCenterPosition() const { return fXY + SkPoint::Make(0, fSize.fHeight / 2); } void paint(SkCanvas* canvas); private: SkPaint fLinePaint; SkPaint fRectPaint; SkPoint fXY; SkSize fSize; bool fBlink; }; } // namespace editor } // namespace skia #endif // Cursor_DEFINED