Skip to content

Commit 682750b

Browse files
authored
fix(šŸ“): fix bugs in paragraph.getRectsForPlaceholders() and getLineMetrics() (#3333)
1 parent f3ccf95 commit 682750b

File tree

4 files changed

+474
-37
lines changed

4 files changed

+474
-37
lines changed

ā€Žpackages/skia/cpp/api/JsiSkParagraph.hā€Ž

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,47 @@ class JsiSkParagraph
9595
std::vector<para::LineMetrics> metrics;
9696
getObject()->getLineMetrics(metrics);
9797
auto returnValue = jsi::Array(runtime, metrics.size());
98-
auto height = 0;
98+
9999
for (size_t i = 0; i < metrics.size(); ++i) {
100-
returnValue.setValueAtIndex(
101-
runtime, i,
102-
JsiSkRect::toValue(runtime, getContext(),
103-
SkRect::MakeXYWH(metrics[i].fLeft, height,
104-
metrics[i].fWidth,
105-
metrics[i].fHeight)));
106-
height += metrics[i].fHeight;
100+
auto lineMetrics = jsi::Object(runtime);
101+
102+
// Text indices
103+
lineMetrics.setProperty(runtime, "startIndex",
104+
static_cast<double>(metrics[i].fStartIndex));
105+
lineMetrics.setProperty(runtime, "endIndex",
106+
static_cast<double>(metrics[i].fEndIndex));
107+
lineMetrics.setProperty(runtime, "endExcludingWhitespaces",
108+
static_cast<double>(metrics[i].fEndExcludingWhitespaces));
109+
lineMetrics.setProperty(runtime, "endIncludingNewline",
110+
static_cast<double>(metrics[i].fEndIncludingNewline));
111+
112+
// Line break info
113+
lineMetrics.setProperty(runtime, "isHardBreak",
114+
metrics[i].fHardBreak);
115+
116+
// Vertical metrics
117+
lineMetrics.setProperty(runtime, "ascent",
118+
static_cast<double>(metrics[i].fAscent));
119+
lineMetrics.setProperty(runtime, "descent",
120+
static_cast<double>(metrics[i].fDescent));
121+
lineMetrics.setProperty(runtime, "height",
122+
static_cast<double>(metrics[i].fHeight));
123+
124+
// Horizontal metrics
125+
lineMetrics.setProperty(runtime, "width",
126+
static_cast<double>(metrics[i].fWidth));
127+
lineMetrics.setProperty(runtime, "left",
128+
static_cast<double>(metrics[i].fLeft));
129+
130+
// Position
131+
lineMetrics.setProperty(runtime, "baseline",
132+
static_cast<double>(metrics[i].fBaseline));
133+
134+
// Line number
135+
lineMetrics.setProperty(runtime, "lineNumber",
136+
static_cast<double>(metrics[i].fLineNumber));
137+
138+
returnValue.setValueAtIndex(runtime, i, lineMetrics);
107139
}
108140
return returnValue;
109141
}

0 commit comments

Comments
Ā (0)