aboutsummaryrefslogtreecommitdiff
path: root/src/platform/graphics
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-18 21:25:44 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-18 21:25:44 +0800
commitdf2dadbd0f0ace6e02281c84218537ec2ce5c47f (patch)
tree56a360c16c4ba46658572305d3a444fb30d32272 /src/platform/graphics
parent3648f669cb42cdd9d232d60c8b9715dfbbe5b31a (diff)
downloadcru-df2dadbd0f0ace6e02281c84218537ec2ce5c47f.tar.gz
cru-df2dadbd0f0ace6e02281c84218537ec2ce5c47f.tar.bz2
cru-df2dadbd0f0ace6e02281c84218537ec2ce5c47f.zip
Add overload of string_view for string utils. clean up codes.
Diffstat (limited to 'src/platform/graphics')
-rw-r--r--src/platform/graphics/cairo/PangoTextLayout.cpp3
-rw-r--r--src/platform/graphics/direct2d/Font.cpp2
-rw-r--r--src/platform/graphics/direct2d/TextLayout.cpp26
-rw-r--r--src/platform/graphics/quartz/TextLayout.cpp28
4 files changed, 22 insertions, 37 deletions
diff --git a/src/platform/graphics/cairo/PangoTextLayout.cpp b/src/platform/graphics/cairo/PangoTextLayout.cpp
index 25d9f85d..98ad4f45 100644
--- a/src/platform/graphics/cairo/PangoTextLayout.cpp
+++ b/src/platform/graphics/cairo/PangoTextLayout.cpp
@@ -165,8 +165,7 @@ TextHitTestResult PangoTextLayout::HitTest(const Point& point) {
if (result.trailing) {
Index position_with_trailing;
- string::Utf8NextCodePoint(text_.data(), text_.size(), result.position,
- &position_with_trailing);
+ string::Utf8NextCodePoint(text_, result.position, &position_with_trailing);
result.position_with_trailing = position_with_trailing;
} else {
result.position_with_trailing = result.position;
diff --git a/src/platform/graphics/direct2d/Font.cpp b/src/platform/graphics/direct2d/Font.cpp
index 18a4a2c7..4e0a5e49 100644
--- a/src/platform/graphics/direct2d/Font.cpp
+++ b/src/platform/graphics/direct2d/Font.cpp
@@ -17,7 +17,7 @@ DWriteFont::DWriteFont(DirectGraphicsFactory* factory, std::string font_family,
::GetLastError(), "Failed to get locale when create dwrite font.");
CheckHResult(factory->GetDWriteFactory()->CreateTextFormat(
- string::ToUtf16(font_family_).c_str(), nullptr, DWRITE_FONT_WEIGHT_NORMAL,
+ string::ToUtf16WString(font_family_).c_str(), nullptr, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, font_size,
buffer.data(), &text_format_));
diff --git a/src/platform/graphics/direct2d/TextLayout.cpp b/src/platform/graphics/direct2d/TextLayout.cpp
index 3fc91616..18784ccb 100644
--- a/src/platform/graphics/direct2d/TextLayout.cpp
+++ b/src/platform/graphics/direct2d/TextLayout.cpp
@@ -13,7 +13,7 @@ DWriteTextLayout::DWriteTextLayout(DirectGraphicsFactory* factory,
Expects(font);
font_ = CheckPlatform<DWriteFont>(font, GetPlatformId());
- utf16_text_ = string::ToUtf16(text_);
+ utf16_text_ = string::ToUtf16WString(text_);
CheckHResult(factory->GetDWriteFactory()->CreateTextLayout(
utf16_text_.c_str(), static_cast<UINT32>(utf16_text_.size()),
font_->GetComInterface(), max_width_, max_height_, &text_layout_));
@@ -25,7 +25,7 @@ std::string DWriteTextLayout::GetText() { return text_; }
void DWriteTextLayout::SetText(std::string new_text) {
text_ = std::move(new_text);
- utf16_text_ = string::ToUtf16(text_);
+ utf16_text_ = string::ToUtf16WString(text_);
CheckHResult(GetDirectFactory()->GetDWriteFactory()->CreateTextLayout(
utf16_text_.c_str(), static_cast<UINT32>(utf16_text_.size()),
font_->GetComInterface(), max_width_, max_height_, &text_layout_));
@@ -108,15 +108,11 @@ std::vector<Rect> DWriteTextLayout::TextRangeRect(
const auto text_range =
Range::FromTwoSides(
string::Utf16IndexCodePointToCodeUnit(
- reinterpret_cast<const char16_t*>(utf16_text_.data()),
- utf16_text_.size(),
- string::Utf8IndexCodeUnitToCodePoint(text_.data(), text_.size(),
- text_range_arg.GetStart())),
+ utf16_text_, string::Utf8IndexCodeUnitToCodePoint(
+ text_, text_range_arg.GetStart())),
string::Utf16IndexCodePointToCodeUnit(
- reinterpret_cast<const char16_t*>(utf16_text_.data()),
- utf16_text_.size(),
- string::Utf8IndexCodeUnitToCodePoint(text_.data(), text_.size(),
- text_range_arg.GetEnd())))
+ utf16_text_, string::Utf8IndexCodeUnitToCodePoint(
+ text_, text_range_arg.GetEnd())))
.Normalize();
DWRITE_TEXT_METRICS text_metrics;
@@ -147,9 +143,7 @@ std::vector<Rect> DWriteTextLayout::TextRangeRect(
Rect DWriteTextLayout::TextSinglePoint(Index position, bool trailing) {
position = string::Utf16IndexCodePointToCodeUnit(
- reinterpret_cast<const char16_t*>(utf16_text_.data()), utf16_text_.size(),
- string::Utf8IndexCodeUnitToCodePoint(text_.data(), text_.size(),
- position));
+ utf16_text_, string::Utf8IndexCodeUnitToCodePoint(text_, position));
DWRITE_HIT_TEST_METRICS metrics;
FLOAT left;
FLOAT top;
@@ -169,10 +163,8 @@ TextHitTestResult DWriteTextLayout::HitTest(const Point& point) {
TextHitTestResult result;
result.position = string::Utf8IndexCodePointToCodeUnit(
- text_.data(), text_.size(),
- string::Utf16IndexCodeUnitToCodePoint(
- reinterpret_cast<const char16_t*>(utf16_text_.data()),
- utf16_text_.size(), metrics.textPosition));
+ text_,
+ string::Utf16IndexCodeUnitToCodePoint(utf16_text_, metrics.textPosition));
result.trailing = trailing != 0;
if (result.trailing) {
diff --git a/src/platform/graphics/quartz/TextLayout.cpp b/src/platform/graphics/quartz/TextLayout.cpp
index 4793a19c..80cb8a3f 100644
--- a/src/platform/graphics/quartz/TextLayout.cpp
+++ b/src/platform/graphics/quartz/TextLayout.cpp
@@ -238,28 +238,25 @@ TextHitTestResult OsxCTTextLayout::HitTest(const Point& point) {
bool inside_text;
if (pp.x < bounds.origin.x) {
- po = cru::string::Utf8IndexCodePointToCodeUnit(
- actual_text_.data(), actual_text_.size(), range.location);
+ po = cru::string::Utf8IndexCodePointToCodeUnit(actual_text_,
+ range.location);
inside_text = false;
} else if (pp.x > bounds.origin.x + bounds.size.width) {
po = cru::string::Utf8IndexCodePointToCodeUnit(
- actual_text_.data(), actual_text_.size(),
- range.location + range.length);
+ actual_text_, range.location + range.length);
inside_text = false;
} else {
int position = CTLineGetStringIndexForPosition(
line,
CGPointMake(pp.x - line_origins_[i].x, pp.y - line_origins_[i].y));
- po = cru::string::Utf8IndexCodePointToCodeUnit(
- actual_text_.data(), actual_text_.size(), position);
+ po = cru::string::Utf8IndexCodePointToCodeUnit(actual_text_, position);
inside_text = true;
}
if (po != 0 &&
po == cru::string::Utf8IndexCodePointToCodeUnit(
- actual_text_.data(), actual_text_.size(),
- range.location + range.length) &&
+ actual_text_, range.location + range.length) &&
actual_text_[po - 1] == u'\n') {
--po;
}
@@ -405,13 +402,11 @@ CGRect OsxCTTextLayout::DoGetTextBoundsIncludingEmptyLines(
std::vector<CGRect> OsxCTTextLayout::DoTextRangeRect(
const TextRange& text_range) {
- const auto r =
- Range::FromTwoSides(
- cru::string::Utf8IndexCodeUnitToCodePoint(
- actual_text_.data(), actual_text_.size(), text_range.position),
- cru::string::Utf8IndexCodeUnitToCodePoint(
- actual_text_.data(), actual_text_.size(), text_range.GetEnd()))
- .Normalize();
+ const auto r = Range::FromTwoSides(cru::string::Utf8IndexCodeUnitToCodePoint(
+ actual_text_, text_range.position),
+ cru::string::Utf8IndexCodeUnitToCodePoint(
+ actual_text_, text_range.GetEnd()))
+ .Normalize();
std::vector<CGRect> results;
@@ -443,8 +438,7 @@ CGRect OsxCTTextLayout::DoTextSinglePoint(Index position, bool trailing) {
if (actual_text_.empty()) return CGRectMake(0, 0, 0, font_->GetFontSize());
- position = cru::string::Utf8IndexCodeUnitToCodePoint(
- actual_text_.data(), actual_text_.size(), position);
+ position = cru::string::Utf8IndexCodeUnitToCodePoint(actual_text_, position);
for (int i = 0; i < line_count_; i++) {
auto line = lines_[i];