Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2c9e1a9

Browse files
committed
Move SetComposingLength to TextRange::set_*
Adds set_base, set_extent, set_start, set_end methods to TextRange.
1 parent df5568d commit 2c9e1a9

File tree

4 files changed

+91
-24
lines changed

4 files changed

+91
-24
lines changed

shell/platform/common/cpp/text_input_model.cc

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void TextInputModel::UpdateComposingText(const std::string& composing_text) {
7878
}
7979
DeleteSelected();
8080
text_.replace(composing_range_.start(), composing_range_.length(), text);
81-
SetComposingLength(text.length());
81+
composing_range_.set_end(composing_range_.start() + text.length());
8282
selection_ = TextRange(composing_range_.end());
8383
}
8484

@@ -110,16 +110,6 @@ bool TextInputModel::DeleteSelected() {
110110
return true;
111111
}
112112

113-
void TextInputModel::SetComposingLength(size_t length) {
114-
if (composing_range_.reversed()) {
115-
size_t extent = composing_range_.extent();
116-
composing_range_ = TextRange(extent + length, extent);
117-
} else {
118-
size_t base = composing_range_.base();
119-
composing_range_ = TextRange(base, base + length);
120-
}
121-
}
122-
123113
void TextInputModel::AddCodePoint(char32_t c) {
124114
if (c <= 0xFFFF) {
125115
AddText(std::u16string({static_cast<char16_t>(c)}));
@@ -140,7 +130,7 @@ void TextInputModel::AddText(const std::u16string& text) {
140130
// Delete the current composing text, set the cursor to composing start.
141131
text_.erase(composing_range_.start(), composing_range_.length());
142132
selection_ = TextRange(composing_range_.start());
143-
SetComposingLength(text.length());
133+
composing_range_.set_end(composing_range_.start() + text.length());
144134
}
145135
size_t position = selection_.position();
146136
text_.insert(position, text);
@@ -164,7 +154,7 @@ bool TextInputModel::Backspace() {
164154
text_.erase(position - count, count);
165155
selection_ = TextRange(position - count);
166156
if (composing_) {
167-
SetComposingLength(composing_range_.length() - count);
157+
composing_range_.set_end(composing_range_.end() - count);
168158
}
169159
return true;
170160
}
@@ -181,7 +171,7 @@ bool TextInputModel::Delete() {
181171
int count = IsLeadingSurrogate(text_.at(position)) ? 2 : 1;
182172
text_.erase(position, count);
183173
if (composing_) {
184-
SetComposingLength(composing_range_.length() - count);
174+
composing_range_.set_end(composing_range_.end() - count);
185175
}
186176
return true;
187177
}
@@ -224,7 +214,7 @@ bool TextInputModel::DeleteSurrounding(int offset_from_cursor, int count) {
224214

225215
// Adjust composing range.
226216
if (composing_) {
227-
SetComposingLength(composing_range_.length() - deleted_length);
217+
composing_range_.set_end(composing_range_.end() - deleted_length);
228218
}
229219
return true;
230220
}

shell/platform/common/cpp/text_input_model.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,6 @@ class TextInputModel {
172172
// reset to the start of the selected range.
173173
bool DeleteSelected();
174174

175-
// Adjusts the composing range to |length|.
176-
void SetComposingLength(size_t length);
177-
178175
// Returns the currently editable text range.
179176
//
180177
// In composing mode, returns the composing range; otherwise, returns a range

shell/platform/common/cpp/text_range.h

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,51 @@ class TextRange {
2121

2222
virtual ~TextRange() = default;
2323

24-
// Returns the base position of the range.
24+
// The base position of the range.
2525
size_t base() const { return base_; }
2626

27-
// Returns the extent position of the range.
27+
// Sets the base position of the range.
28+
void set_base(size_t pos) { base_ = pos; }
29+
30+
// The extent position of the range.
2831
size_t extent() const { return extent_; }
2932

30-
// Returns the lesser of the base and extent positions.
33+
// Sets the extent position of the range.
34+
void set_extent(size_t pos) { extent_ = pos; }
35+
36+
// The lesser of the base and extent positions.
3137
size_t start() const { return std::min(base_, extent_); }
3238

33-
// Returns the greater of the base and extent positions.
39+
// Sets the start position of the range.
40+
void set_start(size_t pos) {
41+
if (base_ <= extent_) {
42+
base_ = pos;
43+
} else {
44+
extent_ = pos;
45+
}
46+
}
47+
48+
// The greater of the base and extent positions.
3449
size_t end() const { return std::max(base_, extent_); }
3550

36-
// Returns the position of a collapsed range.
51+
// Sets the end position of the range.
52+
void set_end(size_t pos) {
53+
if (base_ <= extent_) {
54+
extent_ = pos;
55+
} else {
56+
base_ = pos;
57+
}
58+
}
59+
60+
// The position of a collapsed range.
3761
//
3862
// Asserts that the range is of length 0.
3963
size_t position() const {
4064
FML_DCHECK(base_ == extent_);
4165
return extent_;
4266
}
4367

44-
// Returns the length of the range.
68+
// The length of the range.
4569
size_t length() const { return end() - start(); }
4670

4771
// Returns true if the range is of length 0.

shell/platform/common/cpp/text_range_unittests.cc

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,62 @@ TEST(TextRange, TextRangeFromReversedRange) {
5050
EXPECT_FALSE(range.collapsed());
5151
}
5252

53+
TEST(TextRange, SetBase) {
54+
TextRange range(3, 7);
55+
range.set_base(4);
56+
EXPECT_EQ(range.base(), size_t(4));
57+
EXPECT_EQ(range.extent(), size_t(7));
58+
}
59+
60+
TEST(TextRange, SetBaseReversed) {
61+
TextRange range(7, 3);
62+
range.set_base(5);
63+
EXPECT_EQ(range.base(), size_t(5));
64+
EXPECT_EQ(range.extent(), size_t(3));
65+
}
66+
67+
TEST(TextRange, SetExtent) {
68+
TextRange range(3, 7);
69+
range.set_extent(6);
70+
EXPECT_EQ(range.base(), size_t(3));
71+
EXPECT_EQ(range.extent(), size_t(6));
72+
}
73+
74+
TEST(TextRange, SetExtentReversed) {
75+
TextRange range(7, 3);
76+
range.set_extent(4);
77+
EXPECT_EQ(range.base(), size_t(7));
78+
EXPECT_EQ(range.extent(), size_t(4));
79+
}
80+
81+
TEST(TextRange, SetStart) {
82+
TextRange range(3, 7);
83+
range.set_start(5);
84+
EXPECT_EQ(range.base(), size_t(5));
85+
EXPECT_EQ(range.extent(), size_t(7));
86+
}
87+
88+
TEST(TextRange, SetStartReversed) {
89+
TextRange range(7, 3);
90+
range.set_start(5);
91+
EXPECT_EQ(range.base(), size_t(7));
92+
EXPECT_EQ(range.extent(), size_t(5));
93+
}
94+
95+
TEST(TextRange, SetEnd) {
96+
TextRange range(3, 7);
97+
range.set_end(6);
98+
EXPECT_EQ(range.base(), size_t(3));
99+
EXPECT_EQ(range.extent(), size_t(6));
100+
}
101+
102+
TEST(TextRange, SetEndReversed) {
103+
TextRange range(7, 3);
104+
range.set_end(5);
105+
EXPECT_EQ(range.base(), size_t(5));
106+
EXPECT_EQ(range.extent(), size_t(3));
107+
}
108+
53109
TEST(TextRange, ContainsPreStartPosition) {
54110
TextRange range(2, 6);
55111
EXPECT_FALSE(range.Contains(1));

0 commit comments

Comments
 (0)