summaryrefslogtreecommitdiff
path: root/pango/pango-context.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2006-08-20 20:35:45 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2006-08-20 20:35:45 +0000
commitd166f21c486ecda8c67d94ec0392f837c5f3eea9 (patch)
tree48ea486638afadaf9d734c59f9bbb06102f5e4a0 /pango/pango-context.c
parent919d3089dae2e2ad011c9b94b4847c30b536ac63 (diff)
downloadpango-d166f21c486ecda8c67d94ec0392f837c5f3eea9.tar.gz
Correct switched return value of EAST/WEST.
2006-08-20 Behdad Esfahbod <behdad@gnome.org> * pango/pango-matrix.c (pango_matrix_to_gravity): Correct switched return value of EAST/WEST. * pango/pango-types.h (PangoGravity): Add PANGO_GRAVITY_AUTO. * pango/pango-context.h: Add pango_context_get_gravity(). * examples/renderdemo.c (parse_gravity), (parse_options): * pango/pango-context.c (pango_context_init), (update_resolved_gravity), (pango_context_set_matrix), (pango_context_set_base_gravity), (pango_context_get_gravity), (itemize_state_init), (get_shaper_and_font): * pango/pango-layout.c (line_set_resolved_dir): * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics), (pango_cairo_fc_font_glyph_extents_cache_init), (_pango_cairo_fc_font_new): * pango/pangofc-fontmap.c (pango_fc_make_pattern), (pango_fc_font_map_load_fontset): * pango/pango.def: * docs/pango-sections.txt: * docs/tmpl/main.sgml: Update to above.
Diffstat (limited to 'pango/pango-context.c')
-rw-r--r--pango/pango-context.c44
1 files changed, 40 insertions, 4 deletions
diff --git a/pango/pango-context.c b/pango/pango-context.c
index ac6db552..b3dec728 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -37,6 +37,7 @@ struct _PangoContext
PangoLanguage *language;
PangoDirection base_dir;
PangoGravity base_gravity;
+ PangoGravity resolved_gravity;
PangoFontDescription *font_desc;
@@ -59,7 +60,7 @@ static void
pango_context_init (PangoContext *context)
{
context->base_dir = PANGO_DIRECTION_WEAK_LTR;
- context->base_gravity = PANGO_GRAVITY_SOUTH;
+ context->resolved_gravity = context->base_gravity = PANGO_GRAVITY_SOUTH;
context->language = NULL;
context->font_map = NULL;
@@ -128,6 +129,15 @@ pango_context_new (void)
return context;
}
+static void
+update_resolved_gravity (PangoContext *context)
+{
+ if (context->base_gravity == PANGO_GRAVITY_AUTO)
+ context->resolved_gravity = pango_matrix_to_gravity (context->matrix);
+ else
+ context->resolved_gravity = context->base_gravity;
+}
+
/**
* pango_context_set_matrix:
* @context: a #PangoContext
@@ -155,6 +165,8 @@ pango_context_set_matrix (PangoContext *context,
context->matrix = pango_matrix_copy (matrix);
else
context->matrix = NULL;
+
+ update_resolved_gravity (context);
}
/**
@@ -423,6 +435,8 @@ pango_context_set_base_gravity (PangoContext *context,
g_return_if_fail (context != NULL);
context->base_gravity = gravity;
+
+ update_resolved_gravity (context);
}
/**
@@ -444,6 +458,27 @@ pango_context_get_base_gravity (PangoContext *context)
return context->base_gravity;
}
+/**
+ * pango_context_get_gravity:
+ * @context: a #PangoContext
+ *
+ * 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_matrix_to_gravity() 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)
+{
+ g_return_val_if_fail (context != NULL, PANGO_GRAVITY_SOUTH);
+
+ return context->resolved_gravity;
+}
+
/**********************************************************************/
static gboolean
@@ -711,10 +746,10 @@ itemize_state_init (ItemizeState *state,
/* FIXME: Set gravity to base gravity for now, until we do
* proper gravity assignment.
*/
- state->gravity = context->base_gravity;
+ state->gravity = context->resolved_gravity;
- state->centered_baseline = context->base_gravity == PANGO_GRAVITY_EAST
- || context->base_gravity == PANGO_GRAVITY_WEST;
+ state->centered_baseline = context->resolved_gravity == PANGO_GRAVITY_EAST
+ || context->resolved_gravity == PANGO_GRAVITY_WEST;
/* Initialize the attribute iterator
*/
@@ -1014,6 +1049,7 @@ get_shaper_and_font (ItemizeState *state,
{
case PANGO_GRAVITY_SOUTH:
case PANGO_GRAVITY_NORTH:
+ case PANGO_GRAVITY_AUTO:
default:
script = state->script;
break;