aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@helixcode.com>2000-03-11 08:32:15 +0800
committerChris Lahey <clahey@src.gnome.org>2000-03-11 08:32:15 +0800
commit0a908b7fe481dd3bf216021fd8e04489f5f2aa66 (patch)
treecd22b484c729a21684ef46b6c99483847c43dae2 /addressbook/gui
parent8c65f8861bd16321eeafac1d827d1fb4a557247c (diff)
downloadgsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar.gz
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar.bz2
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar.lz
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar.xz
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.tar.zst
gsoc2013-evolution-0a908b7fe481dd3bf216021fd8e04489f5f2aa66.zip
Designed a new system for doing hierarchical displays in the canvas. Adds
2000-03-10 Christopher James Lahey <clahey@helixcode.com> * e-util/e-canvas.c, e-util/e-canvas.h: Designed a new system for doing hierarchical displays in the canvas. Adds an extra idle loop to the canvas system. * widgets/e-minicard/e-minicard.c, widgets/e-minicard/e-minicard-label.c, widgets/e-minicard/e-minicard-label.h, widgets/e-minicard/e-reflow.c, widgets/e-minicard/test-reflow.c, widgets/e-text/e-text.c, widgets/e-text/e-text.h: Adapted to use the new e-canvas reflow system. svn path=/trunk/; revision=2096
Diffstat (limited to 'addressbook/gui')
-rw-r--r--addressbook/gui/minicard/e-minicard-label.c86
-rw-r--r--addressbook/gui/minicard/e-minicard-label.h2
-rw-r--r--addressbook/gui/minicard/e-minicard.c93
-rw-r--r--addressbook/gui/minicard/e-reflow.c102
-rw-r--r--addressbook/gui/minicard/test-reflow.c8
-rw-r--r--addressbook/gui/widgets/e-minicard-label.c86
-rw-r--r--addressbook/gui/widgets/e-minicard-label.h2
-rw-r--r--addressbook/gui/widgets/e-minicard.c93
-rw-r--r--addressbook/gui/widgets/test-reflow.c8
9 files changed, 150 insertions, 330 deletions
diff --git a/addressbook/gui/minicard/e-minicard-label.c b/addressbook/gui/minicard/e-minicard-label.c
index 3f6a80a890..25f7f939fc 100644
--- a/addressbook/gui/minicard/e-minicard-label.c
+++ b/addressbook/gui/minicard/e-minicard-label.c
@@ -33,19 +33,12 @@ static void e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_
static gboolean e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event);
static void e_minicard_label_realize (GnomeCanvasItem *item);
static void e_minicard_label_unrealize (GnomeCanvasItem *item);
+static void e_minicard_label_reflow(GnomeCanvasItem *item, int flags);
-static void update_label( EMinicardLabel *minicard_label );
-static void resize( GtkObject *object, gpointer data );
+static void e_minicard_label_resize_children( EMinicardLabel *e_minicard_label );
static GnomeCanvasGroupClass *parent_class = NULL;
-enum {
- E_MINICARD_LABEL_RESIZE,
- E_MINICARD_LABEL_LAST_SIGNAL
-};
-
-static guint e_minicard_label_signals[E_MINICARD_LABEL_LAST_SIGNAL] = { 0 };
-
/* The arguments we take */
enum {
ARG_0,
@@ -92,17 +85,6 @@ e_minicard_label_class_init (EMinicardLabelClass *klass)
parent_class = gtk_type_class (gnome_canvas_group_get_type ());
- e_minicard_label_signals[E_MINICARD_LABEL_RESIZE] =
- gtk_signal_new ("resize",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EMinicardLabelClass, resize),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
-
- gtk_object_class_add_signals (object_class, e_minicard_label_signals, E_MINICARD_LABEL_LAST_SIGNAL);
-
gtk_object_add_arg_type ("EMinicardLabel::width", GTK_TYPE_DOUBLE,
GTK_ARG_READWRITE, ARG_WIDTH);
gtk_object_add_arg_type ("EMinicardLabel::height", GTK_TYPE_DOUBLE,
@@ -113,8 +95,6 @@ e_minicard_label_class_init (EMinicardLabelClass *klass)
GTK_ARG_READWRITE, ARG_FIELD);
gtk_object_add_arg_type ("EMinicardLabel::fieldname", GTK_TYPE_STRING,
GTK_ARG_READWRITE, ARG_FIELDNAME);
-
- klass->resize = NULL;
object_class->set_arg = e_minicard_label_set_arg;
object_class->get_arg = e_minicard_label_get_arg;
@@ -136,6 +116,8 @@ e_minicard_label_init (EMinicardLabel *minicard_label)
minicard_label->field = NULL;
minicard_label->fieldname_text = NULL;
minicard_label->field_text = NULL;
+
+ e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard_label), e_minicard_label_reflow);
}
static void
@@ -150,8 +132,8 @@ e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
e_minicard_label->width = GTK_VALUE_DOUBLE (*arg);
- update_label( e_minicard_label );
- gnome_canvas_item_request_update (item);
+ e_minicard_label_resize_children(e_minicard_label);
+ e_canvas_item_request_reflow (item);
break;
case ARG_HAS_FOCUS:
if (e_minicard_label->field && (GTK_VALUE_ENUM(*arg) != E_FOCUS_NONE))
@@ -241,7 +223,6 @@ e_minicard_label_realize (GnomeCanvasItem *item)
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
"clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
- "clip_height", (double) 1,
"clip", TRUE,
"use_ellipsis", TRUE,
"font_gdk", font,
@@ -255,17 +236,12 @@ e_minicard_label_realize (GnomeCanvasItem *item)
NULL );
g_free( e_minicard_label->fieldname_text );
}
- gtk_signal_connect(GTK_OBJECT(e_minicard_label->fieldname),
- "resize",
- GTK_SIGNAL_FUNC(resize),
- (gpointer) e_minicard_label);
e_minicard_label->field =
gnome_canvas_item_new( group,
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
"clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
- "clip_height", (double) 1,
"clip", TRUE,
"use_ellipsis", TRUE,
"font_gdk", font,
@@ -281,12 +257,7 @@ e_minicard_label_realize (GnomeCanvasItem *item)
g_free( e_minicard_label->field_text );
}
- gtk_signal_connect(GTK_OBJECT(e_minicard_label->field),
- "resize",
- GTK_SIGNAL_FUNC(resize),
- (gpointer) e_minicard_label);
-
- update_label (e_minicard_label);
+ e_canvas_item_request_reflow(item);
if (!item->canvas->aa)
{
@@ -344,10 +315,11 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
case GDK_MOTION_NOTIFY:
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY: {
+ gboolean return_val;
+#if 0
GnomeCanvasItem *field;
ArtPoint p;
double inv[6], affine[6];
- gboolean return_val;
field = e_minicard_label->field;
art_affine_identity (affine);
@@ -389,7 +361,7 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
default:
break;
}
-
+#endif
gtk_signal_emit_by_name(GTK_OBJECT(e_minicard_label->field), "event", event, &return_val);
return return_val;
break;
@@ -405,8 +377,22 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
}
static void
-update_label( EMinicardLabel *e_minicard_label )
+e_minicard_label_resize_children(EMinicardLabel *e_minicard_label)
{
+ if ( GTK_OBJECT_FLAGS( e_minicard_label ) & GNOME_CANVAS_ITEM_REALIZED ) {
+ gnome_canvas_item_set( e_minicard_label->fieldname,
+ "clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
+ NULL );
+ gnome_canvas_item_set( e_minicard_label->field,
+ "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
+ NULL );
+ }
+}
+
+static void
+e_minicard_label_reflow(GnomeCanvasItem *item, int flags)
+{
+ EMinicardLabel *e_minicard_label = E_MINICARD_LABEL(item);
if ( GTK_OBJECT_FLAGS( e_minicard_label ) & GNOME_CANVAS_ITEM_REALIZED )
{
gint old_height;
@@ -416,9 +402,6 @@ update_label( EMinicardLabel *e_minicard_label )
gtk_object_get(GTK_OBJECT(e_minicard_label->fieldname),
"text_height", &text_height,
NULL);
- gnome_canvas_item_set(e_minicard_label->fieldname,
- "clip_height", (double) text_height,
- NULL);
e_minicard_label->height = text_height;
@@ -426,9 +409,6 @@ update_label( EMinicardLabel *e_minicard_label )
gtk_object_get(GTK_OBJECT(e_minicard_label->field),
"text_height", &text_height,
NULL);
- gnome_canvas_item_set(e_minicard_label->field,
- "clip_height", (double) text_height,
- NULL);
if (e_minicard_label->height < text_height)
e_minicard_label->height = text_height;
@@ -438,24 +418,10 @@ update_label( EMinicardLabel *e_minicard_label )
"x2", (double) e_minicard_label->width - 1,
"y2", (double) e_minicard_label->height - 1,
NULL );
- gnome_canvas_item_set( e_minicard_label->fieldname,
- "clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
- NULL );
- gnome_canvas_item_set( e_minicard_label->field,
- "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
- NULL );
e_canvas_item_move_absolute(e_minicard_label->field, ( e_minicard_label->width / 2 + 2), 1);
if (old_height != e_minicard_label->height)
- gtk_signal_emit_by_name (GTK_OBJECT (e_minicard_label), "resize");
+ e_canvas_item_request_parent_reflow(item);
}
}
-
-
-static void
-resize( GtkObject *object, gpointer data )
-{
- update_label(E_MINICARD_LABEL(data));
-}
-
diff --git a/addressbook/gui/minicard/e-minicard-label.h b/addressbook/gui/minicard/e-minicard-label.h
index 3311e3c9af..b439c53f9d 100644
--- a/addressbook/gui/minicard/e-minicard-label.h
+++ b/addressbook/gui/minicard/e-minicard-label.h
@@ -69,8 +69,6 @@ struct _EMinicardLabel
struct _EMinicardLabelClass
{
GnomeCanvasGroupClass parent_class;
-
- void (* resize) (EMinicardLabel *text);
};
diff --git a/addressbook/gui/minicard/e-minicard.c b/addressbook/gui/minicard/e-minicard.c
index b8d25f5dc6..79668b6507 100644
--- a/addressbook/gui/minicard/e-minicard.c
+++ b/addressbook/gui/minicard/e-minicard.c
@@ -34,19 +34,12 @@ static void e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event);
static void e_minicard_realize (GnomeCanvasItem *item);
static void e_minicard_unrealize (GnomeCanvasItem *item);
+static void e_minicard_reflow ( GnomeCanvasItem *item, int flags );
-static void _update_card ( EMinicard *minicard );
-static void _resize( GtkObject *object, gpointer data );
+static void e_minicard_resize_children( EMinicard *e_minicard );
static GnomeCanvasGroupClass *parent_class = NULL;
-enum {
- E_MINICARD_RESIZE,
- E_MINICARD_LAST_SIGNAL
-};
-
-static guint e_minicard_signals[E_MINICARD_LAST_SIGNAL] = { 0 };
-
/* The arguments we take */
enum {
ARG_0,
@@ -92,17 +85,6 @@ e_minicard_class_init (EMinicardClass *klass)
parent_class = gtk_type_class (gnome_canvas_group_get_type ());
- e_minicard_signals[E_MINICARD_RESIZE] =
- gtk_signal_new ("resize",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EMinicardClass, resize),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
-
- gtk_object_class_add_signals (object_class, e_minicard_signals, E_MINICARD_LAST_SIGNAL);
-
gtk_object_add_arg_type ("EMinicard::width", GTK_TYPE_DOUBLE,
GTK_ARG_READWRITE, ARG_WIDTH);
gtk_object_add_arg_type ("EMinicard::height", GTK_TYPE_DOUBLE,
@@ -131,6 +113,8 @@ e_minicard_init (EMinicard *minicard)
minicard->width = 10;
minicard->height = 10;
minicard->has_focus = FALSE;
+
+ e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard), e_minicard_reflow);
}
static void
@@ -146,8 +130,8 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
case ARG_WIDTH:
if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ e_minicard_resize_children(e_minicard);
+ e_canvas_item_request_reflow(item);
}
break;
case ARG_HAS_FOCUS:
@@ -237,7 +221,7 @@ e_minicard_realize (GnomeCanvasItem *item)
gnome_canvas_item_new( group,
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
- "clip_width", (double) ( e_minicard->width - 12 ),
+ "width", (double) ( e_minicard->width - 12 ),
"clip", TRUE,
"use_ellipsis", TRUE,
"font", "lucidasans-bold-10",
@@ -246,10 +230,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_canvas_item_move_absolute(e_minicard->header_text, 6, 6);
- gtk_signal_connect(GTK_OBJECT(e_minicard->header_text),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
if ( rand() % 2 ) {
new_item = gnome_canvas_item_new( group,
e_minicard_label_get_type(),
@@ -259,11 +239,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
if (rand() % 2) {
@@ -275,11 +250,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
if (rand() % 2) {
@@ -291,13 +261,8 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
- _update_card( e_minicard );
+ e_canvas_item_request_reflow(item);
if (!item->canvas->aa) {
}
@@ -402,8 +367,26 @@ e_minicard_event (GnomeCanvasItem *item, GdkEvent *event)
}
static void
-_update_card( EMinicard *e_minicard )
+e_minicard_resize_children( EMinicard *e_minicard )
+{
+ if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) {
+ GList *list;
+
+ gnome_canvas_item_set( e_minicard->header_text,
+ "width", (double) e_minicard->width - 12,
+ NULL );
+ for ( list = e_minicard->fields; list; list = g_list_next( list ) ) {
+ gnome_canvas_item_set( GNOME_CANVAS_ITEM( list->data ),
+ "width", (double) e_minicard->width - 4.0,
+ NULL );
+ }
+ }
+}
+
+static void
+e_minicard_reflow( GnomeCanvasItem *item, int flags )
{
+ EMinicard *e_minicard = E_MINICARD(item);
if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) {
GList *list;
gdouble text_height;
@@ -421,10 +404,6 @@ _update_card( EMinicard *e_minicard )
"y2", text_height + 9.0,
NULL );
- gnome_canvas_item_set( e_minicard->header_text,
- "clip_height", (double)text_height,
- NULL );
-
for(list = e_minicard->fields; list; list = g_list_next(list)) {
gtk_object_get (GTK_OBJECT(list->data),
"height", &text_height,
@@ -445,22 +424,8 @@ _update_card( EMinicard *e_minicard )
gnome_canvas_item_set( e_minicard->header_rect,
"x2", (double) e_minicard->width - 3.0,
NULL );
- gnome_canvas_item_set( e_minicard->header_text,
- "clip_width", (double) e_minicard->width - 12,
- NULL );
- for ( list = e_minicard->fields; list; list = g_list_next( list ) ) {
- gnome_canvas_item_set( GNOME_CANVAS_ITEM( list->data ),
- "width", (double) e_minicard->width - 4.0,
- NULL );
if (old_height != e_minicard->height)
- gtk_signal_emit_by_name (GTK_OBJECT (e_minicard), "resize");
- }
- }
-}
-
-static void
-_resize( GtkObject *object, gpointer data )
-{
- _update_card(E_MINICARD(data));
+ e_canvas_item_request_parent_reflow(item);
+ }
}
diff --git a/addressbook/gui/minicard/e-reflow.c b/addressbook/gui/minicard/e-reflow.c
index 984e972f0c..4af46bd4a4 100644
--- a/addressbook/gui/minicard/e-reflow.c
+++ b/addressbook/gui/minicard/e-reflow.c
@@ -24,6 +24,7 @@
#include <math.h>
#include "e-reflow.h"
#include "e-canvas-utils.h"
+#include "e-canvas.h"
#include "e-util.h"
static void e_reflow_init (EReflow *card);
static void e_reflow_class_init (EReflowClass *klass);
@@ -36,10 +37,9 @@ static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
int x, int y, int width, int height);
static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags);
static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item);
+static void e_reflow_reflow (GnomeCanvasItem *item, int flags);
-static void _update_reflow ( EReflow *reflow );
-static void _resize( GtkObject *object, gpointer data );
-static void _queue_reflow(EReflow *e_reflow);
+static void e_reflow_resize_children (GnomeCanvasItem *item);
#define E_REFLOW_DIVIDER_WIDTH 2
#define E_REFLOW_BORDER_WIDTH 7
@@ -47,13 +47,6 @@ static void _queue_reflow(EReflow *e_reflow);
static GnomeCanvasGroupClass *parent_class = NULL;
-enum {
- E_REFLOW_RESIZE,
- E_REFLOW_LAST_SIGNAL
-};
-
-static guint e_reflow_signals[E_REFLOW_LAST_SIGNAL] = { 0 };
-
/* The arguments we take */
enum {
ARG_0,
@@ -98,16 +91,6 @@ e_reflow_class_init (EReflowClass *klass)
parent_class = gtk_type_class (gnome_canvas_group_get_type ());
- e_reflow_signals[E_REFLOW_RESIZE] =
- gtk_signal_new ("resize",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EReflowClass, resize),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
- gtk_object_class_add_signals (object_class, e_reflow_signals, E_REFLOW_LAST_SIGNAL);
-
gtk_object_add_arg_type ("EReflow::minimum_width", GTK_TYPE_DOUBLE,
GTK_ARG_READWRITE, ARG_MINIMUM_WIDTH);
gtk_object_add_arg_type ("EReflow::width", GTK_TYPE_DOUBLE,
@@ -149,6 +132,8 @@ e_reflow_init (EReflow *reflow)
reflow->default_cursor_shown = TRUE;
reflow->arrow_cursor = NULL;
reflow->default_cursor = NULL;
+
+ e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(reflow), e_reflow_reflow);
}
static void
@@ -163,11 +148,11 @@ e_reflow_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_HEIGHT:
e_reflow->height = GTK_VALUE_DOUBLE (*arg);
- _queue_reflow(e_reflow);
+ e_canvas_item_request_reflow(item);
break;
case ARG_MINIMUM_WIDTH:
e_reflow->minimum_width = GTK_VALUE_DOUBLE (*arg);
- _queue_reflow(e_reflow);
+ e_canvas_item_request_reflow(item);
break;
}
}
@@ -214,17 +199,13 @@ e_reflow_realize (GnomeCanvasItem *item)
for(list = e_reflow->items; list; list = g_list_next(list)) {
GnomeCanvasItem *item = GNOME_CANVAS_ITEM(list->data);
- gtk_signal_connect(GTK_OBJECT(item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_reflow);
gnome_canvas_item_set(item,
"width", (double) e_reflow->column_width,
NULL);
}
- _queue_reflow( e_reflow );
-
+ e_canvas_item_request_reflow(item);
+
adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
adjustment->step_increment = (e_reflow->column_width + E_REFLOW_FULL_GUTTER) / 2;
adjustment->page_increment = adjustment->page_size - adjustment->step_increment;
@@ -365,11 +346,11 @@ e_reflow_event (GnomeCanvasItem *item, GdkEvent *event)
adjustment->step_increment = (e_reflow->column_width + E_REFLOW_FULL_GUTTER) / 2;
adjustment->page_increment = adjustment->page_size - adjustment->step_increment;
gtk_adjustment_changed(adjustment);
- _queue_reflow(e_reflow);
- } else {
- e_reflow->need_column_resize = TRUE;
- gnome_canvas_item_request_update(item);
+ e_reflow_resize_children(item);
+ e_canvas_item_request_reflow(item);
}
+ e_reflow->need_column_resize = TRUE;
+ gnome_canvas_item_request_update(item);
gnome_canvas_item_ungrab (item, button->time);
return TRUE;
}
@@ -452,14 +433,10 @@ e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item)
{
e_reflow->items = g_list_append(e_reflow->items, item);
if ( GTK_OBJECT_FLAGS( e_reflow ) & GNOME_CANVAS_ITEM_REALIZED ) {
- gtk_signal_connect(GTK_OBJECT(item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_reflow);
gnome_canvas_item_set(item,
"width", (double) e_reflow->column_width,
NULL);
- _queue_reflow(e_reflow);
+ e_canvas_item_request_reflow(item);
}
}
@@ -621,6 +598,21 @@ e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gin
}
}
+static void
+e_reflow_resize_children (GnomeCanvasItem *item)
+{
+ GList *list;
+ EReflow *e_reflow;
+
+ e_reflow = E_REFLOW (item);
+ for ( list = e_reflow->items; list; list = list->next ) {
+ GnomeCanvasItem *child = GNOME_CANVAS_ITEM(list->data);
+ gnome_canvas_item_set(child,
+ "width", (double) e_reflow->column_width,
+ NULL);
+ }
+}
+
static double
e_reflow_point (GnomeCanvasItem *item,
double x, double y, int cx, int cy,
@@ -696,8 +688,9 @@ _reflow( EReflow *e_reflow )
}
static void
-_update_reflow( EReflow *e_reflow )
+e_reflow_reflow( GnomeCanvasItem *item, int flags )
{
+ EReflow *e_reflow = E_REFLOW(item);
if ( GTK_OBJECT_FLAGS( e_reflow ) & GNOME_CANVAS_ITEM_REALIZED ) {
gdouble old_width;
@@ -719,9 +712,6 @@ _update_reflow( EReflow *e_reflow )
running_height = E_REFLOW_BORDER_WIDTH;
list = e_reflow->items;
- gtk_object_set (GTK_OBJECT(list->data),
- "width", e_reflow->column_width,
- NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -733,9 +723,6 @@ _update_reflow( EReflow *e_reflow )
list = g_list_next(list);
for( ; list; list = g_list_next(list)) {
- gtk_object_set (GTK_OBJECT(list->data),
- "width", e_reflow->column_width,
- NULL);
gtk_object_get (GTK_OBJECT(list->data),
"height", &item_height,
NULL);
@@ -757,31 +744,6 @@ _update_reflow( EReflow *e_reflow )
if ( e_reflow->width < e_reflow->minimum_width )
e_reflow->width = e_reflow->minimum_width;
if (old_width != e_reflow->width)
- gtk_signal_emit_by_name (GTK_OBJECT (e_reflow), "resize");
+ e_canvas_item_request_parent_reflow(item);
}
}
-
-
-static gboolean
-_idle_reflow(gpointer data)
-{
- EReflow *e_reflow = E_REFLOW(data);
- _update_reflow(e_reflow);
- e_reflow->need_height_update = TRUE;
- gnome_canvas_item_request_update(GNOME_CANVAS_ITEM(e_reflow));
- e_reflow->idle = 0;
- return FALSE;
-}
-
-static void
-_queue_reflow(EReflow *e_reflow)
-{
- if (e_reflow->idle == 0)
- e_reflow->idle = g_idle_add(_idle_reflow, e_reflow);
-}
-
-static void
-_resize( GtkObject *object, gpointer data )
-{
- _queue_reflow(E_REFLOW(data));
-}
diff --git a/addressbook/gui/minicard/test-reflow.c b/addressbook/gui/minicard/test-reflow.c
index 319a3f5626..8cedbaac28 100644
--- a/addressbook/gui/minicard/test-reflow.c
+++ b/addressbook/gui/minicard/test-reflow.c
@@ -55,14 +55,14 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
-static void resize(GnomeCanvasItem *item, gpointer data)
+static void resize(GnomeCanvas *canvas, gpointer data)
{
double width;
gtk_object_get(GTK_OBJECT(reflow),
- "width", &width,
+ "width", &width,
NULL);
width = MAX(width, last_alloc.width);
- gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_set_scroll_region(canvas , 0, 0, width, last_alloc.height );
gnome_canvas_item_set( rect,
"x2", (double) width,
"y2", (double) last_alloc.height,
@@ -121,7 +121,7 @@ int main( int argc, char *argv[] )
"height", (double) 100,
"minimum_width", (double) 100,
NULL );
- gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ gtk_signal_connect( GTK_OBJECT( canvas ), "reflow",
GTK_SIGNAL_FUNC( resize ),
( gpointer ) app);
for ( i = 0; i < 200; i++ )
diff --git a/addressbook/gui/widgets/e-minicard-label.c b/addressbook/gui/widgets/e-minicard-label.c
index 3f6a80a890..25f7f939fc 100644
--- a/addressbook/gui/widgets/e-minicard-label.c
+++ b/addressbook/gui/widgets/e-minicard-label.c
@@ -33,19 +33,12 @@ static void e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_
static gboolean e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event);
static void e_minicard_label_realize (GnomeCanvasItem *item);
static void e_minicard_label_unrealize (GnomeCanvasItem *item);
+static void e_minicard_label_reflow(GnomeCanvasItem *item, int flags);
-static void update_label( EMinicardLabel *minicard_label );
-static void resize( GtkObject *object, gpointer data );
+static void e_minicard_label_resize_children( EMinicardLabel *e_minicard_label );
static GnomeCanvasGroupClass *parent_class = NULL;
-enum {
- E_MINICARD_LABEL_RESIZE,
- E_MINICARD_LABEL_LAST_SIGNAL
-};
-
-static guint e_minicard_label_signals[E_MINICARD_LABEL_LAST_SIGNAL] = { 0 };
-
/* The arguments we take */
enum {
ARG_0,
@@ -92,17 +85,6 @@ e_minicard_label_class_init (EMinicardLabelClass *klass)
parent_class = gtk_type_class (gnome_canvas_group_get_type ());
- e_minicard_label_signals[E_MINICARD_LABEL_RESIZE] =
- gtk_signal_new ("resize",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EMinicardLabelClass, resize),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
-
- gtk_object_class_add_signals (object_class, e_minicard_label_signals, E_MINICARD_LABEL_LAST_SIGNAL);
-
gtk_object_add_arg_type ("EMinicardLabel::width", GTK_TYPE_DOUBLE,
GTK_ARG_READWRITE, ARG_WIDTH);
gtk_object_add_arg_type ("EMinicardLabel::height", GTK_TYPE_DOUBLE,
@@ -113,8 +95,6 @@ e_minicard_label_class_init (EMinicardLabelClass *klass)
GTK_ARG_READWRITE, ARG_FIELD);
gtk_object_add_arg_type ("EMinicardLabel::fieldname", GTK_TYPE_STRING,
GTK_ARG_READWRITE, ARG_FIELDNAME);
-
- klass->resize = NULL;
object_class->set_arg = e_minicard_label_set_arg;
object_class->get_arg = e_minicard_label_get_arg;
@@ -136,6 +116,8 @@ e_minicard_label_init (EMinicardLabel *minicard_label)
minicard_label->field = NULL;
minicard_label->fieldname_text = NULL;
minicard_label->field_text = NULL;
+
+ e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard_label), e_minicard_label_reflow);
}
static void
@@ -150,8 +132,8 @@ e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
switch (arg_id){
case ARG_WIDTH:
e_minicard_label->width = GTK_VALUE_DOUBLE (*arg);
- update_label( e_minicard_label );
- gnome_canvas_item_request_update (item);
+ e_minicard_label_resize_children(e_minicard_label);
+ e_canvas_item_request_reflow (item);
break;
case ARG_HAS_FOCUS:
if (e_minicard_label->field && (GTK_VALUE_ENUM(*arg) != E_FOCUS_NONE))
@@ -241,7 +223,6 @@ e_minicard_label_realize (GnomeCanvasItem *item)
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
"clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
- "clip_height", (double) 1,
"clip", TRUE,
"use_ellipsis", TRUE,
"font_gdk", font,
@@ -255,17 +236,12 @@ e_minicard_label_realize (GnomeCanvasItem *item)
NULL );
g_free( e_minicard_label->fieldname_text );
}
- gtk_signal_connect(GTK_OBJECT(e_minicard_label->fieldname),
- "resize",
- GTK_SIGNAL_FUNC(resize),
- (gpointer) e_minicard_label);
e_minicard_label->field =
gnome_canvas_item_new( group,
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
"clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
- "clip_height", (double) 1,
"clip", TRUE,
"use_ellipsis", TRUE,
"font_gdk", font,
@@ -281,12 +257,7 @@ e_minicard_label_realize (GnomeCanvasItem *item)
g_free( e_minicard_label->field_text );
}
- gtk_signal_connect(GTK_OBJECT(e_minicard_label->field),
- "resize",
- GTK_SIGNAL_FUNC(resize),
- (gpointer) e_minicard_label);
-
- update_label (e_minicard_label);
+ e_canvas_item_request_reflow(item);
if (!item->canvas->aa)
{
@@ -344,10 +315,11 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
case GDK_MOTION_NOTIFY:
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY: {
+ gboolean return_val;
+#if 0
GnomeCanvasItem *field;
ArtPoint p;
double inv[6], affine[6];
- gboolean return_val;
field = e_minicard_label->field;
art_affine_identity (affine);
@@ -389,7 +361,7 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
default:
break;
}
-
+#endif
gtk_signal_emit_by_name(GTK_OBJECT(e_minicard_label->field), "event", event, &return_val);
return return_val;
break;
@@ -405,8 +377,22 @@ e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event)
}
static void
-update_label( EMinicardLabel *e_minicard_label )
+e_minicard_label_resize_children(EMinicardLabel *e_minicard_label)
{
+ if ( GTK_OBJECT_FLAGS( e_minicard_label ) & GNOME_CANVAS_ITEM_REALIZED ) {
+ gnome_canvas_item_set( e_minicard_label->fieldname,
+ "clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
+ NULL );
+ gnome_canvas_item_set( e_minicard_label->field,
+ "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
+ NULL );
+ }
+}
+
+static void
+e_minicard_label_reflow(GnomeCanvasItem *item, int flags)
+{
+ EMinicardLabel *e_minicard_label = E_MINICARD_LABEL(item);
if ( GTK_OBJECT_FLAGS( e_minicard_label ) & GNOME_CANVAS_ITEM_REALIZED )
{
gint old_height;
@@ -416,9 +402,6 @@ update_label( EMinicardLabel *e_minicard_label )
gtk_object_get(GTK_OBJECT(e_minicard_label->fieldname),
"text_height", &text_height,
NULL);
- gnome_canvas_item_set(e_minicard_label->fieldname,
- "clip_height", (double) text_height,
- NULL);
e_minicard_label->height = text_height;
@@ -426,9 +409,6 @@ update_label( EMinicardLabel *e_minicard_label )
gtk_object_get(GTK_OBJECT(e_minicard_label->field),
"text_height", &text_height,
NULL);
- gnome_canvas_item_set(e_minicard_label->field,
- "clip_height", (double) text_height,
- NULL);
if (e_minicard_label->height < text_height)
e_minicard_label->height = text_height;
@@ -438,24 +418,10 @@ update_label( EMinicardLabel *e_minicard_label )
"x2", (double) e_minicard_label->width - 1,
"y2", (double) e_minicard_label->height - 1,
NULL );
- gnome_canvas_item_set( e_minicard_label->fieldname,
- "clip_width", (double) ( e_minicard_label->width / 2 - 4 ),
- NULL );
- gnome_canvas_item_set( e_minicard_label->field,
- "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ),
- NULL );
e_canvas_item_move_absolute(e_minicard_label->field, ( e_minicard_label->width / 2 + 2), 1);
if (old_height != e_minicard_label->height)
- gtk_signal_emit_by_name (GTK_OBJECT (e_minicard_label), "resize");
+ e_canvas_item_request_parent_reflow(item);
}
}
-
-
-static void
-resize( GtkObject *object, gpointer data )
-{
- update_label(E_MINICARD_LABEL(data));
-}
-
diff --git a/addressbook/gui/widgets/e-minicard-label.h b/addressbook/gui/widgets/e-minicard-label.h
index 3311e3c9af..b439c53f9d 100644
--- a/addressbook/gui/widgets/e-minicard-label.h
+++ b/addressbook/gui/widgets/e-minicard-label.h
@@ -69,8 +69,6 @@ struct _EMinicardLabel
struct _EMinicardLabelClass
{
GnomeCanvasGroupClass parent_class;
-
- void (* resize) (EMinicardLabel *text);
};
diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c
index b8d25f5dc6..79668b6507 100644
--- a/addressbook/gui/widgets/e-minicard.c
+++ b/addressbook/gui/widgets/e-minicard.c
@@ -34,19 +34,12 @@ static void e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event);
static void e_minicard_realize (GnomeCanvasItem *item);
static void e_minicard_unrealize (GnomeCanvasItem *item);
+static void e_minicard_reflow ( GnomeCanvasItem *item, int flags );
-static void _update_card ( EMinicard *minicard );
-static void _resize( GtkObject *object, gpointer data );
+static void e_minicard_resize_children( EMinicard *e_minicard );
static GnomeCanvasGroupClass *parent_class = NULL;
-enum {
- E_MINICARD_RESIZE,
- E_MINICARD_LAST_SIGNAL
-};
-
-static guint e_minicard_signals[E_MINICARD_LAST_SIGNAL] = { 0 };
-
/* The arguments we take */
enum {
ARG_0,
@@ -92,17 +85,6 @@ e_minicard_class_init (EMinicardClass *klass)
parent_class = gtk_type_class (gnome_canvas_group_get_type ());
- e_minicard_signals[E_MINICARD_RESIZE] =
- gtk_signal_new ("resize",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (EMinicardClass, resize),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
-
- gtk_object_class_add_signals (object_class, e_minicard_signals, E_MINICARD_LAST_SIGNAL);
-
gtk_object_add_arg_type ("EMinicard::width", GTK_TYPE_DOUBLE,
GTK_ARG_READWRITE, ARG_WIDTH);
gtk_object_add_arg_type ("EMinicard::height", GTK_TYPE_DOUBLE,
@@ -131,6 +113,8 @@ e_minicard_init (EMinicard *minicard)
minicard->width = 10;
minicard->height = 10;
minicard->has_focus = FALSE;
+
+ e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard), e_minicard_reflow);
}
static void
@@ -146,8 +130,8 @@ e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
case ARG_WIDTH:
if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) {
e_minicard->width = GTK_VALUE_DOUBLE (*arg);
- _update_card(e_minicard);
- gnome_canvas_item_request_update (item);
+ e_minicard_resize_children(e_minicard);
+ e_canvas_item_request_reflow(item);
}
break;
case ARG_HAS_FOCUS:
@@ -237,7 +221,7 @@ e_minicard_realize (GnomeCanvasItem *item)
gnome_canvas_item_new( group,
e_text_get_type(),
"anchor", GTK_ANCHOR_NW,
- "clip_width", (double) ( e_minicard->width - 12 ),
+ "width", (double) ( e_minicard->width - 12 ),
"clip", TRUE,
"use_ellipsis", TRUE,
"font", "lucidasans-bold-10",
@@ -246,10 +230,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_canvas_item_move_absolute(e_minicard->header_text, 6, 6);
- gtk_signal_connect(GTK_OBJECT(e_minicard->header_text),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
if ( rand() % 2 ) {
new_item = gnome_canvas_item_new( group,
e_minicard_label_get_type(),
@@ -259,11 +239,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
if (rand() % 2) {
@@ -275,11 +250,6 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
if (rand() % 2) {
@@ -291,13 +261,8 @@ e_minicard_realize (GnomeCanvasItem *item)
NULL );
e_minicard->fields = g_list_append( e_minicard->fields, new_item);
e_canvas_item_move_absolute(new_item, 2, e_minicard->height);
-
- gtk_signal_connect(GTK_OBJECT(new_item),
- "resize",
- GTK_SIGNAL_FUNC(_resize),
- (gpointer) e_minicard);
}
- _update_card( e_minicard );
+ e_canvas_item_request_reflow(item);
if (!item->canvas->aa) {
}
@@ -402,8 +367,26 @@ e_minicard_event (GnomeCanvasItem *item, GdkEvent *event)
}
static void
-_update_card( EMinicard *e_minicard )
+e_minicard_resize_children( EMinicard *e_minicard )
+{
+ if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) {
+ GList *list;
+
+ gnome_canvas_item_set( e_minicard->header_text,
+ "width", (double) e_minicard->width - 12,
+ NULL );
+ for ( list = e_minicard->fields; list; list = g_list_next( list ) ) {
+ gnome_canvas_item_set( GNOME_CANVAS_ITEM( list->data ),
+ "width", (double) e_minicard->width - 4.0,
+ NULL );
+ }
+ }
+}
+
+static void
+e_minicard_reflow( GnomeCanvasItem *item, int flags )
{
+ EMinicard *e_minicard = E_MINICARD(item);
if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) {
GList *list;
gdouble text_height;
@@ -421,10 +404,6 @@ _update_card( EMinicard *e_minicard )
"y2", text_height + 9.0,
NULL );
- gnome_canvas_item_set( e_minicard->header_text,
- "clip_height", (double)text_height,
- NULL );
-
for(list = e_minicard->fields; list; list = g_list_next(list)) {
gtk_object_get (GTK_OBJECT(list->data),
"height", &text_height,
@@ -445,22 +424,8 @@ _update_card( EMinicard *e_minicard )
gnome_canvas_item_set( e_minicard->header_rect,
"x2", (double) e_minicard->width - 3.0,
NULL );
- gnome_canvas_item_set( e_minicard->header_text,
- "clip_width", (double) e_minicard->width - 12,
- NULL );
- for ( list = e_minicard->fields; list; list = g_list_next( list ) ) {
- gnome_canvas_item_set( GNOME_CANVAS_ITEM( list->data ),
- "width", (double) e_minicard->width - 4.0,
- NULL );
if (old_height != e_minicard->height)
- gtk_signal_emit_by_name (GTK_OBJECT (e_minicard), "resize");
- }
- }
-}
-
-static void
-_resize( GtkObject *object, gpointer data )
-{
- _update_card(E_MINICARD(data));
+ e_canvas_item_request_parent_reflow(item);
+ }
}
diff --git a/addressbook/gui/widgets/test-reflow.c b/addressbook/gui/widgets/test-reflow.c
index 319a3f5626..8cedbaac28 100644
--- a/addressbook/gui/widgets/test-reflow.c
+++ b/addressbook/gui/widgets/test-reflow.c
@@ -55,14 +55,14 @@ static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpoi
NULL );
}
-static void resize(GnomeCanvasItem *item, gpointer data)
+static void resize(GnomeCanvas *canvas, gpointer data)
{
double width;
gtk_object_get(GTK_OBJECT(reflow),
- "width", &width,
+ "width", &width,
NULL);
width = MAX(width, last_alloc.width);
- gnome_canvas_set_scroll_region(item->canvas , 0, 0, width, last_alloc.height );
+ gnome_canvas_set_scroll_region(canvas , 0, 0, width, last_alloc.height );
gnome_canvas_item_set( rect,
"x2", (double) width,
"y2", (double) last_alloc.height,
@@ -121,7 +121,7 @@ int main( int argc, char *argv[] )
"height", (double) 100,
"minimum_width", (double) 100,
NULL );
- gtk_signal_connect( GTK_OBJECT( reflow ), "resize",
+ gtk_signal_connect( GTK_OBJECT( canvas ), "reflow",
GTK_SIGNAL_FUNC( resize ),
( gpointer ) app);
for ( i = 0; i < 200; i++ )