summaryrefslogtreecommitdiff
path: root/pango/pango-context.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pango-context.c')
-rw-r--r--pango/pango-context.c687
1 files changed, 344 insertions, 343 deletions
diff --git a/pango/pango-context.c b/pango/pango-context.c
index ec1014fa..1db11a1c 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -10,7 +10,7 @@
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
@@ -19,18 +19,6 @@
* Boston, MA 02111-1307, USA.
*/
-/**
- * SECTION:main
- * @title:Rendering
- * @short_description:Functions to run the rendering pipeline
- *
- * The Pango rendering pipeline takes a string of
- * Unicode characters and converts it into glyphs.
- * The functions described in this section accomplish
- * various steps of this process.
- *
- * ![](pipeline.png)
- */
#include "config.h"
#include <string.h>
#include <stdlib.h>
@@ -45,21 +33,16 @@
#include "pango-emoji-private.h"
/**
- * SECTION:context
- * @title:Contexts
- * @short_description: Global context object
- *
- * The #PangoContext structure stores global information
- * influencing Pango's operation, such as the fontmap used
- * to look up fonts, and default values such as the default
- * language, default gravity, or default font.
- */
-
-/**
* PangoContext:
*
- * The #PangoContext structure stores global information
- * used to control the itemization process.
+ * A `PangoContext` stores global information used to control the
+ * itemization process.
+ *
+ * The information stored by `PangoContext includes the fontmap used
+ * to look up fonts, and default values such as the default language,
+ * default gravity, or default font.
+ *
+ * To obtain a `PangoContext`, use [method@Pango.FontMap.create_context].
*/
struct _PangoContext
{
@@ -144,21 +127,21 @@ pango_context_finalize (GObject *object)
/**
* pango_context_new:
*
- * Creates a new #PangoContext initialized to default values.
+ * Creates a new `PangoContext` initialized to default values.
*
* This function is not particularly useful as it should always
- * be followed by a pango_context_set_font_map() call, and the
- * function pango_font_map_create_context() does these two steps
+ * be followed by a [method@Pango.Context.set_font_map] call, and the
+ * function [method@Pango.FontMap.create_context] does these two steps
* together and hence users are recommended to use that.
*
* If you are using Pango as part of a higher-level system,
- * that system may have it's own way of create a #PangoContext.
- * For instance, the GTK+ toolkit has, among others,
- * gtk_widget_get_pango_context(). Use those instead.
+ * that system may have it's own way of create a `PangoContext`.
+ * For instance, the GTK toolkit has, among others,
+ * `gtk_widget_get_pango_context()`. Use those instead.
*
- * Return value: the newly allocated #PangoContext, which should
- * be freed with g_object_unref().
- **/
+ * Return value: the newly allocated `PangoContext`, which should
+ * be freed with g_object_unref().
+ */
PangoContext *
pango_context_new (void)
{
@@ -180,22 +163,24 @@ update_resolved_gravity (PangoContext *context)
/**
* pango_context_set_matrix:
- * @context: a #PangoContext
- * @matrix: (allow-none): a #PangoMatrix, or %NULL to unset any existing
+ * @context: a `PangoContext`
+ * @matrix: (allow-none): a `PangoMatrix`, or %NULL to unset any existing
* matrix. (No matrix set is the same as setting the identity matrix.)
*
* Sets the transformation matrix that will be applied when rendering
- * with this context. Note that reported metrics are in the user space
- * coordinates before the application of the matrix, not device-space
- * coordinates after the application of the matrix. So, they don't scale
- * with the matrix, though they may change slightly for different
- * matrices, depending on how the text is fit to the pixel grid.
+ * with this context.
+ *
+ * Note that reported metrics are in the user space coordinates before
+ * the application of the matrix, not device-space coordinates after the
+ * application of the matrix. So, they don't scale with the matrix, though
+ * they may change slightly for different matrices, depending on how the
+ * text is fit to the pixel grid.
*
* Since: 1.6
- **/
+ */
void
-pango_context_set_matrix (PangoContext *context,
- const PangoMatrix *matrix)
+pango_context_set_matrix (PangoContext *context,
+ const PangoMatrix *matrix)
{
g_return_if_fail (PANGO_IS_CONTEXT (context));
@@ -214,17 +199,19 @@ pango_context_set_matrix (PangoContext *context,
/**
* pango_context_get_matrix:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
* Gets the transformation matrix that will be applied when
- * rendering with this context. See pango_context_set_matrix().
+ * rendering with this context.
+ *
+ * See [method@Pango.Context.set_matrix].
*
* Return value: (nullable): the matrix, or %NULL if no matrix has
- * been set (which is the same as the identity matrix). The returned
- * matrix is owned by Pango and must not be modified or freed.
+ * been set (which is the same as the identity matrix). The returned
+ * matrix is owned by Pango and must not be modified or freed.
*
* Since: 1.6
- **/
+ */
const PangoMatrix *
pango_context_get_matrix (PangoContext *context)
{
@@ -235,16 +222,19 @@ pango_context_get_matrix (PangoContext *context)
/**
* pango_context_set_font_map:
- * @context: a #PangoContext
- * @font_map: the #PangoFontMap to set.
+ * @context: a `PangoContext`
+ * @font_map: the `PangoFontMap` to set.
*
- * Sets the font map to be searched when fonts are looked-up in this context.
- * This is only for internal use by Pango backends, a #PangoContext obtained
- * via one of the recommended methods should already have a suitable font map.
- **/
+ * Sets the font map to be searched when fonts are looked-up
+ * in this context.
+ *
+ * This is only for internal use by Pango backends, a `PangoContext`
+ * obtained via one of the recommended methods should already have a
+ * suitable font map.
+ */
void
pango_context_set_font_map (PangoContext *context,
- PangoFontMap *font_map)
+ PangoFontMap *font_map)
{
g_return_if_fail (PANGO_IS_CONTEXT (context));
g_return_if_fail (!font_map || PANGO_IS_FONT_MAP (font_map));
@@ -266,15 +256,15 @@ pango_context_set_font_map (PangoContext *context,
/**
* pango_context_get_font_map:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
- * Gets the #PangoFontMap used to look up fonts for this context.
+ * Gets the `PangoFontMap` used to look up fonts for this context.
*
- * Return value: (transfer none): the font map for the #PangoContext.
- * This value is owned by Pango and should not be unreferenced.
+ * Return value: (transfer none): the font map for the `PangoContext`.
+ * This value is owned by Pango and should not be unreferenced.
*
* Since: 1.6
- **/
+ */
PangoFontMap *
pango_context_get_font_map (PangoContext *context)
{
@@ -285,18 +275,18 @@ pango_context_get_font_map (PangoContext *context)
/**
* pango_context_list_families:
- * @context: a #PangoContext
- * @families: (out) (array length=n_families) (transfer container): location to store a pointer to
- * an array of #PangoFontFamily *. This array should be freed
- * with g_free().
+ * @context: a `PangoContext`
+ * @families: (out) (array length=n_families) (transfer container): location
+ * to store a pointer to an array of `PangoFontFamily`. This array should
+ * be freed with g_free().
* @n_families: (out): location to store the number of elements in @descs
*
* List all families for a context.
- **/
+ */
void
-pango_context_list_families (PangoContext *context,
- PangoFontFamily ***families,
- int *n_families)
+pango_context_list_families (PangoContext *context,
+ PangoFontFamily ***families,
+ int *n_families)
{
g_return_if_fail (context != NULL);
g_return_if_fail (families == NULL || n_families != NULL);
@@ -308,7 +298,7 @@ pango_context_list_families (PangoContext *context,
{
*n_families = 0;
if (families)
- *families = NULL;
+ *families = NULL;
return;
}
@@ -318,18 +308,18 @@ pango_context_list_families (PangoContext *context,
/**
* pango_context_load_font:
- * @context: a #PangoContext
- * @desc: a #PangoFontDescription describing the font to load
+ * @context: a `PangoContext`
+ * @desc: a `PangoFontDescription` describing the font to load
*
* Loads the font in one of the fontmaps in the context
* that is the closest match for @desc.
*
- * Returns: (transfer full) (nullable): the newly allocated #PangoFont
- * that was loaded, or %NULL if no font matched.
- **/
+ * Returns: (transfer full) (nullable): the newly allocated `PangoFont`
+ * that was loaded, or %NULL if no font matched.
+ */
PangoFont *
pango_context_load_font (PangoContext *context,
- const PangoFontDescription *desc)
+ const PangoFontDescription *desc)
{
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (context->font_map != NULL, NULL);
@@ -339,20 +329,20 @@ pango_context_load_font (PangoContext *context,
/**
* pango_context_load_fontset:
- * @context: a #PangoContext
- * @desc: a #PangoFontDescription describing the fonts to load
- * @language: a #PangoLanguage the fonts will be used for
+ * @context: a `PangoContext`
+ * @desc: a `PangoFontDescription` describing the fonts to load
+ * @language: a `PangoLanguage` the fonts will be used for
*
* Load a set of fonts in the context that can be used to render
* a font matching @desc.
*
* Returns: (transfer full) (nullable): the newly allocated
- * #PangoFontset loaded, or %NULL if no font matched.
- **/
+ * `PangoFontset` loaded, or %NULL if no font matched.
+ */
PangoFontset *
pango_context_load_fontset (PangoContext *context,
- const PangoFontDescription *desc,
- PangoLanguage *language)
+ const PangoFontDescription *desc,
+ PangoLanguage *language)
{
g_return_val_if_fail (context != NULL, NULL);
@@ -361,14 +351,14 @@ pango_context_load_fontset (PangoContext *context,
/**
* pango_context_set_font_description:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @desc: the new pango font description
*
* Set the default font description for the context
- **/
+ */
void
pango_context_set_font_description (PangoContext *context,
- const PangoFontDescription *desc)
+ const PangoFontDescription *desc)
{
g_return_if_fail (context != NULL);
g_return_if_fail (desc != NULL);
@@ -385,13 +375,13 @@ pango_context_set_font_description (PangoContext *context,
/**
* pango_context_get_font_description:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
* Retrieve the default font description for the context.
*
* Return value: (transfer none): a pointer to the context's default font
- * description. This value must not be modified or freed.
- **/
+ * description. This value must not be modified or freed.
+ */
PangoFontDescription *
pango_context_get_font_description (PangoContext *context)
{
@@ -402,16 +392,17 @@ pango_context_get_font_description (PangoContext *context)
/**
* pango_context_set_language:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @language: the new language tag.
*
- * Sets the global language tag for the context. The default language
- * for the locale of the running process can be found using
- * pango_language_get_default().
- **/
+ * Sets the global language tag for the context.
+ *
+ * The default language for the locale of the running process
+ * can be found using [type_func@Pango.Language.get_default].
+ */
void
-pango_context_set_language (PangoContext *context,
- PangoLanguage *language)
+pango_context_set_language (PangoContext *context,
+ PangoLanguage *language)
{
g_return_if_fail (context != NULL);
@@ -427,12 +418,12 @@ pango_context_set_language (PangoContext *context,
/**
* pango_context_get_language:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
* Retrieves the global language tag for the context.
*
* Return value: the global language tag.
- **/
+ */
PangoLanguage *
pango_context_get_language (PangoContext *context)
{
@@ -443,7 +434,7 @@ pango_context_get_language (PangoContext *context)
/**
* pango_context_set_base_dir:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @direction: the new base direction
*
* Sets the base direction for the context.
@@ -451,13 +442,13 @@ pango_context_get_language (PangoContext *context)
* The base direction is used in applying the Unicode bidirectional
* algorithm; if the @direction is %PANGO_DIRECTION_LTR or
* %PANGO_DIRECTION_RTL, then the value will be used as the paragraph
- * direction in the Unicode bidirectional algorithm. A value of
+ * direction in the Unicode bidirectional algorithm. A value of
* %PANGO_DIRECTION_WEAK_LTR or %PANGO_DIRECTION_WEAK_RTL is used only
* for paragraphs that do not contain any strong characters themselves.
- **/
+ */
void
-pango_context_set_base_dir (PangoContext *context,
- PangoDirection direction)
+pango_context_set_base_dir (PangoContext *context,
+ PangoDirection direction)
{
g_return_if_fail (context != NULL);
@@ -469,13 +460,14 @@ pango_context_set_base_dir (PangoContext *context,
/**
* pango_context_get_base_dir:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
+ *
+ * Retrieves the base direction for the context.
*
- * Retrieves the base direction for the context. See
- * pango_context_set_base_dir().
+ * See [method@Pango.Context.set_base_dir].
*
* Return value: the base direction for the context.
- **/
+ */
PangoDirection
pango_context_get_base_dir (PangoContext *context)
{
@@ -486,7 +478,7 @@ pango_context_get_base_dir (PangoContext *context)
/**
* pango_context_set_base_gravity:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @gravity: the new base gravity
*
* Sets the base gravity for the context.
@@ -494,10 +486,10 @@ pango_context_get_base_dir (PangoContext *context)
* The base gravity is used in laying vertical text out.
*
* Since: 1.16
- **/
+ */
void
-pango_context_set_base_gravity (PangoContext *context,
- PangoGravity gravity)
+pango_context_set_base_gravity (PangoContext *context,
+ PangoGravity gravity)
{
g_return_if_fail (context != NULL);
@@ -511,15 +503,16 @@ pango_context_set_base_gravity (PangoContext *context,
/**
* pango_context_get_base_gravity:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
+ *
+ * Retrieves the base gravity for the context.
*
- * Retrieves the base gravity for the context. See
- * pango_context_set_base_gravity().
+ * See [method@Pango.Context.set_base_gravity].
*
* Return value: the base gravity for the context.
*
* Since: 1.16
- **/
+ */
PangoGravity
pango_context_get_base_gravity (PangoContext *context)
{
@@ -530,17 +523,19 @@ pango_context_get_base_gravity (PangoContext *context)
/**
* pango_context_get_gravity:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
+ *
+ * Retrieves the gravity for the context.
*
- * Retrieves the gravity for the context. This is similar to
- * pango_context_get_base_gravity(), except for when the base gravity
- * is %PANGO_GRAVITY_AUTO for which pango_gravity_get_for_matrix() is used
- * to return the gravity from the current context matrix.
+ * This is similar to [method@Pango.Context.get_base_gravity],
+ * except for when the base gravity is %PANGO_GRAVITY_AUTO for
+ * which [type_func@Pango.Gravity.get_for_matrix] is used to return the
+ * gravity from the current context matrix.
*
* Return value: the resolved gravity for the context.
*
* Since: 1.16
- **/
+ */
PangoGravity
pango_context_get_gravity (PangoContext *context)
{
@@ -551,20 +546,21 @@ pango_context_get_gravity (PangoContext *context)
/**
* pango_context_set_gravity_hint:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @hint: the new gravity hint
*
* Sets the gravity hint for the context.
*
- * The gravity hint is used in laying vertical text out, and is only relevant
- * if gravity of the context as returned by pango_context_get_gravity()
- * is set %PANGO_GRAVITY_EAST or %PANGO_GRAVITY_WEST.
+ * The gravity hint is used in laying vertical text out, and
+ * is only relevant if gravity of the context as returned by
+ * [method@Pango.Context.get_gravity] is set to %PANGO_GRAVITY_EAST
+ * or %PANGO_GRAVITY_WEST.
*
* Since: 1.16
- **/
+ */
void
-pango_context_set_gravity_hint (PangoContext *context,
- PangoGravityHint hint)
+pango_context_set_gravity_hint (PangoContext *context,
+ PangoGravityHint hint)
{
g_return_if_fail (context != NULL);
@@ -576,15 +572,16 @@ pango_context_set_gravity_hint (PangoContext *context,
/**
* pango_context_get_gravity_hint:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
+ *
+ * Retrieves the gravity hint for the context.
*
- * Retrieves the gravity hint for the context. See
- * pango_context_set_gravity_hint() for details.
+ * See [method@Pango.Context.set_gravity_hint] for details.
*
* Return value: the gravity hint for the context.
*
* Since: 1.16
- **/
+ */
PangoGravityHint
pango_context_get_gravity_hint (PangoContext *context)
{
@@ -597,7 +594,7 @@ pango_context_get_gravity_hint (PangoContext *context)
static gboolean
advance_attr_iterator_to (PangoAttrIterator *iterator,
- int start_index)
+ int start_index)
{
int start_range, end_range;
@@ -606,13 +603,13 @@ advance_attr_iterator_to (PangoAttrIterator *iterator,
while (start_index >= end_range)
{
if (!pango_attr_iterator_next (iterator))
- return FALSE;
+ return FALSE;
pango_attr_iterator_range (iterator, &start_range, &end_range);
}
if (start_range > start_index)
g_warning ("In pango_itemize(), the cached iterator passed in "
- "had already moved beyond the start_index");
+ "had already moved beyond the start_index");
return TRUE;
}
@@ -659,7 +656,7 @@ retry:
{
cache = g_slice_new (FontCache);
cache->hash = g_hash_table_new_full (g_direct_hash, NULL,
- NULL, (GDestroyNotify)font_element_destroy);
+ NULL, (GDestroyNotify)font_element_destroy);
if (!g_object_replace_qdata (G_OBJECT (fontset), cache_quark, NULL,
cache, (GDestroyNotify)font_cache_destroy,
NULL))
@@ -674,8 +671,8 @@ retry:
static gboolean
font_cache_get (FontCache *cache,
- gunichar wc,
- PangoFont **font)
+ gunichar wc,
+ PangoFont **font)
{
FontElement *element;
@@ -692,8 +689,8 @@ font_cache_get (FontCache *cache,
static void
font_cache_insert (FontCache *cache,
- gunichar wc,
- PangoFont *font)
+ gunichar wc,
+ PangoFont *font)
{
FontElement *element = g_slice_new (FontElement);
element->font = font ? g_object_ref (font) : NULL;
@@ -719,11 +716,11 @@ typedef struct _PangoWidthIter PangoWidthIter;
struct _PangoWidthIter
{
- const gchar *text_start;
- const gchar *text_end;
- const gchar *start;
- const gchar *end;
- gboolean upright;
+ const gchar *text_start;
+ const gchar *text_end;
+ const gchar *start;
+ const gchar *end;
+ gboolean upright;
};
typedef struct _ItemizeState ItemizeState;
@@ -784,7 +781,7 @@ update_embedding_end (ItemizeState *state)
{
state->embedding = state->embedding_levels[state->embedding_end_offset];
while (state->embedding_end < state->end &&
- state->embedding_levels[state->embedding_end_offset] == state->embedding)
+ state->embedding_levels[state->embedding_end_offset] == state->embedding)
{
state->embedding_end_offset++;
state->embedding_end = g_utf8_next_char (state->embedding_end);
@@ -795,7 +792,7 @@ update_embedding_end (ItemizeState *state)
static PangoAttribute *
find_attribute (GSList *attr_list,
- PangoAttrType type)
+ PangoAttrType type)
{
GSList *node;
@@ -830,7 +827,7 @@ update_attr_iterator (ItemizeState *state)
pango_font_description_free (state->font_desc);
state->font_desc = pango_font_description_copy_static (state->context->font_desc);
pango_attr_iterator_get_font (state->attr_iter, state->font_desc,
- &state->lang, &state->extra_attrs);
+ &state->lang, &state->extra_attrs);
if (pango_font_description_get_set_fields (state->font_desc) & PANGO_FONT_MASK_GRAVITY)
state->font_desc_gravity = pango_font_description_get_gravity (state->font_desc);
else
@@ -971,7 +968,9 @@ width_iter_next(PangoWidthIter* iter)
}
static void
-width_iter_init (PangoWidthIter* iter, const char* text, int length)
+width_iter_init (PangoWidthIter *iter,
+ const char *text,
+ int length)
{
iter->text_start = text;
iter->text_end = text + length;
@@ -986,15 +985,15 @@ width_iter_fini (PangoWidthIter* iter)
}
static void
-itemize_state_init (ItemizeState *state,
- PangoContext *context,
- const char *text,
- PangoDirection base_dir,
- int start_index,
- int length,
- PangoAttrList *attrs,
- PangoAttrIterator *cached_iter,
- const PangoFontDescription *desc)
+itemize_state_init (ItemizeState *state,
+ PangoContext *context,
+ const char *text,
+ PangoDirection base_dir,
+ int start_index,
+ int length,
+ PangoAttrList *attrs,
+ PangoAttrIterator *cached_iter,
+ const PangoFontDescription *desc)
{
state->context = context;
@@ -1059,7 +1058,7 @@ itemize_state_init (ItemizeState *state,
*/
_pango_script_iter_init (&state->script_iter, text + start_index, length);
pango_script_iter_get_range (&state->script_iter, NULL,
- &state->script_end, &state->script);
+ &state->script_end, &state->script);
width_iter_init (&state->width_iter, text + start_index, length);
_pango_emoji_iter_init (&state->emoji_iter, text + start_index, length);
@@ -1110,7 +1109,7 @@ itemize_state_next (ItemizeState *state)
{
pango_script_iter_next (&state->script_iter);
pango_script_iter_get_range (&state->script_iter, NULL,
- &state->script_end, &state->script);
+ &state->script_end, &state->script);
state->changed |= SCRIPT_CHANGED;
}
if (state->run_end == state->emoji_iter.end)
@@ -1146,7 +1145,7 @@ copy_attr_slist (GSList *attr_slist)
static void
itemize_state_fill_font (ItemizeState *state,
- PangoFont *font)
+ PangoFont *font)
{
GList *l;
@@ -1156,33 +1155,33 @@ itemize_state_fill_font (ItemizeState *state,
if (item->analysis.font)
break;
if (font)
- item->analysis.font = g_object_ref (font);
+ item->analysis.font = g_object_ref (font);
}
}
static void
itemize_state_add_character (ItemizeState *state,
- PangoFont *font,
- gboolean force_break,
- const char *pos)
+ PangoFont *font,
+ gboolean force_break,
+ const char *pos)
{
if (state->item)
{
if (!state->item->analysis.font && font)
- {
- itemize_state_fill_font (state, font);
- }
+ {
+ itemize_state_fill_font (state, font);
+ }
else if (state->item->analysis.font && !font)
- {
- font = state->item->analysis.font;
- }
+ {
+ font = state->item->analysis.font;
+ }
if (!force_break &&
- state->item->analysis.font == font)
- {
- state->item->num_chars++;
- return;
- }
+ state->item->analysis.font == font)
+ {
+ state->item->num_chars++;
+ return;
+ }
state->item->length = (pos - state->text) - state->item->offset;
}
@@ -1200,15 +1199,15 @@ itemize_state_add_character (ItemizeState *state,
state->item->analysis.gravity = state->resolved_gravity;
/* The level vs. gravity dance:
- * - If gravity is SOUTH, leave level untouched.
- * - If gravity is NORTH, step level one up, to
- * not get mirrored upside-down text.
- * - If gravity is EAST, step up to an even level, as
- * it's a clockwise-rotated layout, so the rotated
- * top is unrotated left.
- * - If gravity is WEST, step up to an odd level, as
- * it's a counter-clockwise-rotated layout, so the rotated
- * top is unrotated right.
+ * - If gravity is SOUTH, leave level untouched.
+ * - If gravity is NORTH, step level one up, to
+ * not get mirrored upside-down text.
+ * - If gravity is EAST, step up to an even level, as
+ * it's a clockwise-rotated layout, so the rotated
+ * top is unrotated left.
+ * - If gravity is WEST, step up to an odd level, as
+ * it's a counter-clockwise-rotated layout, so the rotated
+ * top is unrotated right.
*
* A similar dance is performed in pango-layout.c:
* line_set_resolved_dir(). Keep in synch.
@@ -1217,17 +1216,17 @@ itemize_state_add_character (ItemizeState *state,
{
case PANGO_GRAVITY_SOUTH:
default:
- break;
+ break;
case PANGO_GRAVITY_NORTH:
- state->item->analysis.level++;
- break;
+ state->item->analysis.level++;
+ break;
case PANGO_GRAVITY_EAST:
- state->item->analysis.level += 1;
- state->item->analysis.level &= ~1;
- break;
+ state->item->analysis.level += 1;
+ state->item->analysis.level &= ~1;
+ break;
case PANGO_GRAVITY_WEST:
- state->item->analysis.level |= 1;
- break;
+ state->item->analysis.level |= 1;
+ break;
}
state->item->analysis.flags = state->centered_baseline ? PANGO_ANALYSIS_FLAG_CENTERED_BASELINE : 0;
@@ -1256,8 +1255,8 @@ typedef struct {
static gboolean
get_font_foreach (PangoFontset *fontset,
- PangoFont *font,
- gpointer data)
+ PangoFont *font,
+ gpointer data)
{
GetFontInfo *info = data;
@@ -1284,8 +1283,8 @@ get_base_font (ItemizeState *state)
{
if (!state->base_font)
state->base_font = pango_font_map_load_font (state->context->font_map,
- state->context,
- state->font_desc);
+ state->context,
+ state->font_desc);
return state->base_font;
}
@@ -1321,7 +1320,7 @@ get_font (ItemizeState *state,
static PangoLanguage *
compute_derived_language (PangoLanguage *lang,
- PangoScript script)
+ PangoScript script)
{
PangoLanguage *derived_lang;
@@ -1342,7 +1341,7 @@ compute_derived_language (PangoLanguage *lang,
* safe here, though Keith Packard claims it is.
*/
if (!derived_lang)
- derived_lang = pango_language_from_string ("xx");
+ derived_lang = pango_language_from_string ("xx");
}
return derived_lang;
@@ -1357,28 +1356,28 @@ itemize_state_update_for_new_run (ItemizeState *state)
{
/* Font-desc gravity overrides everything */
if (state->font_desc_gravity != PANGO_GRAVITY_AUTO)
- {
- state->resolved_gravity = state->font_desc_gravity;
- }
+ {
+ state->resolved_gravity = state->font_desc_gravity;
+ }
else
- {
- PangoGravity gravity = state->gravity;
- PangoGravityHint gravity_hint = state->gravity_hint;
+ {
+ PangoGravity gravity = state->gravity;
+ PangoGravityHint gravity_hint = state->gravity_hint;
- if (G_LIKELY (gravity == PANGO_GRAVITY_AUTO))
- gravity = state->context->resolved_gravity;
+ if (G_LIKELY (gravity == PANGO_GRAVITY_AUTO))
+ gravity = state->context->resolved_gravity;
- state->resolved_gravity = pango_gravity_get_for_script_and_width (state->script,
- state->width_iter.upright,
- gravity,
- gravity_hint);
- }
+ state->resolved_gravity = pango_gravity_get_for_script_and_width (state->script,
+ state->width_iter.upright,
+ gravity,
+ gravity_hint);
+ }
if (state->font_desc_gravity != state->resolved_gravity)
- {
- pango_font_description_set_gravity (state->font_desc, state->resolved_gravity);
- state->changed |= FONT_CHANGED;
- }
+ {
+ pango_font_description_set_gravity (state->font_desc, state->resolved_gravity);
+ state->changed |= FONT_CHANGED;
+ }
}
if (state->changed & (SCRIPT_CHANGED | LANG_CHANGED))
@@ -1386,7 +1385,7 @@ itemize_state_update_for_new_run (ItemizeState *state)
PangoLanguage *old_derived_lang = state->derived_lang;
state->derived_lang = compute_derived_language (state->lang, state->script);
if (old_derived_lang != state->derived_lang)
- state->changed |= DERIVED_LANG_CHANGED;
+ state->changed |= DERIVED_LANG_CHANGED;
}
if (state->changed & (EMOJI_CHANGED))
@@ -1411,9 +1410,9 @@ itemize_state_update_for_new_run (ItemizeState *state)
pango_font_description_set_family_static (state->emoji_font_desc, "emoji");
}
state->current_fonts = pango_font_map_load_fontset (state->context->font_map,
- state->context,
- is_emoji ? state->emoji_font_desc : state->font_desc,
- state->derived_lang);
+ state->context,
+ is_emoji ? state->emoji_font_desc : state->font_desc,
+ state->derived_lang);
state->cache = get_font_cache (state->current_fonts);
}
@@ -1470,16 +1469,16 @@ itemize_state_process_run (ItemizeState *state)
(wc >= 0xfe00u && wc <= 0xfe0fu) ||
(wc >= 0xe0100u && wc <= 0xe01efu)))
{
- font = NULL;
+ font = NULL;
}
else
{
- get_font (state, wc, &font);
- }
+ get_font (state, wc, &font);
+ }
itemize_state_add_character (state, font,
- is_forced_break || last_was_forced_break,
- p);
+ is_forced_break || last_was_forced_break,
+ p);
last_was_forced_break = is_forced_break;
}
@@ -1534,35 +1533,36 @@ itemize_state_finish (ItemizeState *state)
/**
* pango_itemize_with_base_dir:
- * @context: a structure holding information that affects
- * the itemization process.
- * @base_dir: base direction to use for bidirectional processing
- * @text: the text to itemize.
+ * @context: a structure holding information that affects
+ * the itemization process.
+ * @base_dir: base direction to use for bidirectional processing
+ * @text: the text to itemize.
* @start_index: first byte in @text to process
- * @length: the number of bytes (not characters) to process
- * after @start_index. This must be >= 0.
- * @attrs: the set of attributes that apply to @text.
+ * @length: the number of bytes (not characters) to process
+ * after @start_index. This must be >= 0.
+ * @attrs: the set of attributes that apply to @text.
* @cached_iter: (allow-none): Cached attribute iterator, or %NULL
*
- * Like pango_itemize(), but the base direction to use when
- * computing bidirectional levels (see pango_context_set_base_dir ()),
- * is specified explicitly rather than gotten from the #PangoContext.
+ * Like `pango_itemize()`, but with an explicitly specified base direction.
*
- * Return value: (transfer full) (element-type Pango.Item): a #GList of
- * #PangoItem structures. The items should be freed using
- * pango_item_free() probably in combination with
- * g_list_foreach(), and the list itself using g_list_free().
+ * The base direction is used when computing bidirectional levels.
+ * (see [method@Pango.Context.set_base_dir]). [func@itemize] gets the
+ * base direction from the `PangoContext`.
+ *
+ * Return value: (transfer full) (element-type Pango.Item): a `GList` of
+ * [struct@Pango.Item] structures. The items should be freed using
+ * [method@Pango.Item.free] probably in combination with g_list_free_full().
*
* Since: 1.4
*/
GList *
pango_itemize_with_base_dir (PangoContext *context,
- PangoDirection base_dir,
- const char *text,
- int start_index,
- int length,
- PangoAttrList *attrs,
- PangoAttrIterator *cached_iter)
+ PangoDirection base_dir,
+ const char *text,
+ int start_index,
+ int length,
+ PangoAttrList *attrs,
+ PangoAttrIterator *cached_iter)
{
ItemizeState state;
@@ -1575,7 +1575,7 @@ pango_itemize_with_base_dir (PangoContext *context,
return NULL;
itemize_state_init (&state, context, text, base_dir, start_index, length,
- attrs, cached_iter, NULL);
+ attrs, cached_iter, NULL);
do
itemize_state_process_run (&state);
@@ -1588,10 +1588,10 @@ pango_itemize_with_base_dir (PangoContext *context,
static GList *
itemize_with_font (PangoContext *context,
- const char *text,
- int start_index,
- int length,
- const PangoFontDescription *desc)
+ const char *text,
+ int start_index,
+ int length,
+ const PangoFontDescription *desc)
{
ItemizeState state;
@@ -1599,7 +1599,7 @@ itemize_with_font (PangoContext *context,
return NULL;
itemize_state_init (&state, context, text, context->base_dir, start_index, length,
- NULL, NULL, desc);
+ NULL, NULL, desc);
do
itemize_state_process_run (&state);
@@ -1612,39 +1612,39 @@ itemize_with_font (PangoContext *context,
/**
* pango_itemize:
- * @context: a structure holding information that affects
- the itemization process.
- * @text: the text to itemize. Must be valid UTF-8
+ * @context: a structure holding information that affects
+ * the itemization process.
+ * @text: the text to itemize. Must be valid UTF-8
* @start_index: first byte in @text to process
- * @length: the number of bytes (not characters) to process
- * after @start_index.
- * This must be >= 0.
- * @attrs: the set of attributes that apply to @text.
+ * @length: the number of bytes (not characters) to process
+ * after @start_index. This must be >= 0.
+ * @attrs: the set of attributes that apply to @text.
* @cached_iter: (allow-none): Cached attribute iterator, or %NULL
*
- * Breaks a piece of text into segments with consistent
- * directional level and shaping engine. Each byte of @text will
- * be contained in exactly one of the items in the returned list;
- * the generated list of items will be in logical order (the start
- * offsets of the items are ascending).
- *
- * @cached_iter should be an iterator over @attrs currently positioned at a
- * range before or containing @start_index; @cached_iter will be advanced to
- * the range covering the position just after @start_index + @length.
- * (i.e. if itemizing in a loop, just keep passing in the same @cached_iter).
- *
- * Return value: (transfer full) (element-type Pango.Item): a #GList of #PangoItem
- * structures. The items should be freed using pango_item_free()
- * probably in combination with g_list_foreach(), and the list itself
- * using g_list_free().
+ * Breaks a piece of text into segments with consistent directional
+ * level and font.
+ *
+ * Each byte of @text will be contained in exactly one of the items in the
+ * returned list; the generated list of items will be in logical order (the
+ * start offsets of the items are ascending).
+ *
+ * @cached_iter should be an iterator over @attrs currently positioned
+ * at a range before or containing @start_index; @cached_iter will be
+ * advanced to the range covering the position just after
+ * @start_index + @length. (i.e. if itemizing in a loop, just keep passing
+ * in the same @cached_iter).
+ *
+ * Return value: (transfer full) (element-type Pango.Item): a `GList` of
+ * [struct@Pango.Item] structures. The items should be freed using
+ * [method@Pango.Item.free] probably in combination with g_list_free_full().
*/
GList *
pango_itemize (PangoContext *context,
- const char *text,
- int start_index,
- int length,
- PangoAttrList *attrs,
- PangoAttrIterator *cached_iter)
+ const char *text,
+ int start_index,
+ int length,
+ PangoAttrList *attrs,
+ PangoAttrIterator *cached_iter)
{
g_return_val_if_fail (context != NULL, NULL);
g_return_val_if_fail (start_index >= 0, NULL);
@@ -1652,13 +1652,13 @@ pango_itemize (PangoContext *context,
g_return_val_if_fail (length == 0 || text != NULL, NULL);
return pango_itemize_with_base_dir (context, context->base_dir,
- text, start_index, length, attrs, cached_iter);
+ text, start_index, length, attrs, cached_iter);
}
static gboolean
get_first_metrics_foreach (PangoFontset *fontset,
- PangoFont *font,
- gpointer data)
+ PangoFont *font,
+ gpointer data)
{
PangoFontMetrics *fontset_metrics = data;
PangoLanguage *language = PANGO_FONTSET_GET_CLASS (fontset)->get_language (fontset);
@@ -1675,7 +1675,7 @@ get_first_metrics_foreach (PangoFontset *fontset,
pango_font_metrics_unref (font_metrics);
- return TRUE; /* Stops iteration */
+ return TRUE; /* Stops iteration */
}
static PangoFontMetrics *
@@ -1691,10 +1691,10 @@ get_base_metrics (PangoFontset *fontset)
static void
update_metrics_from_items (PangoFontMetrics *metrics,
- PangoLanguage *language,
- const char *text,
- unsigned int text_len,
- GList *items)
+ PangoLanguage *language,
+ const char *text,
+ unsigned int text_len,
+ GList *items)
{
GHashTable *fonts_seen = g_hash_table_new (NULL, NULL);
@@ -1713,20 +1713,20 @@ update_metrics_from_items (PangoFontMetrics *metrics,
PangoFont *font = item->analysis.font;
if (font != NULL && g_hash_table_lookup (fonts_seen, font) == NULL)
- {
- PangoFontMetrics *raw_metrics = pango_font_get_metrics (font, language);
- g_hash_table_insert (fonts_seen, font, font);
-
- /* metrics will already be initialized from the first font in the fontset */
- metrics->ascent = MAX (metrics->ascent, raw_metrics->ascent);
- metrics->descent = MAX (metrics->descent, raw_metrics->descent);
- metrics->height = MAX (metrics->height, raw_metrics->height);
- pango_font_metrics_unref (raw_metrics);
- }
+ {
+ PangoFontMetrics *raw_metrics = pango_font_get_metrics (font, language);
+ g_hash_table_insert (fonts_seen, font, font);
+
+ /* metrics will already be initialized from the first font in the fontset */
+ metrics->ascent = MAX (metrics->ascent, raw_metrics->ascent);
+ metrics->descent = MAX (metrics->descent, raw_metrics->descent);
+ metrics->height = MAX (metrics->height, raw_metrics->height);
+ pango_font_metrics_unref (raw_metrics);
+ }
pango_shape_full (text + item->offset, item->length,
- text, text_len,
- &item->analysis, glyphs);
+ text, text_len,
+ &item->analysis, glyphs);
metrics->approximate_char_width += pango_glyph_string_get_width (glyphs);
}
@@ -1740,35 +1740,34 @@ update_metrics_from_items (PangoFontMetrics *metrics,
/**
* pango_context_get_metrics:
- * @context: a #PangoContext
- * @desc: (allow-none): a #PangoFontDescription structure. %NULL means that the
- * font description from the context will be used.
+ * @context: a `PangoContext`
+ * @desc: (allow-none): a `PangoFontDescription` structure. %NULL means that the
+ * font description from the context will be used.
* @language: (allow-none): language tag used to determine which script to get
- * the metrics for. %NULL means that the language tag from the context
- * will be used. If no language tag is set on the context, metrics
- * for the default language (as determined by pango_language_get_default())
- * will be returned.
- *
- * Get overall metric information for a particular font
- * description. Since the metrics may be substantially different for
- * different scripts, a language tag can be provided to indicate that
- * the metrics should be retrieved that correspond to the script(s)
- * used by that language.
- *
- * The #PangoFontDescription is interpreted in the same way as
- * by pango_itemize(), and the family name may be a comma separated
- * list of figures. If characters from multiple of these families
- * would be used to render the string, then the returned fonts would
- * be a composite of the metrics for the fonts loaded for the
- * individual families.
- *
- * Return value: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
- * when finished using the object.
- **/
+ * the metrics for. %NULL means that the language tag from the context
+ * will be used. If no language tag is set on the context, metrics
+ * for the default language (as determined by [type_func@Pango.Language.get_default]
+ * will be returned.
+ *
+ * Get overall metric information for a particular font description.
+ *
+ * Since the metrics may be substantially different for different scripts,
+ * a language tag can be provided to indicate that the metrics should be
+ * retrieved that correspond to the script(s) used by that language.
+ *
+ * The `PangoFontDescription` is interpreted in the same way as by [func@itemize],
+ * and the family name may be a comma separated list of names. If characters
+ * from multiple of these families would be used to render the string, then
+ * the returned fonts would be a composite of the metrics for the fonts loaded
+ * for the individual families.
+ *
+ * Return value: a `PangoFontMetrics` object. The caller must call
+ * [method@Pango.FontMetrics.unref] when finished using the object.
+ */
PangoFontMetrics *
-pango_context_get_metrics (PangoContext *context,
- const PangoFontDescription *desc,
- PangoLanguage *language)
+pango_context_get_metrics (PangoContext *context,
+ const PangoFontDescription *desc,
+ PangoLanguage *language)
{
PangoFontset *current_fonts = NULL;
PangoFontMetrics *metrics;
@@ -1802,7 +1801,7 @@ pango_context_get_metrics (PangoContext *context,
}
static void
-context_changed (PangoContext *context)
+context_changed (PangoContext *context)
{
context->serial++;
if (context->serial == 0)
@@ -1811,9 +1810,9 @@ context_changed (PangoContext *context)
/**
* pango_context_changed:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
- * Forces a change in the context, which will cause any #PangoLayout
+ * Forces a change in the context, which will cause any `PangoLayout`
* using this context to re-layout.
*
* This function is only useful when implementing a new backend
@@ -1824,7 +1823,7 @@ context_changed (PangoContext *context)
* Since: 1.32.4
**/
void
-pango_context_changed (PangoContext *context)
+pango_context_changed (PangoContext *context)
{
context_changed (context);
}
@@ -1845,23 +1844,25 @@ check_fontmap_changed (PangoContext *context)
/**
* pango_context_get_serial:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
+ *
+ * Returns the current serial number of @context.
*
- * Returns the current serial number of @context. The serial number is
- * initialized to an small number larger than zero when a new context
- * is created and is increased whenever the context is changed using any
- * of the setter functions, or the #PangoFontMap it uses to find fonts has
- * changed. The serial may wrap, but will never have the value 0. Since it
- * can wrap, never compare it with "less than", always use "not equals".
+ * The serial number is initialized to an small number larger than zero
+ * when a new context is created and is increased whenever the context
+ * is changed using any of the setter functions, or the `PangoFontMap` it
+ * uses to find fonts has changed. The serial may wrap, but will never
+ * have the value 0. Since it can wrap, never compare it with "less than",
+ * always use "not equals".
*
- * This can be used to automatically detect changes to a #PangoContext, and
- * is only useful when implementing objects that need update when their
- * #PangoContext changes, like #PangoLayout.
+ * This can be used to automatically detect changes to a `PangoContext`,
+ * and is only useful when implementing objects that need update when their
+ * `PangoContext` changes, like `PangoLayout`.
*
* Return value: The current serial number of @context.
*
* Since: 1.32.4
- **/
+ */
guint
pango_context_get_serial (PangoContext *context)
{
@@ -1871,7 +1872,7 @@ pango_context_get_serial (PangoContext *context)
/**
* pango_context_set_round_glyph_positions:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
* @round_positions: whether to round glyph positions
*
* Sets whether font rendering with this context should
@@ -1899,7 +1900,7 @@ pango_context_set_round_glyph_positions (PangoContext *context,
/**
* pango_context_get_round_glyph_positions:
- * @context: a #PangoContext
+ * @context: a `PangoContext`
*
* Returns whether font rendering with this context should
* round glyph positions and widths.