diff options
Diffstat (limited to 'widgets/misc/e-contact-marker.c')
-rw-r--r-- | widgets/misc/e-contact-marker.c | 278 |
1 files changed, 137 insertions, 141 deletions
diff --git a/widgets/misc/e-contact-marker.c b/widgets/misc/e-contact-marker.c index 233ae076be..3a871eaf6f 100644 --- a/widgets/misc/e-contact-marker.c +++ b/widgets/misc/e-contact-marker.c @@ -44,18 +44,18 @@ struct _EContactMarkerPrivate { gchar *contact_uid; - ClutterActor *image; - ClutterActor *text_actor; + ClutterActor *image; + ClutterActor *text_actor; - ClutterActor *shadow; - ClutterActor *background; + ClutterActor *shadow; + ClutterActor *background; - guint total_width; - guint total_height; + guint total_width; + guint total_height; - ClutterGroup *content_group; + ClutterGroup *content_group; - guint redraw_id; + guint redraw_id; }; enum { @@ -92,7 +92,7 @@ texture_new_from_pixbuf (GdkPixbuf *pixbuf, ClutterActor *texture = NULL; const guchar *data; gboolean has_alpha, success; - int width, height, rowstride; + gint width, height, rowstride; ClutterTextureFlags flags = 0; data = gdk_pixbuf_get_pixels (pixbuf); @@ -114,7 +114,6 @@ texture_new_from_pixbuf (GdkPixbuf *pixbuf, return texture; } - static ClutterActor* contact_photo_to_texture (EContactPhoto *photo) { @@ -126,7 +125,7 @@ contact_photo_to_texture (EContactPhoto *photo) GdkPixbufLoader *loader = gdk_pixbuf_loader_new (); gdk_pixbuf_loader_write (loader, photo->data.inlined.data, photo->data.inlined.length, NULL); gdk_pixbuf_loader_close (loader, NULL); - pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); + pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); if (pixbuf) g_object_ref (pixbuf); g_object_unref (loader); @@ -182,7 +181,6 @@ draw_box (cairo_t *cr, cairo_close_path (cr); } - static void draw_shadow (EContactMarker *marker, gint width, @@ -201,36 +199,35 @@ draw_shadow (EContactMarker *marker, scaling = 0.65; x = -40 * slope; - shadow = clutter_cairo_texture_new (width + x, (height + point)); - cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (shadow)); + shadow = clutter_cairo_texture_new (width + x, (height + point)); + cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (shadow)); - cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); - cairo_paint (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - cairo_matrix_init (&matrix, 1, 0, slope, scaling, x, 0); - cairo_set_matrix (cr, &matrix); + cairo_matrix_init (&matrix, 1, 0, slope, scaling, x, 0); + cairo_set_matrix (cr, &matrix); - draw_box (cr, width, height, point); + draw_box (cr, width, height, point); - cairo_set_source_rgba (cr, 0, 0, 0, 0.15); - cairo_fill (cr); + cairo_set_source_rgba (cr, 0, 0, 0, 0.15); + cairo_fill (cr); - cairo_destroy (cr); + cairo_destroy (cr); - clutter_actor_set_position (shadow, 0, height / 2.0); + clutter_actor_set_position (shadow, 0, height / 2.0); - clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), shadow); + clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), shadow); - if (priv->shadow != NULL) { - clutter_container_remove_actor (CLUTTER_CONTAINER (priv->content_group), - priv->shadow); - } + if (priv->shadow != NULL) { + clutter_container_remove_actor (CLUTTER_CONTAINER (priv->content_group), + priv->shadow); + } - priv->shadow = shadow; + priv->shadow = shadow; } - static void draw_background (EContactMarker *marker, gint width, @@ -238,69 +235,68 @@ draw_background (EContactMarker *marker, gint point) { EContactMarkerPrivate *priv = marker->priv; - ClutterActor *bg = NULL; + ClutterActor *bg = NULL; const ClutterColor *color; - ClutterColor darker_color; - cairo_t *cr; + ClutterColor darker_color; + cairo_t *cr; - bg = clutter_cairo_texture_new (width, height + point); - cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (bg)); + bg = clutter_cairo_texture_new (width, height + point); + cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (bg)); - cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); - cairo_paint (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); /* If selected, add the selection color to the marker's color */ - if (champlain_marker_get_selected (CHAMPLAIN_MARKER (marker))) - color = champlain_marker_get_selection_color (); - else - color = &DEFAULT_COLOR; - - draw_box (cr, width, height, point); - - clutter_color_darken (color, &darker_color); - - cairo_set_source_rgba (cr, - color->red / 255.0, - color->green / 255.0, - color->blue / 255.0, - color->alpha / 255.0); - cairo_fill_preserve (cr); - - cairo_set_line_width (cr, 1.0); - cairo_set_source_rgba (cr, - darker_color.red / 255.0, - darker_color.green / 255.0, - darker_color.blue / 255.0, - darker_color.alpha / 255.0); - cairo_stroke (cr); - cairo_destroy (cr); - - clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), bg); - - if (priv->background != NULL) { - clutter_container_remove_actor (CLUTTER_CONTAINER (priv->content_group), - priv->background); - } - - priv->background = bg; -} + if (champlain_marker_get_selected (CHAMPLAIN_MARKER (marker))) + color = champlain_marker_get_selection_color (); + else + color = &DEFAULT_COLOR; + + draw_box (cr, width, height, point); + + clutter_color_darken (color, &darker_color); + + cairo_set_source_rgba (cr, + color->red / 255.0, + color->green / 255.0, + color->blue / 255.0, + color->alpha / 255.0); + cairo_fill_preserve (cr); + + cairo_set_line_width (cr, 1.0); + cairo_set_source_rgba (cr, + darker_color.red / 255.0, + darker_color.green / 255.0, + darker_color.blue / 255.0, + darker_color.alpha / 255.0); + cairo_stroke (cr); + cairo_destroy (cr); + + clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), bg); + + if (priv->background != NULL) { + clutter_container_remove_actor (CLUTTER_CONTAINER (priv->content_group), + priv->background); + } + priv->background = bg; +} static void draw_marker (EContactMarker *marker) { - EContactMarkerPrivate *priv = marker->priv; + EContactMarkerPrivate *priv = marker->priv; ChamplainLabel *label = CHAMPLAIN_LABEL (marker); guint height = 0, point = 0; - guint total_width = 0, total_height = 0; + guint total_width = 0, total_height = 0; ClutterText *text; if (priv->image) { clutter_actor_set_position (priv->image, 2*PADDING, 2*PADDING); if (clutter_actor_get_parent (priv->image) == NULL) - clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->image); - } + clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->image); + } if (priv->text_actor == NULL) { priv->text_actor = clutter_text_new_with_text ("Serif 8", @@ -309,8 +305,8 @@ draw_marker (EContactMarker *marker) } text = CLUTTER_TEXT (priv->text_actor); - clutter_text_set_text (text, - champlain_label_get_text (label)); + clutter_text_set_text (text, + champlain_label_get_text (label)); clutter_text_set_font_name (text, champlain_label_get_font_name (label)); clutter_text_set_line_alignment (text, PANGO_ALIGN_CENTER); @@ -324,48 +320,48 @@ draw_marker (EContactMarker *marker) champlain_label_get_use_markup (label)); if (priv->image) { - clutter_actor_set_width (priv->text_actor, - clutter_actor_get_width (priv->image)); + clutter_actor_set_width (priv->text_actor, + clutter_actor_get_width (priv->image)); total_height = clutter_actor_get_height (priv->image) + 2*PADDING + clutter_actor_get_height (priv->text_actor) + 2*PADDING; total_width = clutter_actor_get_width (priv->image) + 4*PADDING; - clutter_actor_set_position (priv->text_actor, PADDING, - clutter_actor_get_height (priv->image)+2*PADDING+3); + clutter_actor_set_position (priv->text_actor, PADDING, + clutter_actor_get_height (priv->image)+2*PADDING+3); } else { total_height = clutter_actor_get_height (priv->text_actor) + 2*PADDING; total_width = clutter_actor_get_width (priv->text_actor) + 4*PADDING; - clutter_actor_set_position (priv->text_actor, 2 * PADDING, PADDING); + clutter_actor_set_position (priv->text_actor, 2 * PADDING, PADDING); } - height += 2 * PADDING; - if (height > total_height) - total_height = height; + height += 2 * PADDING; + if (height > total_height) + total_height = height; - clutter_text_set_color (CLUTTER_TEXT (priv->text_actor), - (champlain_marker_get_selected (CHAMPLAIN_MARKER (marker)) ? - champlain_marker_get_selection_text_color () : - champlain_label_get_text_color (CHAMPLAIN_LABEL (marker)))); - if (clutter_actor_get_parent (priv->text_actor) == NULL) - clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->text_actor); + clutter_text_set_color (CLUTTER_TEXT (priv->text_actor), + (champlain_marker_get_selected (CHAMPLAIN_MARKER (marker)) ? + champlain_marker_get_selection_text_color () : + champlain_label_get_text_color (CHAMPLAIN_LABEL (marker)))); + if (clutter_actor_get_parent (priv->text_actor) == NULL) + clutter_container_add_actor (CLUTTER_CONTAINER (priv->content_group), priv->text_actor); if (priv->text_actor == NULL && priv->image == NULL) { - total_width = 6 * PADDING; - total_height = 6 * PADDING; - } + total_width = 6 * PADDING; + total_height = 6 * PADDING; + } - point = (total_height + 2 * PADDING) / 4.0; - priv->total_width = total_width; - priv->total_height = total_height; + point = (total_height + 2 * PADDING) / 4.0; + priv->total_width = total_width; + priv->total_height = total_height; - draw_shadow (marker, total_width, total_height, point); - draw_background (marker, total_width, total_height, point); + draw_shadow (marker, total_width, total_height, point); + draw_background (marker, total_width, total_height, point); - if (priv->text_actor != NULL && priv->background != NULL) - clutter_actor_raise (priv->text_actor, priv->background); - if (priv->image != NULL && priv->background != NULL) - clutter_actor_raise (priv->image, priv->background); + if (priv->text_actor != NULL && priv->background != NULL) + clutter_actor_raise (priv->text_actor, priv->background); + if (priv->image != NULL && priv->background != NULL) + clutter_actor_raise (priv->image, priv->background); - clutter_actor_set_anchor_point (CLUTTER_ACTOR (marker), 0, total_height + point); + clutter_actor_set_anchor_point (CLUTTER_ACTOR (marker), 0, total_height + point); } static gboolean @@ -375,7 +371,7 @@ redraw_on_idle (gpointer gobject) draw_marker (marker); marker->priv->redraw_id = 0; - return FALSE; + return FALSE; } static void @@ -402,10 +398,10 @@ allocate (ClutterActor *self, CLUTTER_ACTOR_CLASS (e_contact_marker_parent_class)->allocate (self, box, flags); child_box.x1 = 0; - child_box.x2 = box->x2 - box->x1; - child_box.y1 = 0; - child_box.y2 = box->y2 - box->y1; - clutter_actor_allocate (CLUTTER_ACTOR (priv->content_group), &child_box, flags); + child_box.x2 = box->x2 - box->x1; + child_box.y1 = 0; + child_box.y2 = box->y2 - box->y1; + clutter_actor_allocate (CLUTTER_ACTOR (priv->content_group), &child_box, flags); } static void @@ -423,7 +419,7 @@ map (ClutterActor *self) CLUTTER_ACTOR_CLASS (e_contact_marker_parent_class)->map (self); - clutter_actor_map (CLUTTER_ACTOR (priv->content_group)); + clutter_actor_map (CLUTTER_ACTOR (priv->content_group)); } static void @@ -441,7 +437,7 @@ pick (ClutterActor *self, const ClutterColor *color) { EContactMarkerPrivate *priv = E_CONTACT_MARKER (self)->priv; - gfloat width, height; + gfloat width, height; if (!clutter_actor_should_pick_paint (self)) return; @@ -451,28 +447,28 @@ pick (ClutterActor *self, cogl_path_new (); - cogl_set_source_color4ub (color->red, - color->green, - color->blue, - color->alpha); + cogl_set_source_color4ub (color->red, + color->green, + color->blue, + color->alpha); cogl_path_move_to (RADIUS, 0); - cogl_path_line_to (width - RADIUS, 0); - cogl_path_arc (width - RADIUS, RADIUS, RADIUS, RADIUS, -90, 0); - cogl_path_line_to (width, height - RADIUS); - cogl_path_arc (width - RADIUS, height - RADIUS, RADIUS, RADIUS, 0, 90); - cogl_path_line_to (RADIUS, height); - cogl_path_arc (RADIUS, height - RADIUS, RADIUS, RADIUS, 90, 180); - cogl_path_line_to (0, RADIUS); - cogl_path_arc (RADIUS, RADIUS, RADIUS, RADIUS, 180, 270); - cogl_path_close (); - cogl_path_fill (); + cogl_path_line_to (width - RADIUS, 0); + cogl_path_arc (width - RADIUS, RADIUS, RADIUS, RADIUS, -90, 0); + cogl_path_line_to (width, height - RADIUS); + cogl_path_arc (width - RADIUS, height - RADIUS, RADIUS, RADIUS, 0, 90); + cogl_path_line_to (RADIUS, height); + cogl_path_arc (RADIUS, height - RADIUS, RADIUS, RADIUS, 90, 180); + cogl_path_line_to (0, RADIUS); + cogl_path_arc (RADIUS, RADIUS, RADIUS, RADIUS, 180, 270); + cogl_path_close (); + cogl_path_fill (); } static void notify_selected (GObject *gobject, - G_GNUC_UNUSED GParamSpec *pspec, - G_GNUC_UNUSED gpointer user_data) + G_GNUC_UNUSED GParamSpec *pspec, + G_GNUC_UNUSED gpointer user_data) { queue_redraw (E_CONTACT_MARKER (gobject)); } @@ -505,20 +501,20 @@ e_contact_marker_dispose (GObject *object) priv->text_actor = NULL; if (priv->content_group) { - clutter_actor_unparent (CLUTTER_ACTOR (priv->content_group)); - priv->content_group = NULL; - } + clutter_actor_unparent (CLUTTER_ACTOR (priv->content_group)); + priv->content_group = NULL; + } - G_OBJECT_CLASS (e_contact_marker_parent_class)->dispose (object); + G_OBJECT_CLASS (e_contact_marker_parent_class)->dispose (object); } static void e_contact_marker_class_init (EContactMarkerClass *class) { ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (class); - GObjectClass *object_class = G_OBJECT_CLASS (class); + GObjectClass *object_class = G_OBJECT_CLASS (class); - g_type_class_add_private (class, sizeof (EContactMarkerPrivate)); + g_type_class_add_private (class, sizeof (EContactMarkerPrivate)); object_class->dispose = e_contact_marker_dispose; object_class->finalize = e_contact_marker_finalize; @@ -545,7 +541,7 @@ e_contact_marker_init (EContactMarker *marker) EContactMarkerPrivate *priv; priv = G_TYPE_INSTANCE_GET_PRIVATE ( - marker, E_TYPE_CONTACT_MARKER, EContactMarkerPrivate); + marker, E_TYPE_CONTACT_MARKER, EContactMarkerPrivate); marker->priv = priv; priv->contact_uid = NULL; @@ -556,11 +552,11 @@ e_contact_marker_init (EContactMarker *marker) priv->content_group = CLUTTER_GROUP (clutter_group_new ()); priv->redraw_id = 0; - clutter_actor_set_parent (CLUTTER_ACTOR (priv->content_group), CLUTTER_ACTOR (marker)); + clutter_actor_set_parent (CLUTTER_ACTOR (priv->content_group), CLUTTER_ACTOR (marker)); clutter_actor_queue_relayout (CLUTTER_ACTOR (marker)); - priv->total_width = 0; - priv->total_height = 0; + priv->total_width = 0; + priv->total_height = 0; g_signal_connect (marker, "notify::selected", G_CALLBACK (notify_selected), NULL); @@ -571,7 +567,7 @@ e_contact_marker_init (EContactMarker *marker) ClutterActor * e_contact_marker_new (const gchar *name, const gchar *contact_uid, - EContactPhoto *photo) + EContactPhoto *photo) { ClutterActor *marker = CLUTTER_ACTOR (g_object_new (E_TYPE_CONTACT_MARKER, NULL)); EContactMarkerPrivate *priv = E_CONTACT_MARKER (marker)->priv; @@ -589,7 +585,7 @@ e_contact_marker_new (const gchar *name, return marker; } -const gchar* +const gchar * e_contact_marker_get_contact_uid (EContactMarker *marker) { g_return_val_if_fail (marker && E_IS_CONTACT_MARKER (marker), NULL); |