diff --git a/gdk/gdkpango.c b/gdk/gdkpango.c index 1bf972b0ff..4da170baea 100644 --- a/gdk/gdkpango.c +++ b/gdk/gdkpango.c @@ -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 @@ -52,25 +52,25 @@ layout_iter_get_line_clip_region (PangoLayoutIter *iter, i = 0; while (i < n_ranges) - { + { int *pixel_ranges = NULL; int n_pixel_ranges = 0; int j; /* Note that get_x_ranges returns layout coordinates */ - if (index_ranges[i*2+1] >= line->start_index && - index_ranges[i*2] < line->start_index + line->length) + 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); - + for (j = 0; j < n_pixel_ranges; j++) { GdkRectangle rect; int x_off, y_off; - + x_off = PANGO_PIXELS (pixel_ranges[2*j] - logical_rect.x); y_off = PANGO_PIXELS (baseline - logical_rect.y); @@ -124,14 +124,14 @@ gdk_pango_layout_line_get_clip_region (PangoLayoutLine *line, { 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); @@ -167,26 +167,26 @@ gdk_pango_layout_get_clip_region (PangoLayout *layout, const int *index_ranges, int n_ranges) { - PangoLayoutIter *iter; + PangoLayoutIter *iter; cairo_region_t *clip_region; - + g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL); g_return_val_if_fail (index_ranges != NULL, NULL); - + clip_region = cairo_region_create (); - + iter = pango_layout_get_iter (layout); - + do { PangoRectangle logical_rect; cairo_region_t *line_region; int baseline; - - pango_layout_iter_get_line_extents (iter, NULL, &logical_rect); - baseline = pango_layout_iter_get_baseline (iter); - line_region = layout_iter_get_line_clip_region(iter, + pango_layout_iter_get_line_extents (iter, NULL, &logical_rect); + baseline = pango_layout_iter_get_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, diff --git a/gtk/a11y/gtkatspipango.c b/gtk/a11y/gtkatspipango.c index 0c6db2dbc8..4db6a1a64b 100644 --- a/gtk/a11y/gtkatspipango.c +++ b/gtk/a11y/gtkatspipango.c @@ -126,6 +126,22 @@ pango_wrap_mode_to_string (PangoWrapMode mode) } } +static const char * +pango_align_to_string (PangoAlignment align) +{ + switch (align) + { + case PANGO_ALIGN_LEFT: + return "left"; + case PANGO_ALIGN_CENTER: + return "center"; + case PANGO_ALIGN_RIGHT: + return "right"; + default: + g_assert_not_reached (); + } +} + void gtk_pango_get_font_attributes (PangoFontDescription *font, GVariantBuilder *builder) @@ -167,9 +183,6 @@ gtk_pango_get_default_attributes (PangoLayout *layout, GVariantBuilder *builder) { PangoContext *context; - const char *val; - PangoAlignment align; - PangoWrapMode mode; context = pango_layout_get_context (layout); if (context) @@ -186,26 +199,12 @@ gtk_pango_get_default_attributes (PangoLayout *layout, if (font) gtk_pango_get_font_attributes (font, builder); } - if (pango_layout_get_justify (layout)) - { - val = "fill"; - } - else - { - align = pango_layout_get_alignment (layout); - if (align == PANGO_ALIGN_LEFT) - val = "left"; - else if (align == PANGO_ALIGN_CENTER) - val = "center"; - else - val = "right"; - } - g_variant_builder_add (builder, "{ss}", "justification", val); - mode = pango_layout_get_wrap (layout); + g_variant_builder_add (builder, "{ss}", "justification", + pango_align_to_string (pango_layout_get_alignment (layout))); + g_variant_builder_add (builder, "{ss}", "wrap-mode", - pango_wrap_mode_to_string (mode)); - + pango_wrap_mode_to_string (pango_layout_get_wrap (layout))); g_variant_builder_add (builder, "{ss}", "strikethrough", "false"); g_variant_builder_add (builder, "{ss}", "underline", "false"); g_variant_builder_add (builder, "{ss}", "rise", "0"); @@ -678,7 +677,9 @@ pango_layout_get_line_before (PangoLayout *layout, { PangoLayoutIter *iter; PangoLayoutLine *line, *prev_line = NULL, *prev_prev_line = NULL; - int index, start_index, end_index; + int index, start_index, length, end_index; + int prev_start_index, prev_length; + int prev_prev_start_index, prev_prev_length; const char *text; gboolean found = FALSE; @@ -688,8 +689,9 @@ pango_layout_get_line_before (PangoLayout *layout, do { line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; + start_index = pango_layout_line_get_start_index (line); + length = pango_layout_line_get_length (line); + end_index = start_index + length; if (index >= start_index && index <= end_index) { @@ -700,14 +702,14 @@ pango_layout_get_line_before (PangoLayout *layout, { case ATSPI_TEXT_BOUNDARY_LINE_START: end_index = start_index; - start_index = prev_line->start_index; + start_index = prev_start_index; break; case ATSPI_TEXT_BOUNDARY_LINE_END: if (prev_prev_line) - start_index = prev_prev_line->start_index + prev_prev_line->length; + start_index = prev_prev_start_index + prev_prev_length; else start_index = 0; - end_index = prev_line->start_index + prev_line->length; + end_index = prev_start_index + prev_length; break; case ATSPI_TEXT_BOUNDARY_CHAR: case ATSPI_TEXT_BOUNDARY_WORD_START: @@ -726,13 +728,17 @@ pango_layout_get_line_before (PangoLayout *layout, } prev_prev_line = prev_line; + prev_prev_start_index = prev_start_index; + prev_prev_length = prev_length; prev_line = line; + prev_start_index = start_index; + prev_length = length; } while (pango_layout_iter_next_line (iter)); if (!found) { - start_index = prev_line->start_index + prev_line->length; + start_index = prev_start_index + prev_length; end_index = start_index; } pango_layout_iter_free (iter); @@ -750,7 +756,7 @@ pango_layout_get_line_at (PangoLayout *layout, { PangoLayoutIter *iter; PangoLayoutLine *line, *prev_line = NULL; - int index, start_index, end_index; + int index, start_index, length, end_index; const char *text; gboolean found = FALSE; @@ -760,8 +766,9 @@ pango_layout_get_line_at (PangoLayout *layout, do { line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; + start_index = pango_layout_line_get_start_index (line); + length = pango_layout_line_get_length (line); + end_index = start_index + length; if (index >= start_index && index <= end_index) { @@ -770,11 +777,11 @@ pango_layout_get_line_at (PangoLayout *layout, { case ATSPI_TEXT_BOUNDARY_LINE_START: if (pango_layout_iter_next_line (iter)) - end_index = pango_layout_iter_get_line (iter)->start_index; + end_index = pango_layout_line_get_start_index (pango_layout_iter_get_line (iter)); break; case ATSPI_TEXT_BOUNDARY_LINE_END: if (prev_line) - start_index = prev_line->start_index + prev_line->length; + start_index = pango_layout_line_get_start_index (prev_line) + pango_layout_line_get_length (prev_line); break; case ATSPI_TEXT_BOUNDARY_CHAR: case ATSPI_TEXT_BOUNDARY_WORD_START: @@ -795,7 +802,7 @@ pango_layout_get_line_at (PangoLayout *layout, if (!found) { - start_index = prev_line->start_index + prev_line->length; + start_index = pango_layout_line_get_start_index (prev_line) + pango_layout_line_get_length (prev_line); end_index = start_index; } pango_layout_iter_free (iter); @@ -813,7 +820,7 @@ pango_layout_get_line_after (PangoLayout *layout, { PangoLayoutIter *iter; PangoLayoutLine *line, *prev_line = NULL; - int index, start_index, end_index; + int index, start_index, length, end_index; const char *text; gboolean found = FALSE; @@ -823,8 +830,9 @@ pango_layout_get_line_after (PangoLayout *layout, do { line = pango_layout_iter_get_line (iter); - start_index = line->start_index; - end_index = start_index + line->length; + start_index = pango_layout_line_get_start_index (line); + length = pango_layout_line_get_length (line); + end_index = start_index + length; if (index >= start_index && index <= end_index) { @@ -835,15 +843,15 @@ pango_layout_get_line_after (PangoLayout *layout, switch (boundary_type) { case ATSPI_TEXT_BOUNDARY_LINE_START: - start_index = line->start_index; + start_index = pango_layout_line_get_start_index (line); if (pango_layout_iter_next_line (iter)) - end_index = pango_layout_iter_get_line (iter)->start_index; + end_index = pango_layout_line_get_start_index (pango_layout_iter_get_line (iter)); else - end_index = start_index + line->length; + end_index = start_index + pango_layout_line_get_length (line); break; case ATSPI_TEXT_BOUNDARY_LINE_END: start_index = end_index; - end_index = line->start_index + line->length; + end_index = pango_layout_line_get_start_index (line) + pango_layout_line_get_length (line); break; case ATSPI_TEXT_BOUNDARY_CHAR: case ATSPI_TEXT_BOUNDARY_WORD_START: @@ -867,7 +875,7 @@ pango_layout_get_line_after (PangoLayout *layout, if (!found) { - start_index = prev_line->start_index + prev_line->length; + start_index = pango_layout_line_get_start_index (prev_line) + pango_layout_line_get_length (prev_line); end_index = start_index; } pango_layout_iter_free (iter); diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index db5f5862e2..ad0570b6b1 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -3085,7 +3085,7 @@ find_display_line_below (GtkTextLayout *layout, int first_y, last_y; PangoLayoutLine *layout_line = pango_layout_iter_get_line_readonly (layout_iter); - found_byte = layout_line->start_index; + found_byte = pango_layout_line_get_start_index (layout_line); if (line_top >= y) { @@ -3157,7 +3157,7 @@ find_display_line_above (GtkTextLayout *layout, int first_y, last_y; PangoLayoutLine *layout_line = pango_layout_iter_get_line_readonly (layout_iter); - found_byte = layout_line->start_index; + found_byte = pango_layout_line_get_start_index (layout_line); pango_layout_iter_get_line_yrange (layout_iter, &first_y, &last_y); @@ -3290,10 +3290,10 @@ gtk_text_layout_move_iter_to_previous_line (GtkTextLayout *layout, if (update_byte) { - line_byte = layout_line->start_index + layout_line->length; + line_byte = pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line); } - if (line_byte < layout_line->length || !tmp_list->next) /* first line of paragraph */ + if (line_byte < pango_layout_line_get_length (layout_line) || !tmp_list->next) /* first line of paragraph */ { GtkTextLine *prev_line; @@ -3315,7 +3315,7 @@ gtk_text_layout_move_iter_to_previous_line (GtkTextLayout *layout, layout_line = tmp_list->data; line_display_index_to_iter (layout, display, iter, - layout_line->start_index + layout_line->length, 0); + pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line), 0); break; } @@ -3324,21 +3324,21 @@ gtk_text_layout_move_iter_to_previous_line (GtkTextLayout *layout, } else { - int prev_offset = layout_line->start_index; + int prev_offset = pango_layout_line_get_start_index (layout_line); tmp_list = tmp_list->next; while (tmp_list) { layout_line = tmp_list->data; - if (line_byte < layout_line->start_index + layout_line->length || + if (line_byte < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line) || !tmp_list->next) { line_display_index_to_iter (layout, display, iter, prev_offset, 0); break; } - prev_offset = layout_line->start_index; + prev_offset = pango_layout_line_get_start_index (layout_line); tmp_list = tmp_list->next; } } @@ -3405,10 +3405,10 @@ gtk_text_layout_move_iter_to_next_line (GtkTextLayout *layout, if (found) { line_display_index_to_iter (layout, display, iter, - layout_line->start_index, 0); + pango_layout_line_get_start_index (layout_line), 0); found_after = TRUE; } - else if (line_byte < layout_line->start_index + layout_line->length || !tmp_list->next) + else if (line_byte < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line) || !tmp_list->next) found = TRUE; tmp_list = tmp_list->next; @@ -3462,17 +3462,17 @@ gtk_text_layout_move_iter_to_line_end (GtkTextLayout *layout, { PangoLayoutLine *layout_line = tmp_list->data; - if (line_byte < layout_line->start_index + layout_line->length || !tmp_list->next) + if (line_byte < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line) || !tmp_list->next) { line_display_index_to_iter (layout, display, iter, - direction < 0 ? layout_line->start_index : layout_line->start_index + layout_line->length, + direction < 0 ? pango_layout_line_get_start_index (layout_line) : pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line), 0); /* FIXME: As a bad hack, we move back one position when we * are inside a paragraph to avoid going to next line on a * forced break not at whitespace. Real fix is to keep track * of whether marks are at leading or trailing edge? */ - if (direction > 0 && layout_line->length > 0 && + if (direction > 0 && pango_layout_line_get_length (layout_line) > 0 && !gtk_text_iter_ends_line (iter) && !_gtk_text_btree_char_is_invisible (iter)) gtk_text_iter_backward_char (iter); @@ -3518,7 +3518,7 @@ gtk_text_layout_iter_starts_line (GtkTextLayout *layout, { PangoLayoutLine *layout_line = tmp_list->data; - if (line_byte < layout_line->start_index + layout_line->length || + if (line_byte < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line) || !tmp_list->next) { /* We're located on this line or the para delimiters before @@ -3526,7 +3526,7 @@ gtk_text_layout_iter_starts_line (GtkTextLayout *layout, */ gtk_text_line_display_unref (display); - if (line_byte == layout_line->start_index) + if (line_byte == pango_layout_line_get_start_index (layout_line)) return TRUE; else return FALSE; @@ -3583,7 +3583,7 @@ gtk_text_layout_move_iter_to_x (GtkTextLayout *layout, { PangoLayoutLine *layout_line = pango_layout_iter_get_line_readonly (layout_iter); - if (line_byte < layout_line->start_index + layout_line->length || + if (line_byte < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line) || pango_layout_iter_at_last_line (layout_iter)) { PangoRectangle logical_rect; @@ -3908,7 +3908,7 @@ render_para (GskPangoRenderer *crenderer, * only do it if the selection is opaque. */ if (selection_start_index < byte_offset && - selection_end_index > line->length + byte_offset && + selection_end_index > pango_layout_line_get_length (line) + byte_offset && selection->alpha >= 1) { gtk_snapshot_append_color (crenderer->snapshot, @@ -3944,11 +3944,11 @@ render_para (GskPangoRenderer *crenderer, baseline); /* Check if some part of the line is selected; the newline - * that is after line->length for the last line of the + * that is after pango_layout_line_get_length (line) for the last line of the * paragraph counts as part of the line for this */ - if ((selection_start_index < byte_offset + line->length || - (selection_start_index == byte_offset + line->length && pango_layout_iter_at_last_line (iter))) && + if ((selection_start_index < byte_offset + pango_layout_line_get_length (line) || + (selection_start_index == byte_offset + pango_layout_line_get_length (line) && pango_layout_iter_at_last_line (iter))) && selection_end_index > byte_offset) { int *ranges = NULL; @@ -3996,7 +3996,7 @@ render_para (GskPangoRenderer *crenderer, /* Paint in the ends of the line */ if (line_rect.x > line_display->left_margin * PANGO_SCALE && ((line_display->direction == GTK_TEXT_DIR_LTR && selection_start_index < byte_offset) || - (line_display->direction == GTK_TEXT_DIR_RTL && selection_end_index > byte_offset + line->length))) + (line_display->direction == GTK_TEXT_DIR_RTL && selection_end_index > byte_offset + pango_layout_line_get_length (line)))) gtk_snapshot_append_color (crenderer->snapshot, selection, &GRAPHENE_RECT_INIT (line_display->left_margin, @@ -4006,7 +4006,7 @@ render_para (GskPangoRenderer *crenderer, if (line_rect.x + line_rect.width < (screen_width + line_display->left_margin) * PANGO_SCALE && - ((line_display->direction == GTK_TEXT_DIR_LTR && selection_end_index > byte_offset + line->length) || + ((line_display->direction == GTK_TEXT_DIR_LTR && selection_end_index > byte_offset + pango_layout_line_get_length (line)) || (line_display->direction == GTK_TEXT_DIR_RTL && selection_start_index < byte_offset))) { int nonlayout_width = line_display->left_margin @@ -4025,8 +4025,8 @@ render_para (GskPangoRenderer *crenderer, gtk_widget_has_focus (crenderer->widget) && cursor_alpha > 0 && byte_offset <= line_display->insert_index && - (line_display->insert_index < byte_offset + line->length || - (at_last_line && line_display->insert_index == byte_offset + line->length))) + (line_display->insert_index < byte_offset + pango_layout_line_get_length (line) || + (at_last_line && line_display->insert_index == byte_offset + pango_layout_line_get_length (line)))) { GtkStyleContext *context; GdkRGBA cursor_color; @@ -4061,7 +4061,7 @@ render_para (GskPangoRenderer *crenderer, } } - byte_offset += line->length; + byte_offset += pango_layout_line_get_length (line); } while (pango_layout_iter_next_line (iter)); diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c index 24dcc7f8b5..6570994bb2 100644 --- a/gtk/gtktextutil.c +++ b/gtk/gtktextutil.c @@ -19,7 +19,7 @@ * Modified by the GTK+ Team and others 1997-2001. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ #include "config.h" @@ -64,7 +64,7 @@ limit_layout_lines (PangoLayout *layout) int n_lines; n_lines = pango_layout_get_line_count (layout); - + if (n_lines >= DRAG_ICON_MAX_LINES) { text = pango_layout_get_text (layout); @@ -355,13 +355,13 @@ _gtk_text_util_get_block_cursor_location (PangoLayout *layout, text = pango_layout_get_text (layout); - if (index < layout_line->start_index + layout_line->length) + if (index < pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line)) { /* this may be a zero-width character in the middle of the line, * or it could be a character where line is wrapped, we do want * block cursor in latter case */ if (g_utf8_next_char (text + index) - text != - layout_line->start_index + layout_line->length) + pango_layout_line_get_start_index (layout_line) + pango_layout_line_get_length (layout_line)) { /* zero-width character in the middle of the line, do not * bother with block cursor */ @@ -384,9 +384,9 @@ _gtk_text_util_get_block_cursor_location (PangoLayout *layout, /* In case when index points to the end of line, pos->x is always most right * pixel of the layout line, so we need to correct it for RTL text. */ - if (layout_line->length) + if (pango_layout_line_get_length (layout_line)) { - if (layout_line->resolved_dir == PANGO_DIRECTION_RTL) + if (pango_layout_line_get_resolved_direction (layout_line) == PANGO_DIRECTION_RTL) { PangoLayoutIter *iter; PangoRectangle line_rect;