static void _update_logo (MexContentTile *tile) { ClutterActor *image; GError *err = NULL; const gchar *logo_url; logo_url = mex_content_get_metadata (tile->priv->content, MEX_CONTENT_METADATA_STATION_LOGO); if (!logo_url) { mex_tile_set_primary_icon (MEX_TILE (tile), NULL); return; } image = mx_image_new (); if (g_str_has_prefix (logo_url, "file://")) logo_url = logo_url + 7; mx_image_set_from_file_at_size (MX_IMAGE (image), logo_url, 26, 26, &err); if (err) { g_warning ("Could not load station logo: %s", err->message); g_clear_error (&err); return; } mex_tile_set_primary_icon (MEX_TILE (tile), image); }
static void mex_tile_dispose (GObject *object) { MexTile *self = MEX_TILE (object); MexTilePrivate *priv = self->priv; /* Use icon setting functions to remove icons */ mex_tile_set_primary_icon (self, NULL); mex_tile_set_secondary_icon (self, NULL); if (priv->box_layout) { clutter_actor_destroy (priv->box_layout); priv->box_layout = NULL; /* box_layout contains label and secondary_label */ priv->label = NULL; priv->secondary_label = NULL; } if (priv->header_padding) { g_boxed_free (MX_TYPE_PADDING, priv->header_padding); priv->header_padding = NULL; } if (priv->important_alpha) { g_object_unref (priv->important_alpha); priv->important_alpha = NULL; } if (priv->timeline) { clutter_timeline_stop (priv->timeline); g_object_unref (priv->timeline); priv->timeline = NULL; } if (priv->material) { cogl_object_unref (priv->material); priv->material = NULL; } G_OBJECT_CLASS (mex_tile_parent_class)->dispose (object); }
static void mex_tile_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MexTile *self = MEX_TILE (object); switch (property_id) { case PROP_PRIMARY_ICON: mex_tile_set_primary_icon (self, g_value_get_object (value)); break; case PROP_SECONDARY_ICON: mex_tile_set_secondary_icon (self, g_value_get_object (value)); break; case PROP_LABEL: mex_tile_set_label (self, g_value_get_string (value)); break; case PROP_SECONDARY_LABEL: mex_tile_set_secondary_label (self, g_value_get_string (value)); break; case PROP_HEADER_VISIBLE: mex_tile_set_header_visible (self, g_value_get_boolean (value)); break; case PROP_IMPORTANT: mex_tile_set_important (self, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
static void mex_content_box_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { MexContentBox *self = MEX_CONTENT_BOX (object); MexContentBoxPrivate *priv = self->priv; switch (property_id) { case PROP_MEDIA_URL: g_free (priv->media_url); priv->media_url = g_value_dup_string (value); break; case PROP_LOGO_URL: /* FIXME: We want the logo URL to be file:// to share the same * underlying texture. This should be handled by a generic "download * queue + texture cache" thingy that caches the same URL to a local * file and hands over a ClutterTexure (or a MagicTexture) with the * same underlying Cogl texture */ { MxTextureCache *cache; ClutterActor *logo, *logo_frame; GFile *file; gchar *path; gint bw, bh; gfloat ratio; g_free (priv->logo_url); priv->logo_url = g_value_dup_string (value); if (priv->logo_url == NULL) break; file = g_file_new_for_uri (priv->logo_url); path = g_file_get_path (file); g_object_unref (file); if (G_UNLIKELY (path == NULL)) { g_warning ("The logo URL provided is not local, refusing to load it"); break; } cache = mx_texture_cache_get_default (); logo = mx_texture_cache_get_actor (cache, path); if (G_UNLIKELY (logo == NULL)) { g_warning ("Could not retrieve texture for %s", path); break; } logo_frame = mex_aspect_frame_new (); /* FIXME, had to set the size (for now?) provides some GObject properties * to tune that? expose it in the CSS */ clutter_actor_set_size (logo_frame, 60, 40); clutter_texture_get_base_size (CLUTTER_TEXTURE (logo), &bw, &bh); ratio = bh / 40.; mex_aspect_frame_set_ratio (MEX_ASPECT_FRAME (logo_frame), ratio); clutter_container_add_actor (CLUTTER_CONTAINER (logo_frame), logo); mex_tile_set_primary_icon (MEX_TILE (priv->tile), logo_frame); } break; case PROP_THUMB_WIDTH: priv->thumb_width = g_value_get_int (value); g_object_set (G_OBJECT (priv->tile), "thumb-width", priv->thumb_width, NULL); break; case PROP_THUMB_HEIGHT: priv->thumb_height = g_value_get_int (value); g_object_set (G_OBJECT (priv->tile), "thumb-height", priv->thumb_height, NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }