Blame pango/pango-glyph.h

Packit 0ec9dd
/* Pango
Packit 0ec9dd
 * pango-glyph.h: Glyph storage
Packit 0ec9dd
 *
Packit 0ec9dd
 * Copyright (C) 2000 Red Hat Software
Packit 0ec9dd
 *
Packit 0ec9dd
 * This library is free software; you can redistribute it and/or
Packit 0ec9dd
 * modify it under the terms of the GNU Library General Public
Packit 0ec9dd
 * License as published by the Free Software Foundation; either
Packit 0ec9dd
 * version 2 of the License, or (at your option) any later version.
Packit 0ec9dd
 *
Packit 0ec9dd
 * This library is distributed in the hope that it will be useful,
Packit 0ec9dd
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 0ec9dd
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
Packit 0ec9dd
 * Library General Public License for more details.
Packit 0ec9dd
 *
Packit 0ec9dd
 * You should have received a copy of the GNU Library General Public
Packit 0ec9dd
 * License along with this library; if not, write to the
Packit 0ec9dd
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 0ec9dd
 * Boston, MA 02111-1307, USA.
Packit 0ec9dd
 */
Packit 0ec9dd
Packit 0ec9dd
#ifndef __PANGO_GLYPH_H__
Packit 0ec9dd
#define __PANGO_GLYPH_H__
Packit 0ec9dd
Packit 0ec9dd
#include <pango/pango-types.h>
Packit 0ec9dd
#include <pango/pango-item.h>
Packit 0ec9dd
Packit 0ec9dd
G_BEGIN_DECLS
Packit 0ec9dd
Packit 0ec9dd
typedef struct _PangoGlyphGeometry PangoGlyphGeometry;
Packit 0ec9dd
typedef struct _PangoGlyphVisAttr PangoGlyphVisAttr;
Packit 0ec9dd
typedef struct _PangoGlyphInfo PangoGlyphInfo;
Packit 0ec9dd
typedef struct _PangoGlyphString PangoGlyphString;
Packit 0ec9dd
Packit 0ec9dd
/* 1024ths of a device unit */
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoGlyphUnit:
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoGlyphUnit type is used to store dimensions within
Packit 0ec9dd
 * Pango. Dimensions are stored in 1/%PANGO_SCALE of a device unit.
Packit 0ec9dd
 * (A device unit might be a pixel for screen display, or
Packit 0ec9dd
 * a point on a printer.) %PANGO_SCALE is currently 1024, and
Packit 0ec9dd
 * may change in the future (unlikely though), but you should not
Packit 0ec9dd
 * depend on its exact value. The PANGO_PIXELS() macro can be used
Packit 0ec9dd
 * to convert from glyph units into device units with correct rounding.
Packit 0ec9dd
 */
Packit 0ec9dd
typedef gint32 PangoGlyphUnit;
Packit 0ec9dd
Packit 0ec9dd
/* Positioning information about a glyph
Packit 0ec9dd
 */
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoGlyphGeometry:
Packit 0ec9dd
 * @width: the logical width to use for the the character.
Packit 0ec9dd
 * @x_offset: horizontal offset from nominal character position.
Packit 0ec9dd
 * @y_offset: vertical offset from nominal character position.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoGlyphGeometry structure contains width and positioning
Packit 0ec9dd
 * information for a single glyph.
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoGlyphGeometry
Packit 0ec9dd
{
Packit 0ec9dd
  PangoGlyphUnit width;
Packit 0ec9dd
  PangoGlyphUnit x_offset;
Packit 0ec9dd
  PangoGlyphUnit y_offset;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/* Visual attributes of a glyph
Packit 0ec9dd
 */
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoGlyphVisAttr:
Packit 0ec9dd
 * @is_cluster_start: set for the first logical glyph in each cluster. (Clusters
Packit 0ec9dd
 * are stored in visual order, within the cluster, glyphs
Packit 0ec9dd
 * are always ordered in logical order, since visual
Packit 0ec9dd
 * order is meaningless; that is, in Arabic text, accent glyphs
Packit 0ec9dd
 * follow the glyphs for the base character.)
Packit 0ec9dd
 *
Packit 0ec9dd
 * The PangoGlyphVisAttr is used to communicate information between
Packit 0ec9dd
 * the shaping phase and the rendering phase.  More attributes may be
Packit 0ec9dd
 * added in the future.
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoGlyphVisAttr
Packit 0ec9dd
{
Packit 0ec9dd
  guint is_cluster_start : 1;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/* A single glyph
Packit 0ec9dd
 */
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoGlyphInfo:
Packit 0ec9dd
 * @glyph: the glyph itself.
Packit 0ec9dd
 * @geometry: the positional information about the glyph.
Packit 0ec9dd
 * @attr: the visual attributes of the glyph.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoGlyphInfo structure represents a single glyph together with
Packit 0ec9dd
 * positioning information and visual attributes.
Packit 0ec9dd
 * It contains the following fields.
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoGlyphInfo
Packit 0ec9dd
{
Packit 0ec9dd
  PangoGlyph    glyph;
Packit 0ec9dd
  PangoGlyphGeometry geometry;
Packit 0ec9dd
  PangoGlyphVisAttr  attr;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/* A string of glyphs with positional information and visual attributes -
Packit 0ec9dd
 * ready for drawing
Packit 0ec9dd
 */
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoGlyphString:
Packit 0ec9dd
 * @num_glyphs: number of the glyphs in this glyph string.
Packit 0ec9dd
 * @glyphs: (array length=num_glyphs): array of glyph information
Packit 0ec9dd
 *          for the glyph string.
Packit 0ec9dd
 * @log_clusters: logical cluster info, indexed by the byte index
Packit 0ec9dd
 *                within the text corresponding to the glyph string.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoGlyphString structure is used to store strings
Packit 0ec9dd
 * of glyphs with geometry and visual attribute information.
Packit 0ec9dd
 * The storage for the glyph information is owned
Packit 0ec9dd
 * by the structure which simplifies memory management.
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoGlyphString {
Packit 0ec9dd
  gint num_glyphs;
Packit 0ec9dd
Packit 0ec9dd
  PangoGlyphInfo *glyphs;
Packit 0ec9dd
Packit 0ec9dd
  /* This is a memory inefficient way of representing the information
Packit 0ec9dd
   * here - each value gives the byte index within the text
Packit 0ec9dd
   * corresponding to the glyph string of the start of the cluster to
Packit 0ec9dd
   * which the glyph belongs.
Packit 0ec9dd
   */
Packit 0ec9dd
  gint *log_clusters;
Packit 0ec9dd
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  gint space;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_TYPE_GLYPH_STRING:
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #GObject type for #PangoGlyphString.
Packit 0ec9dd
 */
Packit 0ec9dd
#define PANGO_TYPE_GLYPH_STRING (pango_glyph_string_get_type ())
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
PangoGlyphString *pango_glyph_string_new      (void);
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void              pango_glyph_string_set_size (PangoGlyphString *string,
Packit 0ec9dd
					       gint              new_len);
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
GType             pango_glyph_string_get_type (void) G_GNUC_CONST;
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
PangoGlyphString *pango_glyph_string_copy     (PangoGlyphString *string);
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void              pango_glyph_string_free     (PangoGlyphString *string);
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void              pango_glyph_string_extents  (PangoGlyphString *glyphs,
Packit 0ec9dd
					       PangoFont        *font,
Packit 0ec9dd
					       PangoRectangle   *ink_rect,
Packit 0ec9dd
					       PangoRectangle   *logical_rect);
Packit 0ec9dd
PANGO_AVAILABLE_IN_1_14
Packit 0ec9dd
int               pango_glyph_string_get_width(PangoGlyphString *glyphs);
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void              pango_glyph_string_extents_range  (PangoGlyphString *glyphs,
Packit 0ec9dd
						     int               start,
Packit 0ec9dd
						     int               end,
Packit 0ec9dd
						     PangoFont        *font,
Packit 0ec9dd
						     PangoRectangle   *ink_rect,
Packit 0ec9dd
						     PangoRectangle   *logical_rect);
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void pango_glyph_string_get_logical_widths (PangoGlyphString *glyphs,
Packit 0ec9dd
					    const char       *text,
Packit 0ec9dd
					    int               length,
Packit 0ec9dd
					    int               embedding_level,
Packit 0ec9dd
					    int              *logical_widths);
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void pango_glyph_string_index_to_x (PangoGlyphString *glyphs,
Packit 0ec9dd
				    char             *text,
Packit 0ec9dd
				    int               length,
Packit 0ec9dd
				    PangoAnalysis    *analysis,
Packit 0ec9dd
				    int               index_,
Packit 0ec9dd
				    gboolean          trailing,
Packit 0ec9dd
				    int              *x_pos);
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void pango_glyph_string_x_to_index (PangoGlyphString *glyphs,
Packit 0ec9dd
				    char             *text,
Packit 0ec9dd
				    int               length,
Packit 0ec9dd
				    PangoAnalysis    *analysis,
Packit 0ec9dd
				    int               x_pos,
Packit 0ec9dd
				    int              *index_,
Packit 0ec9dd
				    int              *trailing);
Packit 0ec9dd
Packit 0ec9dd
/* Turn a string of characters into a string of glyphs
Packit 0ec9dd
 */
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
void pango_shape (const gchar      *text,
Packit 0ec9dd
		  gint              length,
Packit 0ec9dd
		  const PangoAnalysis *analysis,
Packit 0ec9dd
		  PangoGlyphString *glyphs);
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_1_32
Packit 0ec9dd
void pango_shape_full (const gchar      *item_text,
Packit 0ec9dd
		       gint              item_length,
Packit 0ec9dd
		       const gchar      *paragraph_text,
Packit 0ec9dd
		       gint              paragraph_length,
Packit 0ec9dd
		       const PangoAnalysis *analysis,
Packit 0ec9dd
		       PangoGlyphString *glyphs);
Packit 0ec9dd
Packit 0ec9dd
PANGO_AVAILABLE_IN_ALL
Packit 0ec9dd
GList *pango_reorder_items (GList *logical_items);
Packit 0ec9dd
Packit 0ec9dd
G_END_DECLS
Packit 0ec9dd
Packit 0ec9dd
#endif /* __PANGO_GLYPH_H__ */