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