A11y improvements

This commit is contained in:
Matthias Clasen 2012-02-08 23:21:41 -05:00
parent 40974b1463
commit 9cc827fcd1
2 changed files with 86 additions and 17 deletions

View File

@ -33,6 +33,8 @@
#include "gtksizegroup.h" #include "gtksizegroup.h"
#include "gtkalignment.h" #include "gtkalignment.h"
#include <math.h>
/** /**
* SECTION:gtkcolorchooserwidget * SECTION:gtkcolorchooserwidget
* @Short_description: A widget for choosing colors * @Short_description: A widget for choosing colors
@ -266,10 +268,12 @@ add_palette (GtkColorChooserWidget *cc,
gboolean horizontal, gboolean horizontal,
gint colors_per_line, gint colors_per_line,
gint n_colors, gint n_colors,
GdkRGBA *colors) GdkRGBA *colors,
const gchar **names)
{ {
GtkWidget *grid; GtkWidget *grid;
GtkWidget *p; GtkWidget *p;
AtkObject *atk_obj;
gint line, pos; gint line, pos;
gint i; gint i;
gint left, right; gint left, right;
@ -292,6 +296,11 @@ add_palette (GtkColorChooserWidget *cc,
for (i = 0; i < n_colors; i++) for (i = 0; i < n_colors; i++)
{ {
p = gtk_color_swatch_new (); p = gtk_color_swatch_new ();
if (names)
{
atk_obj = gtk_widget_get_accessible (p);
atk_object_set_description (atk_obj, names[i]);
}
gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &colors[i]); gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &colors[i]);
connect_swatch_signals (p, cc); connect_swatch_signals (p, cc);
@ -357,16 +366,38 @@ add_default_palette (GtkColorChooserWidget *cc)
{ "#888a85", "#555753", "#2e3436" }, /* Aluminum 1 */ { "#888a85", "#555753", "#2e3436" }, /* Aluminum 1 */
{ "#eeeeec", "#d3d7cf", "#babdb6" } /* Aluminum 2 */ { "#eeeeec", "#d3d7cf", "#babdb6" } /* Aluminum 2 */
}; };
const gchar *color_names[] = {
"Light Scarlet Red", "Scarlet Red", "Dark Scarlet Red",
"Light Orange", "Orange", "Dark Orange",
"Light Butter", "Butter", "Dark Butter",
"Light Chameleon", "Chameleon", "Dark Chameleon",
"Light Sky Blue", "Sky Blue", "Dark Sky Blue",
"Light Plum", "Plum", "Dark Plum",
"Light Chocolate", "Chocolate", "Dark Chocolate",
"Light Aluminum 1", "Aluminum 1", "Dark Aluminum 1",
"Light Aluminum 2", "Aluminum 2", "Dark Aluminum 2"
};
const gchar *default_grays[9] = { const gchar *default_grays[9] = {
"#000000", "#000000", /* black */
"#2e3436", "#2e3436", /* very dark gray */
"#555753", "#555753", /* darker gray */
"#888a85", "#888a85", /* dark gray */
"#babdb6", "#babdb6", /* medium gray */
"#d3d7cf", "#d3d7cf", /* light gray */
"#eeeeec", "#eeeeec", /* lighter gray */
"#f3f3f3", "#f3f3f3", /* very light gray */
"#ffffff" "#ffffff" /* white */
};
const gchar *gray_names[] = {
"Black",
"Very Dark Gray",
"Darker Gray",
"Dark Gray",
"Medium Gray",
"Light Gray",
"Lighter Gray",
"Very Light Gray",
"White"
}; };
GdkRGBA colors[9*3]; GdkRGBA colors[9*3];
gint i, j; gint i, j;
@ -375,16 +406,25 @@ add_default_palette (GtkColorChooserWidget *cc)
for (j = 0; j < 3; j++) for (j = 0; j < 3; j++)
gdk_rgba_parse (&colors[i*3 + j], default_colors[i][j]); gdk_rgba_parse (&colors[i*3 + j], default_colors[i][j]);
add_palette (cc, FALSE, 3, 9*3, colors); add_palette (cc, FALSE, 3, 9*3, colors, color_names);
for (i = 0; i < 9; i++) for (i = 0; i < 9; i++)
gdk_rgba_parse (&colors[i], default_grays[i]); gdk_rgba_parse (&colors[i], default_grays[i]);
add_palette (cc, TRUE, 9, 9, colors); add_palette (cc, TRUE, 9, 9, colors, gray_names);
cc->priv->has_default_palette = TRUE; cc->priv->has_default_palette = TRUE;
} }
static guint
scale_round (gdouble value, gdouble scale)
{
value = floor (value * scale + 0.5);
value = MAX (value, 0);
value = MIN (value, scale);
return (guint)value;
}
static void static void
gtk_color_chooser_widget_init (GtkColorChooserWidget *cc) gtk_color_chooser_widget_init (GtkColorChooserWidget *cc)
{ {
@ -398,6 +438,8 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc)
GVariant *variant; GVariant *variant;
GVariantIter iter; GVariantIter iter;
gboolean selected; gboolean selected;
AtkObject *atk_obj;
gchar *text;
cc->priv = G_TYPE_INSTANCE_GET_PRIVATE (cc, GTK_TYPE_COLOR_CHOOSER_WIDGET, GtkColorChooserWidgetPrivate); cc->priv = G_TYPE_INSTANCE_GET_PRIVATE (cc, GTK_TYPE_COLOR_CHOOSER_WIDGET, GtkColorChooserWidgetPrivate);
@ -419,6 +461,9 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc)
gtk_box_pack_end (GTK_BOX (cc->priv->palette), label, FALSE, TRUE, 0); gtk_box_pack_end (GTK_BOX (cc->priv->palette), label, FALSE, TRUE, 0);
cc->priv->button = button = gtk_color_swatch_new (); cc->priv->button = button = gtk_color_swatch_new ();
atk_obj = gtk_widget_get_accessible (button);
atk_object_set_role (atk_obj, ATK_ROLE_PUSH_BUTTON);
atk_object_set_description (atk_obj, _("Create custom color"));
connect_button_signals (button, cc); connect_button_signals (button, cc);
gtk_color_swatch_set_icon (GTK_COLOR_SWATCH (button), "list-add-symbolic"); gtk_color_swatch_set_icon (GTK_COLOR_SWATCH (button), "list-add-symbolic");
gtk_container_add (GTK_CONTAINER (box), button); gtk_container_add (GTK_CONTAINER (box), button);
@ -435,6 +480,14 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc)
p = gtk_color_swatch_new (); p = gtk_color_swatch_new ();
gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &color); gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &color);
gtk_color_swatch_set_can_drop (GTK_COLOR_SWATCH (p), TRUE); gtk_color_swatch_set_can_drop (GTK_COLOR_SWATCH (p), TRUE);
atk_obj = gtk_widget_get_accessible (p);
text = g_strdup_printf (_("Custom color %d: Red %d%%, Green %d%%, Blue %d%%, Alpha %d%%"), i,
scale_round (color.red, 100),
scale_round (color.green, 100),
scale_round (color.blue, 100),
scale_round (color.alpha, 100));
atk_object_set_description (atk_obj, text);
g_free (text);
connect_custom_signals (p, cc); connect_custom_signals (p, cc);
gtk_container_add (GTK_CONTAINER (box), p); gtk_container_add (GTK_CONTAINER (box), p);
@ -669,7 +722,7 @@ gtk_color_chooser_widget_add_palette (GtkColorChooser *chooser,
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (chooser); GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (chooser);
remove_default_palette (cc); remove_default_palette (cc);
add_palette (cc, horizontal, colors_per_line, n_colors, colors); add_palette (cc, horizontal, colors_per_line, n_colors, colors, NULL);
} }
static void static void

View File

@ -379,6 +379,7 @@ gtk_color_editor_init (GtkColorEditor *editor)
GtkWidget *entry; GtkWidget *entry;
GtkWidget *swatch; GtkWidget *swatch;
GtkAdjustment *h_adj, *s_adj, *v_adj, *a_adj; GtkAdjustment *h_adj, *s_adj, *v_adj, *a_adj;
AtkObject *atk_obj;
GdkRGBA transparent = { 0, 0, 0, 0 }; GdkRGBA transparent = { 0, 0, 0, 0 };
editor->priv = G_TYPE_INSTANCE_GET_PRIVATE (editor, editor->priv = G_TYPE_INSTANCE_GET_PRIVATE (editor,
@ -408,6 +409,9 @@ gtk_color_editor_init (GtkColorEditor *editor)
gtk_widget_set_sensitive (swatch, FALSE); gtk_widget_set_sensitive (swatch, FALSE);
editor->priv->entry = entry = gtk_entry_new (); editor->priv->entry = entry = gtk_entry_new ();
atk_obj = gtk_widget_get_accessible (entry);
atk_object_set_role (atk_obj, ATK_ROLE_ENTRY);
atk_object_set_name (atk_obj, _("Color Name"));
g_signal_connect (entry, "activate", G_CALLBACK (entry_apply), editor); g_signal_connect (entry, "activate", G_CALLBACK (entry_apply), editor);
g_signal_connect (entry, "notify::text", G_CALLBACK (entry_text_changed), editor); g_signal_connect (entry, "notify::text", G_CALLBACK (entry_text_changed), editor);
g_signal_connect (entry, "focus-out-event", G_CALLBACK (entry_focus_out), editor); g_signal_connect (entry, "focus-out-event", G_CALLBACK (entry_focus_out), editor);
@ -452,9 +456,15 @@ gtk_color_editor_init (GtkColorEditor *editor)
/* Construct the sv popup */ /* Construct the sv popup */
editor->priv->s_entry = entry = gtk_spin_button_new (scaled_adjustment (s_adj, 100), 1, 0); editor->priv->s_entry = entry = gtk_spin_button_new (scaled_adjustment (s_adj, 100), 1, 0);
atk_obj = gtk_widget_get_accessible (entry);
atk_object_set_name (atk_obj, C_("Color channel", "Saturation"));
atk_object_set_role (atk_obj, ATK_ROLE_ENTRY);
g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor); g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor);
editor->priv->v_entry = entry = gtk_spin_button_new (scaled_adjustment (v_adj, 100), 1, 0); editor->priv->v_entry = entry = gtk_spin_button_new (scaled_adjustment (v_adj, 100), 1, 0);
atk_obj = gtk_widget_get_accessible (entry);
atk_object_set_name (atk_obj, C_("Color channel", "Value"));
atk_object_set_role (atk_obj, ATK_ROLE_ENTRY);
g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor); g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor);
grid = gtk_grid_new (); grid = gtk_grid_new ();
@ -469,6 +479,9 @@ gtk_color_editor_init (GtkColorEditor *editor)
/* Construct the h popup */ /* Construct the h popup */
editor->priv->h_entry = entry = gtk_spin_button_new (scaled_adjustment (h_adj, 100), 1, 0); editor->priv->h_entry = entry = gtk_spin_button_new (scaled_adjustment (h_adj, 100), 1, 0);
atk_obj = gtk_widget_get_accessible (entry);
atk_object_set_name (atk_obj, C_("Color channel", "Hue"));
atk_object_set_role (atk_obj, ATK_ROLE_ENTRY);
g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor); g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor);
grid = gtk_grid_new (); grid = gtk_grid_new ();
@ -481,6 +494,9 @@ gtk_color_editor_init (GtkColorEditor *editor)
/* Construct the a popup */ /* Construct the a popup */
editor->priv->a_entry = entry = gtk_spin_button_new (scaled_adjustment (a_adj, 100), 1, 0); editor->priv->a_entry = entry = gtk_spin_button_new (scaled_adjustment (a_adj, 100), 1, 0);
atk_obj = gtk_widget_get_accessible (entry);
atk_object_set_name (atk_obj, C_("Color channel", "Alpha"));
atk_object_set_role (atk_obj, ATK_ROLE_ENTRY);
g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor); g_signal_connect (entry, "key-press-event", G_CALLBACK (popup_key_press), editor);
grid = gtk_grid_new (); grid = gtk_grid_new ();