mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-21 20:12:30 +00:00
app: add more modifier utility functions to gimpwidgets-utils.[ch]
- gimp_modifiers_to_channel_op() translates a modifier state to REPLACE, ADD, SUBTRACT or INTERSECT. - gimp_replace_virtual_modifiers() uses gdk_keymap_add_virtual_modifiers() to replace the physical bits in a modifier state to their virtual counterparts (and not just adds the virtual ones like the GDK function).
This commit is contained in:
parent
f45cccbc82
commit
fdf103ce08
|
@ -616,6 +616,69 @@ gimp_suggest_modifiers (const gchar *message,
|
|||
}
|
||||
#undef BUF_SIZE
|
||||
|
||||
GimpChannelOps
|
||||
gimp_modifiers_to_channel_op (GtkWidget *widget,
|
||||
GdkModifierType modifiers)
|
||||
{
|
||||
GdkModifierType extend_mask;
|
||||
GdkModifierType modify_mask;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), GIMP_CHANNEL_OP_REPLACE);
|
||||
|
||||
extend_mask =
|
||||
gtk_widget_get_modifier_mask (widget,
|
||||
GDK_MODIFIER_INTENT_EXTEND_SELECTION);
|
||||
modify_mask =
|
||||
gtk_widget_get_modifier_mask (widget,
|
||||
GDK_MODIFIER_INTENT_MODIFY_SELECTION);
|
||||
|
||||
if (modifiers & extend_mask)
|
||||
{
|
||||
if (modifiers & modify_mask)
|
||||
{
|
||||
return GIMP_CHANNEL_OP_INTERSECT;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GIMP_CHANNEL_OP_ADD;
|
||||
}
|
||||
}
|
||||
else if (modifiers & modify_mask)
|
||||
{
|
||||
return GIMP_CHANNEL_OP_SUBTRACT;
|
||||
}
|
||||
|
||||
return GIMP_CHANNEL_OP_REPLACE;
|
||||
}
|
||||
|
||||
GdkModifierType
|
||||
gimp_replace_virtual_modifiers (GdkModifierType modifiers)
|
||||
{
|
||||
GdkDisplay *display = gdk_display_get_default ();
|
||||
GdkModifierType result = 0;
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
GdkModifierType real = 1 << i;
|
||||
|
||||
if (modifiers & real)
|
||||
{
|
||||
GdkModifierType virtual = real;
|
||||
|
||||
gdk_keymap_add_virtual_modifiers (gdk_keymap_get_for_display (display),
|
||||
&virtual);
|
||||
|
||||
if (virtual == real)
|
||||
result |= virtual;
|
||||
else
|
||||
result |= virtual & ~real;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_get_screen_resolution:
|
||||
* @screen: a #GdkScreen or %NULL
|
||||
|
|
|
@ -50,6 +50,7 @@ GtkIconSize gimp_get_icon_size (GtkWidget *widget
|
|||
gint width,
|
||||
gint height);
|
||||
GimpTabStyle gimp_preview_tab_style_to_icon (GimpTabStyle tab_style);
|
||||
|
||||
const gchar * gimp_get_mod_separator (void);
|
||||
const gchar * gimp_get_mod_string (GdkModifierType modifiers);
|
||||
gchar * gimp_suggest_modifiers (const gchar *message,
|
||||
|
@ -57,6 +58,10 @@ gchar * gimp_suggest_modifiers (const gchar *messag
|
|||
const gchar *shift_format,
|
||||
const gchar *control_format,
|
||||
const gchar *alt_format);
|
||||
GimpChannelOps gimp_modifiers_to_channel_op (GtkWidget *widget,
|
||||
GdkModifierType modifiers);
|
||||
GdkModifierType gimp_replace_virtual_modifiers (GdkModifierType modifiers);
|
||||
|
||||
void gimp_get_screen_resolution (GdkScreen *screen,
|
||||
gdouble *xres,
|
||||
gdouble *yres);
|
||||
|
|
Loading…
Reference in a new issue