1cb93a386Sopenharmony_ci// Copyright 2021 Google LLC. 2cb93a386Sopenharmony_ci#ifndef Selection_DEFINED 3cb93a386Sopenharmony_ci#define Selection_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 Selection { 22cb93a386Sopenharmony_cipublic: 23cb93a386Sopenharmony_ci Selection(SkColor color) : fTextRanges(), fGlyphRanges(), fGlyphBoxes() { 24cb93a386Sopenharmony_ci fBackground.setColor(color); 25cb93a386Sopenharmony_ci fBackground.setAlphaf(0.3f); 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci void select(TextRange range, SkRect rect); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci void clear() { 31cb93a386Sopenharmony_ci fGlyphBoxes.clear(); 32cb93a386Sopenharmony_ci fTextRanges.clear(); 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci bool isEmpty() const { return fTextRanges.empty(); } 36cb93a386Sopenharmony_ci size_t count() const { return fTextRanges.size(); } 37cb93a386Sopenharmony_ci DecoratedBlock selected(size_t index) const { return DecoratedBlock(fTextRanges[index].width(), fForeground, fBackground); } 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci void paint(SkCanvas* canvas, SkPoint xy); 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ciprivate: 42cb93a386Sopenharmony_ci friend class EditableText; 43cb93a386Sopenharmony_ci SkPaint fForeground; 44cb93a386Sopenharmony_ci SkPaint fBackground; 45cb93a386Sopenharmony_ci std::vector<TextRange> fTextRanges; 46cb93a386Sopenharmony_ci std::vector<GlyphRange> fGlyphRanges; 47cb93a386Sopenharmony_ci std::vector<SkRect> fGlyphBoxes; 48cb93a386Sopenharmony_ci}; 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci} // namespace editor 51cb93a386Sopenharmony_ci} // namespace skia 52cb93a386Sopenharmony_ci#endif // Selection_DEFINED 53