[gtk+/multitouch: 51/57] gtk, pah: Use the touch area if available for the notification size.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/multitouch: 51/57] gtk, pah: Use the touch area if available for the notification size.
- Date: Sun, 13 Nov 2011 17:54:05 +0000 (UTC)
commit 587842bbac00772201b67017e4a2e3f78eb18859
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Nov 6 12:13:14 2011 +0100
gtk,pah: Use the touch area if available for the notification size.
On touch devices, and if the touch area isn't provided, it resorts
to using a 2.5cm diameter via gdk_screen_get_width_mm() in the hope
that it'll pop out of the finger area
gtk/gtkwidget.c | 48 ++++++++++++++++++++++++++++++++++--------------
1 files changed, 34 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index a0bbcbf..5c0759a 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -550,6 +550,7 @@ typedef struct
/* animation */
GtkWidget *popup;
guint delay_animation_id;
+ guint size;
gint start_x;
gint start_y;
@@ -7004,14 +7005,9 @@ _gtk_widget_press_and_hold_check_threshold (GtkWidget *widget,
}
if (data->popup)
- {
- guint cursor_size;
-
- cursor_size = gdk_display_get_default_cursor_size (gtk_widget_get_display (widget));
- gtk_window_move (GTK_WINDOW (data->popup),
- event->x_root - cursor_size / 2,
- event->y_root - cursor_size / 2);
- }
+ gtk_window_move (GTK_WINDOW (data->popup),
+ event->x_root - data->size / 2,
+ event->y_root - data->size / 2);
return FALSE;
}
@@ -7107,17 +7103,15 @@ gtk_widget_press_and_hold_begin_animation_timeout (gpointer user_data)
GtkWidget *widget = GTK_WIDGET (user_data);
PressAndHoldData *data;
gint x, y;
- guint cursor_size;
data = gtk_widget_peek_press_and_hold_data (widget);
g_assert (data != NULL);
gdk_window_get_device_position (gdk_screen_get_root_window (gtk_widget_get_screen (widget)),
data->device, &x, &y, NULL);
- cursor_size = gdk_display_get_default_cursor_size (gtk_widget_get_display (widget));
gtk_window_move (GTK_WINDOW (data->popup),
- x - cursor_size / 2,
- y - cursor_size / 2);
+ x - data->size / 2,
+ y - data->size / 2);
gtk_widget_show (data->popup);
gtk_widget_set_state_flags (GTK_WIDGET (data->popup),
@@ -7200,8 +7194,34 @@ _gtk_widget_press_and_hold_check_start (GtkWidget *widget,
G_CALLBACK (press_and_hold_animation_draw),
widget);
- cursor_size = gdk_display_get_default_cursor_size (gtk_widget_get_display (widget));
- gtk_window_resize (GTK_WINDOW (data->popup), cursor_size, cursor_size);
+ source_device = gdk_event_get_source_device ((GdkEvent *) event);
+ source = gdk_device_get_source (source_device);
+
+ if (source == GDK_SOURCE_TOUCH ||
+ source == GDK_SOURCE_MULTITOUCH)
+ {
+ cairo_region_t *region;
+
+ region = gdk_event_get_touch_area ((GdkEvent *) event);
+
+ if (region)
+ {
+ cairo_rectangle_int_t rect;
+
+ cairo_region_get_extents (region, &rect);
+ data->size = MAX (rect.width, rect.height);
+ }
+ else
+ {
+ /* Have an indicator with 2.5cm of diameter */
+ data->size = (25 * gdk_screen_get_width (screen)) /
+ gdk_screen_get_width_mm (screen);
+ }
+ }
+ else
+ data->size = gdk_display_get_default_cursor_size (gtk_widget_get_display (widget));
+
+ gtk_window_resize (GTK_WINDOW (data->popup), data->size, data->size);
region = cairo_region_create ();
gdk_window_input_shape_combine_region (gtk_widget_get_window (data->popup), region, 0, 0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]