1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_BASE_IME_COMPOSITION_TEXT_H_
6#define UI_BASE_IME_COMPOSITION_TEXT_H_
7
8#include "base/strings/string16.h"
9#include "ui/base/ime/composition_underline.h"
10#include "ui/base/ui_base_export.h"
11#include "ui/gfx/range/range.h"
12
13namespace ui {
14
15// A struct represents the status of an ongoing composition text.
16struct UI_BASE_EXPORT CompositionText {
17  CompositionText();
18  ~CompositionText();
19
20  bool operator==(const CompositionText& rhs) const {
21    if ((this->text != rhs.text) ||
22        (this->selection != rhs.selection) ||
23        (this->underlines.size() != rhs.underlines.size()))
24      return false;
25    for (size_t i = 0; i < this->underlines.size(); ++i) {
26      if (this->underlines[i] != rhs.underlines[i])
27        return false;
28    }
29    return true;
30  }
31
32  bool operator!=(const CompositionText& rhs) const {
33    return !(*this == rhs);
34  }
35
36  void Clear();
37
38  // Content of the composition text.
39  base::string16 text;
40
41  // Underline information of the composition text.
42  // They must be sorted in ascending order by their start_offset and cannot be
43  // overlapped with each other.
44  CompositionUnderlines underlines;
45
46  // Selection range in the composition text. It represents the caret position
47  // if the range length is zero. Usually it's used for representing the target
48  // clause (on Windows). Gtk doesn't have such concept, so background color is
49  // usually used instead.
50  gfx::Range selection;
51};
52
53}  // namespace ui
54
55#endif  // UI_BASE_IME_COMPOSITION_TEXT_H_
56