1cb93a386Sopenharmony_ci// Copyright 2021 Google LLC. 2cb93a386Sopenharmony_ci#ifndef Cursor_DEFINED 3cb93a386Sopenharmony_ci#define Cursor_DEFINED 4cb93a386Sopenharmony_ci#include <sstream> 5cb93a386Sopenharmony_ci#include "experimental/sktext/editor/Defaults.h" 6cb93a386Sopenharmony_ci#include "experimental/sktext/include/Text.h" 7cb93a386Sopenharmony_ci#include "experimental/sktext/include/Types.h" 8cb93a386Sopenharmony_ci#include "experimental/sktext/src/Paint.h" 9cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 10cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 11cb93a386Sopenharmony_ci#include "include/core/SkTime.h" 12cb93a386Sopenharmony_ci#include "tools/sk_app/Application.h" 13cb93a386Sopenharmony_ci#include "tools/sk_app/Window.h" 14cb93a386Sopenharmony_ci#include "tools/skui/ModifierKey.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_cinamespace skia { 17cb93a386Sopenharmony_cinamespace editor { 18cb93a386Sopenharmony_ci 19cb93a386Sopenharmony_ciusing namespace skia::text; 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ciclass Cursor { 22cb93a386Sopenharmony_cipublic: 23cb93a386Sopenharmony_ci static std::unique_ptr<Cursor> Make(); 24cb93a386Sopenharmony_ci Cursor(); 25cb93a386Sopenharmony_ci virtual ~Cursor() = default; 26cb93a386Sopenharmony_ci void place(SkPoint xy, SkSize size) { 27cb93a386Sopenharmony_ci if (size.width() < DEFAULT_CURSOR_WIDTH) { 28cb93a386Sopenharmony_ci size.fWidth = DEFAULT_CURSOR_WIDTH; 29cb93a386Sopenharmony_ci } 30cb93a386Sopenharmony_ci fXY = xy; 31cb93a386Sopenharmony_ci fSize = size; 32cb93a386Sopenharmony_ci } 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci void place(SkRect rect) { 35cb93a386Sopenharmony_ci if (rect.width() < DEFAULT_CURSOR_WIDTH) { 36cb93a386Sopenharmony_ci rect.fRight = rect.fLeft + DEFAULT_CURSOR_WIDTH; 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci fXY = SkPoint::Make(rect.fLeft, rect.fTop); 39cb93a386Sopenharmony_ci fSize = SkSize::Make(rect.width(), rect.height()); 40cb93a386Sopenharmony_ci } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci void blink() { 43cb93a386Sopenharmony_ci fBlink = !fBlink; 44cb93a386Sopenharmony_ci } 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci SkPoint getPosition() const { return fXY; } 47cb93a386Sopenharmony_ci SkPoint getCenterPosition() const { 48cb93a386Sopenharmony_ci return fXY + SkPoint::Make(0, fSize.fHeight / 2); 49cb93a386Sopenharmony_ci } 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci void paint(SkCanvas* canvas); 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ciprivate: 54cb93a386Sopenharmony_ci SkPaint fLinePaint; 55cb93a386Sopenharmony_ci SkPaint fRectPaint; 56cb93a386Sopenharmony_ci SkPoint fXY; 57cb93a386Sopenharmony_ci SkSize fSize; 58cb93a386Sopenharmony_ci bool fBlink; 59cb93a386Sopenharmony_ci}; 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci} // namespace editor 62cb93a386Sopenharmony_ci} // namespace skia 63cb93a386Sopenharmony_ci#endif // Cursor_DEFINED 64