[gtk/pango-line-breaker: 3/6] gdk: port to pango 2 api
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/pango-line-breaker: 3/6] gdk: port to pango 2 api
- Date: Mon, 24 Jan 2022 04:38:15 +0000 (UTC)
commit bfa114e141ca9fb694ab1cc714c653db0a318c1e
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Jan 22 14:25:41 2022 -0500
gdk: port to pango 2 api
gdk/gdkpango.c | 99 +++++++++++++++-------------------------------------------
gdk/gdkpango.h | 22 +++----------
2 files changed, 31 insertions(+), 90 deletions(-)
---
diff --git a/gdk/gdkpango.c b/gdk/gdkpango.c
index 4da170baea..fa2670a663 100644
--- a/gdk/gdkpango.c
+++ b/gdk/gdkpango.c
@@ -30,25 +30,29 @@
* region which contains the given ranges, i.e. if you draw with the
* region as clip, only the given ranges are drawn.
*/
-static cairo_region_t*
+static cairo_region_t *
layout_iter_get_line_clip_region (PangoLayoutIter *iter,
- int x_origin,
- int y_origin,
- const int *index_ranges,
- int n_ranges)
+ int x_origin,
+ int y_origin,
+ const int *index_ranges,
+ int n_ranges)
{
+ PangoLines *lines;
PangoLayoutLine *line;
cairo_region_t *clip_region;
PangoRectangle logical_rect;
int baseline;
int i;
+ int start_index, length;
- line = pango_layout_iter_get_line_readonly (iter);
+ lines = pango_layout_iter_get_lines (iter);
+ line = pango_layout_iter_get_line (iter);
+ pango_layout_line_get_text (line, &start_index, &length);
clip_region = cairo_region_create ();
pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
- baseline = pango_layout_iter_get_baseline (iter);
+ baseline = pango_layout_iter_get_line_baseline (iter);
i = 0;
while (i < n_ranges)
@@ -57,22 +61,22 @@ layout_iter_get_line_clip_region (PangoLayoutIter *iter,
int n_pixel_ranges = 0;
int j;
- /* Note that get_x_ranges returns layout coordinates
- */
+ /* Note that get_x_ranges returns layout coordinates */
if (index_ranges[i*2+1] >= pango_layout_line_get_start_index (line) &&
index_ranges[i*2] < pango_layout_line_get_start_index (line) + pango_layout_line_get_length (line))
- pango_layout_line_get_x_ranges (line,
- index_ranges[i*2],
- index_ranges[i*2+1],
- &pixel_ranges, &n_pixel_ranges);
+ pango_lines_get_x_ranges (lines,
+ line,
+ NULL, index_ranges[i*2],
+ NULL, index_ranges[i*2+1],
+ &pixel_ranges, &n_pixel_ranges);
for (j = 0; j < n_pixel_ranges; j++)
{
GdkRectangle rect;
- int x_off, y_off;
+ int x_off, y_off;
x_off = PANGO_PIXELS (pixel_ranges[2*j] - logical_rect.x);
- y_off = PANGO_PIXELS (baseline - logical_rect.y);
+ y_off = PANGO_PIXELS (baseline - logical_rect.y);
rect.x = x_origin + x_off;
rect.y = y_origin - y_off;
@@ -88,57 +92,6 @@ layout_iter_get_line_clip_region (PangoLayoutIter *iter,
return clip_region;
}
-/**
- * gdk_pango_layout_line_get_clip_region: (skip)
- * @line: a `PangoLayoutLine`
- * @x_origin: X pixel where you intend to draw the layout line with this clip
- * @y_origin: baseline pixel where you intend to draw the layout line with this clip
- * @index_ranges: (array): array of byte indexes into the layout, where even
- * members of array are start indexes and odd elements are end indexes
- * @n_ranges: number of ranges in @index_ranges, i.e. half the size of @index_ranges
- *
- * Obtains a clip region which contains the areas where the given
- * ranges of text would be drawn.
- *
- * @x_origin and @y_origin are the top left position of the layout.
- * @index_ranges should contain ranges of bytes in the layout’s text.
- * The clip region will include space to the left or right of the line
- * (to the layout bounding box) if you have indexes above or below the
- * indexes contained inside the line. This is to draw the selection all
- * the way to the side of the layout. However, the clip region is in line
- * coordinates, not layout coordinates.
- *
- * Note that the regions returned correspond to logical extents of the text
- * ranges, not ink extents. So the drawn line may in fact touch areas out of
- * the clip region. The clip region is mainly useful for highlightling parts
- * of text, such as when text is selected.
- *
- * Returns: a clip region containing the given ranges
- */
-cairo_region_t*
-gdk_pango_layout_line_get_clip_region (PangoLayoutLine *line,
- int x_origin,
- int y_origin,
- const int *index_ranges,
- int n_ranges)
-{
- cairo_region_t *clip_region;
- PangoLayoutIter *iter;
-
- g_return_val_if_fail (line != NULL, NULL);
- g_return_val_if_fail (index_ranges != NULL, NULL);
-
- iter = pango_layout_get_iter (line->layout);
- while (pango_layout_iter_get_line_readonly (iter) != line)
- pango_layout_iter_next_line (iter);
-
- clip_region = layout_iter_get_line_clip_region(iter, x_origin, y_origin, index_ranges, n_ranges);
-
- pango_layout_iter_free (iter);
-
- return clip_region;
-}
-
/**
* gdk_pango_layout_get_clip_region: (skip)
* @layout: a `PangoLayout`
@@ -160,7 +113,7 @@ gdk_pango_layout_line_get_clip_region (PangoLayoutLine *line,
*
* Returns: a clip region containing the given ranges
*/
-cairo_region_t*
+cairo_region_t *
gdk_pango_layout_get_clip_region (PangoLayout *layout,
int x_origin,
int y_origin,
@@ -184,13 +137,13 @@ gdk_pango_layout_get_clip_region (PangoLayout *layout,
int baseline;
pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
- baseline = pango_layout_iter_get_baseline (iter);
+ baseline = pango_layout_iter_get_line_baseline (iter);
- line_region = layout_iter_get_line_clip_region(iter,
- x_origin + PANGO_PIXELS (logical_rect.x),
- y_origin + PANGO_PIXELS (baseline),
- index_ranges,
- n_ranges);
+ line_region = layout_iter_get_line_clip_region (iter,
+ x_origin + PANGO_PIXELS (logical_rect.x),
+ y_origin + PANGO_PIXELS (baseline),
+ index_ranges,
+ n_ranges);
cairo_region_union (clip_region, line_region);
cairo_region_destroy (line_region);
diff --git a/gdk/gdkpango.h b/gdk/gdkpango.h
index 5a674bc3d8..610ed4712e 100644
--- a/gdk/gdkpango.h
+++ b/gdk/gdkpango.h
@@ -1,5 +1,5 @@
/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2000 Red Hat, Inc.
+ * Copyright (C) 2000 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -27,24 +27,12 @@
G_BEGIN_DECLS
-/* Get a clip region to draw only part of a layout or
- * line. index_ranges contains alternating range starts/stops. The
- * region is the region which contains the given ranges, i.e. if you
- * draw with the region as clip, only the given ranges are drawn.
- */
-
-GDK_AVAILABLE_IN_ALL
-cairo_region_t *gdk_pango_layout_line_get_clip_region (PangoLayoutLine *line,
- int x_origin,
- int y_origin,
- const int *index_ranges,
- int n_ranges);
GDK_AVAILABLE_IN_ALL
cairo_region_t *gdk_pango_layout_get_clip_region (PangoLayout *layout,
- int x_origin,
- int y_origin,
- const int *index_ranges,
- int n_ranges);
+ int x_origin,
+ int y_origin,
+ const int *index_ranges,
+ int n_ranges);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]