From 3acb459d2fb5d8484ea9c9eeadea6e0403b6f22a Mon Sep 17 00:00:00 2001 From: Mathias Hasselmann Date: Wed, 27 Jun 2007 23:43:55 +0000 Subject: [PATCH] Introduce GtkBaselinePolicy. Add missing symbols. Introduce 2007-06-28 Mathias Hasselmann * gtk/gtkenums.h: Introduce GtkBaselinePolicy. * gtk/gtk.symbols: Add missing symbols. * gtk/gtkextendedlayout.c, gtk/gtkextendedlayout.h: Introduce gtk_extended_layout_get_single_baseline. svn path=/branches/extended-layout/; revision=18267 --- ChangeLog.gtk-extended-layout | 7 +++++ gtk/gtk.symbols | 12 ++++++++ gtk/gtkenums.h | 9 ++++++ gtk/gtkextendedlayout.c | 53 +++++++++++++++++++++++++++++++++++ gtk/gtkextendedlayout.h | 2 ++ 5 files changed, 83 insertions(+) diff --git a/ChangeLog.gtk-extended-layout b/ChangeLog.gtk-extended-layout index 8ae977f0f0..c44e07eecf 100644 --- a/ChangeLog.gtk-extended-layout +++ b/ChangeLog.gtk-extended-layout @@ -1,3 +1,10 @@ +2007-06-28 Mathias Hasselmann + + * gtk/gtkenums.h: Introduce GtkBaselinePolicy. + * gtk/gtk.symbols: Add missing symbols. + * gtk/gtkextendedlayout.c, gtk/gtkextendedlayout.h: + Introduce gtk_extended_layout_get_single_baseline. + 2007-06-28 Mathias Hasselmann * gtk/gtkbin.c: Prevent undefined behaviour when diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 22a9267b77..c72901989f 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -1320,6 +1320,18 @@ gtk_expander_set_use_underline #endif #endif +#if IN_HEADER(__GTK_EXTENDED_LAYOUT_H__) +#if IN_FILE(__GTK_EXTENDED_LAYOUT_C__) +gtk_extended_layout_get_type G_GNUC_CONST +gtk_extended_layout_get_features +gtk_extended_layout_get_height_for_width +gtk_extended_layout_get_width_for_height +gtk_extended_layout_get_natural_size +gtk_extended_layout_get_baselines +gtk_extended_layout_get_single_baseline +#endif +#endif + #if IN_HEADER(__GTK_FILE_CHOOSER_H__) #if IN_FILE(__GTK_FILE_CHOOSER_C__) gtk_file_chooser_add_filter diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index 6fabacf5b8..eeb3ac7772 100644 --- a/gtk/gtkenums.h +++ b/gtk/gtkenums.h @@ -82,6 +82,15 @@ typedef enum GTK_BUTTONBOX_CENTER } GtkButtonBoxStyle; +/* Baseline alignment policy */ +typedef enum +{ + GTK_BASELINE_NONE, + GTK_BASELINE_FIRST, + GTK_BASELINE_AVERAGE, + GTK_BASELINE_LAST +} GtkBaselinePolicy; + /* Curve types */ typedef enum { diff --git a/gtk/gtkextendedlayout.c b/gtk/gtkextendedlayout.c index 78e0593ab6..d7bfa3bb2c 100644 --- a/gtk/gtkextendedlayout.c +++ b/gtk/gtkextendedlayout.c @@ -164,3 +164,56 @@ gtk_extended_layout_get_baselines (GtkExtendedLayout *layout, g_return_val_if_fail (iface->get_baselines, -1); return iface->get_baselines(layout, baselines); } + +/** + * gtk_extended_layout_get_single_baseline: + * @layout: a #GtkExtendedLayout + * @policy: specifies the policy for choosing a baseline + * + * Queries a single baseline of the layout item. + * + * Since: 2.14 + **/ +gint +gtk_extended_layout_get_single_baseline (GtkExtendedLayout *layout, + GtkBaselinePolicy policy) +{ + gint *baselines = NULL; + gint offset = -1; + gint count, i; + + g_return_val_if_fail (GTK_BASELINE_NONE != policy, -1); + + count = gtk_extended_layout_get_baselines (layout, &baselines); + + if (count > 0) + { + switch (policy) + { + case GTK_BASELINE_NONE: + break; + + case GTK_BASELINE_FIRST: + offset = baselines [0]; + break; + + case GTK_BASELINE_LAST: + offset = baselines [count - 1]; + break; + + case GTK_BASELINE_AVERAGE: + for (i = 0, offset = 0; i < count; ++i) + offset += baselines[i]; + + offset = (offset + count - 1) / count; + break; + } + + g_free (baselines); + } + + return offset; +} + +#define __GTK_EXTENDED_LAYOUT_C__ +#include "gtkaliasdef.c" diff --git a/gtk/gtkextendedlayout.h b/gtk/gtkextendedlayout.h index 69ca7ab699..cb6ef75c82 100644 --- a/gtk/gtkextendedlayout.h +++ b/gtk/gtkextendedlayout.h @@ -84,6 +84,8 @@ void gtk_extended_layout_get_natural_size (GtkExtendedL GtkRequisition *requisition); gint gtk_extended_layout_get_baselines (GtkExtendedLayout *layout, gint **baselines); +gint gtk_extended_layout_get_single_baseline (GtkExtendedLayout *layout, + GtkBaselinePolicy policy); G_END_DECLS