From 672500d6a122f7b546d6fb795fe0e5cd03d9f244 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Tue, 23 Jan 2001 21:41:26 +0000 Subject: New function 2001-01-23 Havoc Pennington * pango/pango-layout.c (pango_layout_copy): New function --- ChangeLog | 8 ++++++-- ChangeLog.pre-1-0 | 8 ++++++-- ChangeLog.pre-1-10 | 8 ++++++-- ChangeLog.pre-1-2 | 8 ++++++-- ChangeLog.pre-1-4 | 8 ++++++-- ChangeLog.pre-1-6 | 8 ++++++-- ChangeLog.pre-1-8 | 8 ++++++-- pango/pango-layout.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++- pango/pango-layout.h | 1 + 9 files changed, 95 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index b4a1ff93..1a713622 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-0 b/ChangeLog.pre-1-0 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-0 +++ b/ChangeLog.pre-1-0 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-10 +++ b/ChangeLog.pre-1-10 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-2 +++ b/ChangeLog.pre-1-2 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-4 +++ b/ChangeLog.pre-1-4 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-6 +++ b/ChangeLog.pre-1-6 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8 index b4a1ff93..1a713622 100644 --- a/ChangeLog.pre-1-8 +++ b/ChangeLog.pre-1-8 @@ -1,4 +1,8 @@ -2001-01-23 +2001-01-23 Havoc Pennington + + * pango/pango-layout.c (pango_layout_copy): New function + +2001-01-23 Alex Larsson * pango/pango-item.c (pango_item_free): Free item->extra_attrs list. @@ -33,7 +37,7 @@ * pango/pango-break.h (struct _PangoLogAttr): rename is_break is_line_break, add is_char_break field -2001-01-18 +2001-01-18 Alex Larsson * pango/pangoft2.c (get_font_metrics_from_subfonts): Use correct font metrics information. diff --git a/pango/pango-layout.c b/pango/pango-layout.c index 068077cb..30abc2fe 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -99,6 +99,10 @@ struct _PangoLayout { GObject parent_instance; + /* If you add fields to PangoLayout, be sure to update both + * the _copy function + */ + PangoContext *context; PangoAttrList *attrs; PangoFontDescription *font_desc; @@ -265,6 +269,50 @@ pango_layout_new (PangoContext *context) return layout; } +/** + * pango_layout_copy: + * @src: a #PangoLayout + * + * Does a deep copy-by-value of the @src layout. The attribute list, + * tab array, and text from the original layout are all copied by + * value. + * + * Return value: a new #PangoLayout identical to @src + **/ +PangoLayout* +pango_layout_copy (PangoLayout *src) +{ + PangoLayout *layout; + + g_return_val_if_fail (PANGO_IS_LAYOUT (src), NULL); + + layout = pango_layout_new (src->context); + + if (src->attrs) + layout->attrs = pango_attr_list_copy (src->attrs); + + if (src->font_desc) + layout->font_desc = pango_font_description_copy (src->font_desc); + + layout->text = g_strdup (src->text); + layout->length = src->length; + layout->width = src->width; + layout->indent = src->indent; + layout->spacing = src->spacing; + layout->justify = src->justify; + layout->alignment = src->alignment; + layout->n_chars = src->n_chars; + layout->tab_width = src->tab_width; + + if (src->tabs) + layout->tabs = pango_tab_array_copy (src->tabs); + layout->wrap = src->wrap; + + /* log_attrs, lines fields are updated by check_lines */ + + return layout; +} + /** * pango_layout_get_context: * @layout: a #PangoLayout @@ -3675,7 +3723,10 @@ pango_layout_iter_get_index (PangoLayoutIter *iter) * pango_layout_iter_get_run: * @iter: a #PangoLayoutIter * - * Gets the current run. + * Gets the current run. When iterating by run, at the end of each + * line, there's a position with a %NULL run, so this function can return + * %NULL. The %NULL run at the end of each line ensures that all lines have + * at least one run, even lines consisting of only a newline. * * Return value: the current run **/ diff --git a/pango/pango-layout.h b/pango/pango-layout.h index 6cef7cf4..b20e95a2 100644 --- a/pango/pango-layout.h +++ b/pango/pango-layout.h @@ -75,6 +75,7 @@ struct _PangoLayoutRun GType pango_layout_get_type (void) G_GNUC_CONST; PangoLayout *pango_layout_new (PangoContext *context); +PangoLayout *pango_layout_copy (PangoLayout *src); PangoContext *pango_layout_get_context (PangoLayout *layout); -- cgit v1.2.1