[gtk/pango-line-breaker: 3/6] gdk: port to pango 2 api




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]