aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/platform/graphics/cairo/PangoTextLayout.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/platform/graphics/cairo/PangoTextLayout.cpp b/src/platform/graphics/cairo/PangoTextLayout.cpp
index 0ba7c806..d69ee273 100644
--- a/src/platform/graphics/cairo/PangoTextLayout.cpp
+++ b/src/platform/graphics/cairo/PangoTextLayout.cpp
@@ -103,7 +103,7 @@ Index PangoTextLayout::FromUtf16IndexToUtf8Index(Index index) {
Rect PangoTextLayout::GetTextBounds(bool includingTrailingSpace) {
PangoRectangle rectangle;
- pango_layout_get_extents(pango_layout_, &rectangle, nullptr);
+ pango_layout_get_extents(pango_layout_, nullptr, &rectangle);
return ConvertFromPango(
Rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height));
}
@@ -112,6 +112,7 @@ std::vector<Rect> PangoTextLayout::TextRangeRect(const TextRange& text_range) {
auto tr = text_range.Normalize();
auto utf8_start_index = FromUtf16IndexToUtf8Index(tr.GetStart());
auto utf8_end_index = FromUtf16IndexToUtf8Index(tr.GetEnd());
+ PangoRectangle rectangle;
int start_line_index, end_line_index, start_x_pos, end_x_pos;
pango_layout_index_to_line_x(pango_layout_, utf8_start_index, false,
@@ -119,37 +120,40 @@ std::vector<Rect> PangoTextLayout::TextRangeRect(const TextRange& text_range) {
pango_layout_index_to_line_x(pango_layout_, utf8_end_index, false,
&end_line_index, &end_x_pos);
+ pango_layout_index_to_pos(pango_layout_, utf8_start_index, &rectangle);
+ auto top = rectangle.y;
+
if (start_line_index == end_line_index) {
auto line = pango_layout_get_line(pango_layout_, start_line_index);
- PangoRectangle rectangle;
- pango_layout_line_get_extents(line, &rectangle, nullptr);
- return {ConvertFromPango(Rect(rectangle.x + start_x_pos, rectangle.y,
- end_x_pos - start_x_pos, rectangle.height))};
+ pango_layout_line_get_extents(line, nullptr, &rectangle);
+ auto rect =
+ ConvertFromPango(Rect(rectangle.x + start_x_pos, top,
+ end_x_pos - start_x_pos, rectangle.height));
+ return {rect};
} else {
std::vector<Rect> result;
- PangoRectangle rectangle;
-
auto start_line = pango_layout_get_line(pango_layout_, start_line_index);
- pango_layout_line_get_extents(start_line, &rectangle, nullptr);
- result.push_back(Rect(rectangle.x + start_x_pos, rectangle.y,
+ pango_layout_line_get_extents(start_line, nullptr, &rectangle);
+ result.push_back(Rect(rectangle.x + start_x_pos, top,
rectangle.width - start_x_pos, rectangle.height));
+ top += rectangle.height;
for (int line_index = start_line_index + 1; line_index < end_line_index;
line_index++) {
auto line = pango_layout_get_line(pango_layout_, line_index);
- pango_layout_line_get_extents(line, &rectangle, nullptr);
+ pango_layout_line_get_extents(line, nullptr, &rectangle);
result.push_back(
- Rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height));
+ Rect(rectangle.x, top, rectangle.width, rectangle.height));
+ top += rectangle.height;
}
auto end_line = pango_layout_get_line(pango_layout_, end_line_index);
- pango_layout_line_get_extents(end_line, &rectangle, nullptr);
- result.push_back(
- Rect(rectangle.x, rectangle.y, end_x_pos, rectangle.height));
+ pango_layout_line_get_extents(end_line, nullptr, &rectangle);
+ result.push_back(Rect(rectangle.x, top, end_x_pos, rectangle.height));
- for (auto& r : result) {
- r = ConvertFromPango(r);
+ for (auto& rect : result) {
+ rect = ConvertFromPango(rect);
}
return result;
@@ -164,7 +168,7 @@ Rect PangoTextLayout::TextSinglePoint(Index position, bool trailing) {
auto line = pango_layout_get_line(pango_layout_, line_index);
PangoRectangle rectangle;
- pango_layout_line_get_extents(line, &rectangle, nullptr);
+ pango_layout_line_get_extents(line, nullptr, &rectangle);
return ConvertFromPango(
Rect(rectangle.x + x_pos, rectangle.y, 0, rectangle.height));