[gnome-photos] tool-filter-button, tool-filters: Mark the active filter
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] tool-filter-button, tool-filters: Mark the active filter
- Date: Fri, 4 Dec 2015 10:59:37 +0000 (UTC)
commit c1b3c7aed4e6f37f9697e7442545cfaf28db6608
Author: Debarshi Ray <debarshir gnome org>
Date: Thu Dec 3 19:11:16 2015 +0100
tool-filter-button, tool-filters: Mark the active filter
src/photos-tool-filter-button.c | 55 ++++++++++++++++++++++++++++++++++++---
src/photos-tool-filter-button.h | 5 +++-
src/photos-tool-filters.c | 14 +++++----
3 files changed, 63 insertions(+), 11 deletions(-)
---
diff --git a/src/photos-tool-filter-button.c b/src/photos-tool-filter-button.c
index ddacaac..2f228b5 100644
--- a/src/photos-tool-filter-button.c
+++ b/src/photos-tool-filter-button.c
@@ -33,7 +33,10 @@
struct _PhotosToolFilterButton
{
GtkBin parent_instance;
+ GtkRadioButton *group;
GtkWidget *button;
+ GtkWidget *overlay;
+ GtkWidget *selected_image;
gchar *label;
};
@@ -45,6 +48,7 @@ struct _PhotosToolFilterButtonClass
enum
{
PROP_0,
+ PROP_GROUP,
PROP_LABEL,
/* GtkActionable properties */
@@ -93,6 +97,16 @@ photos_tool_filter_button_set_action_target_value (GtkActionable *actionable, GV
static void
+photos_tool_filter_button_toggled (PhotosToolFilterButton *self)
+{
+ gboolean active;
+
+ active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->button));
+ gtk_widget_set_visible (self->selected_image, active);
+}
+
+
+static void
photos_tool_filter_button_constructed (GObject *object)
{
PhotosToolFilterButton *self = PHOTOS_TOOL_FILTER_BUTTON (object);
@@ -111,15 +125,19 @@ photos_tool_filter_button_constructed (GObject *object)
preview_icon_surface = gdk_cairo_surface_create_from_pixbuf (preview_icon, scale, NULL);
image = gtk_image_new_from_surface (preview_icon_surface);
- self->button = gtk_button_new_with_label (self->label);
+ self->button = gtk_radio_button_new_with_label_from_widget (self->group, self->label);
gtk_button_set_always_show_image (GTK_BUTTON (self->button), TRUE);
gtk_button_set_image (GTK_BUTTON (self->button), image);
gtk_button_set_image_position (GTK_BUTTON (self->button), GTK_POS_TOP);
gtk_button_set_relief (GTK_BUTTON (self->button), GTK_RELIEF_NONE);
- gtk_container_add (GTK_CONTAINER (self), self->button);
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (self->button), FALSE);
+ gtk_container_add (GTK_CONTAINER (self->overlay), self->button);
+ g_signal_connect_swapped (self->button, "toggled", G_CALLBACK (photos_tool_filter_button_toggled), self);
+ photos_tool_filter_button_toggled (self);
g_clear_object (&preview_icon);
g_clear_pointer (&preview_icon_surface, (GDestroyNotify) cairo_surface_destroy);
+ self->group = NULL; /* We will not need it any more */
}
@@ -173,6 +191,10 @@ photos_tool_filter_button_set_property (GObject *object, guint prop_id, const GV
switch (prop_id)
{
+ case PROP_GROUP:
+ self->group = GTK_RADIO_BUTTON (g_value_get_object (value));
+ break;
+
case PROP_LABEL:
self->label = g_value_dup_string (value);
break;
@@ -205,6 +227,15 @@ photos_tool_filter_button_set_property (GObject *object, guint prop_id, const GV
static void
photos_tool_filter_button_init (PhotosToolFilterButton *self)
{
+ self->overlay = gtk_overlay_new ();
+ gtk_container_add (GTK_CONTAINER (self), self->overlay);
+
+ self->selected_image = gtk_image_new_from_icon_name (PHOTOS_ICON_OBJECT_SELECT_SYMBOLIC,
GTK_ICON_SIZE_INVALID);
+ gtk_widget_set_halign (self->selected_image, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (self->selected_image, GTK_ALIGN_CENTER);
+ gtk_widget_set_no_show_all (self->selected_image, TRUE);
+ gtk_image_set_pixel_size (GTK_IMAGE (self->selected_image), 48);
+ gtk_overlay_add_overlay (GTK_OVERLAY (self->overlay), self->selected_image);
}
@@ -219,6 +250,14 @@ photos_tool_filter_button_class_init (PhotosToolFilterButtonClass *class)
object_class->set_property = photos_tool_filter_button_set_property;
g_object_class_install_property (object_class,
+ PROP_GROUP,
+ g_param_spec_object ("group",
+ "Group",
+ "The group of buttons to which this belongs",
+ GTK_TYPE_RADIO_BUTTON,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+ g_object_class_install_property (object_class,
PROP_LABEL,
g_param_spec_string ("label",
"Label",
@@ -242,9 +281,17 @@ photos_tool_filter_button_actionable_iface_init (GtkActionableInterface *iface)
GtkWidget *
-photos_tool_filter_button_new (const gchar *label)
+photos_tool_filter_button_new (GtkWidget *group_member, const gchar *label)
+{
+ g_return_val_if_fail (group_member == NULL || GTK_IS_RADIO_BUTTON (group_member), NULL);
+ return g_object_new (PHOTOS_TYPE_TOOL_FILTER_BUTTON, "group", group_member, "label", label, NULL);
+}
+
+
+GtkWidget *
+photos_tool_filter_button_get_group (PhotosToolFilterButton *self)
{
- return g_object_new (PHOTOS_TYPE_TOOL_FILTER_BUTTON, "label", label, NULL);
+ return self->button;
}
diff --git a/src/photos-tool-filter-button.h b/src/photos-tool-filter-button.h
index d5de5f6..3c25b68 100644
--- a/src/photos-tool-filter-button.h
+++ b/src/photos-tool-filter-button.h
@@ -40,7 +40,10 @@ typedef struct _PhotosToolFilterButtonClass PhotosToolFilterButtonClass;
GType photos_tool_filter_button_get_type (void) G_GNUC_CONST;
-GtkWidget *photos_tool_filter_button_new (const gchar *label);
+GtkWidget *photos_tool_filter_button_new (GtkWidget *group_member,
+ const gchar *label);
+
+GtkWidget *photos_tool_filter_button_get_group (PhotosToolFilterButton *self);
void photos_tool_filter_button_set_image (PhotosToolFilterButton *self,
GtkWidget *image);
diff --git a/src/photos-tool-filters.c b/src/photos-tool-filters.c
index 7589245..365ce22 100644
--- a/src/photos-tool-filters.c
+++ b/src/photos-tool-filters.c
@@ -158,43 +158,45 @@ static void
photos_tool_filters_init (PhotosToolFilters *self)
{
GtkWidget *button;
+ GtkWidget *group = NULL;
guint row = 0;
self->grid = g_object_ref_sink (gtk_grid_new ());
- button = photos_tool_filter_button_new (_("None"));
+ button = photos_tool_filter_button_new (group, _("None"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_NONE);
gtk_grid_attach (GTK_GRID (self->grid), button, 0, row, 1, 1);
+ group = photos_tool_filter_button_get_group (PHOTOS_TOOL_FILTER_BUTTON (button));
self->buttons = g_list_prepend (self->buttons, button);
- button = photos_tool_filter_button_new (_("1977"));
+ button = photos_tool_filter_button_new (group, _("1977"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_1977);
gtk_grid_attach (GTK_GRID (self->grid), button, 1, row, 1, 1);
self->buttons = g_list_prepend (self->buttons, button);
row++;
- button = photos_tool_filter_button_new (_("Brannan"));
+ button = photos_tool_filter_button_new (group, _("Brannan"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_BRANNAN);
gtk_grid_attach (GTK_GRID (self->grid), button, 0, row, 1, 1);
self->buttons = g_list_prepend (self->buttons, button);
- button = photos_tool_filter_button_new (_("Gotham"));
+ button = photos_tool_filter_button_new (group, _("Gotham"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_GOTHAM);
gtk_grid_attach (GTK_GRID (self->grid), button, 1, row, 1, 1);
self->buttons = g_list_prepend (self->buttons, button);
row++;
- button = photos_tool_filter_button_new (_("Gray"));
+ button = photos_tool_filter_button_new (group, _("Gray"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_GRAY);
gtk_grid_attach (GTK_GRID (self->grid), button, 0, row, 1, 1);
self->buttons = g_list_prepend (self->buttons, button);
- button = photos_tool_filter_button_new (_("Nashville"));
+ button = photos_tool_filter_button_new (group, _("Nashville"));
gtk_actionable_set_action_name (GTK_ACTIONABLE (button), "app.insta-current");
gtk_actionable_set_action_target (GTK_ACTIONABLE (button), "n", (gint16)
PHOTOS_OPERATION_INSTA_PRESET_NASHVILLE);
gtk_grid_attach (GTK_GRID (self->grid), button, 1, row, 1, 1);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]