aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui')
-rw-r--r--addressbook/gui/widgets/e-addressbook-reflow-adapter.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
index 3c2bb20386..8b70de2734 100644
--- a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
@@ -11,8 +11,6 @@
#include "e-addressbook-util.h"
#include "e-minicard.h"
-#include <gal/widgets/e-unicode.h>
-#include <gal/widgets/e-font.h>
#include <gal/widgets/e-popup-menu.h>
#include <gal/widgets/e-gui-utils.h>
#include "e-contact-save-as.h"
@@ -78,27 +76,14 @@ unlink_model(EAddressbookReflowAdapter *adapter)
static int
-count_lines (const gchar *text)
+text_height (PangoLayout *layout, const gchar *text)
{
- int num_lines = 1;
- gunichar unival;
-
- for (text = e_unicode_get_utf8 (text, &unival); (unival && text); text = e_unicode_get_utf8 (text, &unival)) {
- if (unival == '\n') {
- num_lines ++;
- }
- }
+ int height;
- return num_lines;
-}
+ pango_layout_set_text (layout, text, -1);
-static int
-text_height (GnomeCanvas *canvas, const gchar *text)
-{
- EFont *font = e_font_from_gdk_font (gtk_style_get_font (gtk_widget_get_style (GTK_WIDGET (canvas))));
- gint height = e_font_height (font) * count_lines (text) / canvas->pixels_per_unit;
+ pango_layout_get_pixel_size (layout, NULL, &height);
- e_font_unref (font);
return height;
}
@@ -125,10 +110,12 @@ addressbook_count (EReflowModel *erm)
return e_addressbook_model_card_count (priv->model);
}
-/* This function returns the number of items in our EReflowModel. */
+/* This function returns the height of the minicard in question */
static int
addressbook_height (EReflowModel *erm, int i, GnomeCanvasGroup *parent)
{
+ /* XXX ugh, an extra pango layout step for every minicard
+ whether it's displayed or not? */
EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(erm);
EAddressbookReflowAdapterPrivate *priv = adapter->priv;
/* FIXME */
@@ -137,9 +124,10 @@ addressbook_height (EReflowModel *erm, int i, GnomeCanvasGroup *parent)
int height;
char *string;
ECardSimple *simple = e_card_simple_new (e_addressbook_model_card_at (priv->model, i));
+ PangoLayout *layout = gtk_widget_create_pango_layout (GTK_WIDGET (GNOME_CANVAS_ITEM (parent)->canvas), "");
string = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FILE_AS);
- height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, string ? string : "") + 10.0;
+ height = text_height (layout, string ? string : "") + 10.0;
g_free(string);
for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST_SIMPLE_STRING && count < 5; field++) {
@@ -152,9 +140,9 @@ addressbook_height (EReflowModel *erm, int i, GnomeCanvasGroup *parent)
int this_height;
int field_text_height;
- this_height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, e_card_simple_get_name(simple, field));
+ this_height = text_height (layout, e_card_simple_get_name(simple, field));
- field_text_height = text_height (GNOME_CANVAS_ITEM (parent)->canvas, string);
+ field_text_height = text_height (layout, string);
if (this_height < field_text_height)
this_height = field_text_height;
@@ -168,6 +156,7 @@ addressbook_height (EReflowModel *erm, int i, GnomeCanvasGroup *parent)
height += 2;
g_object_unref (simple);
+ g_object_unref (layout);
return height;
}