[gnome-control-center] wacom: Remove the use of a drawing area
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] wacom: Remove the use of a drawing area
- Date: Wed, 11 Jan 2012 19:28:58 +0000 (UTC)
commit 5feefb444d3fa66dc39c0dd60c9c09cc0a61c74e
Author: Bastien Nocera <hadess hadess net>
Date: Wed Jan 11 19:02:37 2012 +0000
wacom: Remove the use of a drawing area
We don't need one, we can draw on the window directly.
panels/wacom/calibrator/gui_gtk.c | 87 ++++++++++++++++++-------------------
panels/wacom/calibrator/gui_gtk.h | 4 +-
2 files changed, 44 insertions(+), 47 deletions(-)
---
diff --git a/panels/wacom/calibrator/gui_gtk.c b/panels/wacom/calibrator/gui_gtk.c
index 8c8b558..3237126 100644
--- a/panels/wacom/calibrator/gui_gtk.c
+++ b/panels/wacom/calibrator/gui_gtk.c
@@ -84,7 +84,7 @@ resize_display(struct CalibArea *calib_area)
{
/* check that screensize did not change (if no manually specified geometry) */
GtkAllocation allocation;
- gtk_widget_get_allocation(calib_area->drawing_area, &allocation);
+ gtk_widget_get_allocation(calib_area->window, &allocation);
if (calib_area->calibrator->geometry == NULL &&
(calib_area->display_width != allocation.width ||
calib_area->display_height != allocation.height ))
@@ -206,7 +206,7 @@ draw_message(struct CalibArea *calib_area,
static void
redraw(struct CalibArea *calib_area)
{
- GdkWindow *win = gtk_widget_get_window(calib_area->drawing_area);
+ GdkWindow *win = gtk_widget_get_window(calib_area->window);
if (win)
{
GdkRectangle rect;
@@ -238,16 +238,14 @@ on_button_press_event(GtkWidget *widget,
/* Are we done yet? */
if (calib_area->calibrator->num_clicks >= 4)
{
- GtkWidget *parent = gtk_widget_get_parent(calib_area->drawing_area);
- if (parent)
- gtk_widget_destroy(parent);
- return TRUE;
+ gtk_widget_destroy (calib_area->window);
+ return FALSE;
}
/* Force a redraw */
redraw(calib_area);
- return TRUE;
+ return FALSE;
}
static gboolean
@@ -256,16 +254,13 @@ on_key_release_event(GtkWidget *widget,
gpointer data)
{
struct CalibArea *calib_area = (struct CalibArea*)data;
- GtkWidget *parent;
if (event->type != GDK_KEY_RELEASE)
return FALSE;
if (event->keyval != GDK_KEY_Escape)
return FALSE;
- parent = gtk_widget_get_parent(calib_area->drawing_area);
- if (parent)
- gtk_widget_destroy(parent);
+ gtk_widget_destroy (calib_area->window);
return FALSE;
}
@@ -273,18 +268,16 @@ static gboolean
on_timer_signal(struct CalibArea *calib_area)
{
GdkWindow *win;
- GtkWidget *parent = gtk_widget_get_parent(calib_area->drawing_area);
calib_area->time_elapsed += TIME_STEP;
- if (calib_area->time_elapsed > MAX_TIME || parent == NULL)
+ if (calib_area->time_elapsed > MAX_TIME)
{
- if (parent)
- gtk_widget_destroy(parent);
+ gtk_widget_destroy (calib_area->window);
return FALSE;
}
/* Update clock */
- win = gtk_widget_get_window(calib_area->drawing_area);
+ win = gtk_widget_get_window (calib_area->window);
if (win)
{
GdkRectangle rect;
@@ -299,40 +292,46 @@ on_timer_signal(struct CalibArea *calib_area)
}
static struct CalibArea*
-CalibrationArea_(struct Calib *c)
+calibration_area_new (struct Calib *c,
+ GtkWidget *window)
{
struct CalibArea *calib_area;
- const char *geo = c->geometry;
calib_area = g_new0 (struct CalibArea, 1);
calib_area->calibrator = c;
- calib_area->drawing_area = gtk_drawing_area_new();
+ calib_area->window = window;
/* Listen for mouse events */
- gtk_widget_add_events(calib_area->drawing_area, GDK_KEY_RELEASE_MASK | GDK_BUTTON_PRESS_MASK);
- gtk_widget_set_can_focus(calib_area->drawing_area, TRUE);
+ gtk_widget_add_events (window, GDK_KEY_RELEASE_MASK | GDK_BUTTON_PRESS_MASK);
+ gtk_widget_set_can_focus (window, TRUE);
/* Connect callbacks */
- g_signal_connect(calib_area->drawing_area, "draw", G_CALLBACK(draw), calib_area);
- g_signal_connect(calib_area->drawing_area, "button-press-event", G_CALLBACK(on_button_press_event), calib_area);
- g_signal_connect(calib_area->drawing_area, "key-release-event", G_CALLBACK(on_key_release_event), calib_area);
-
+ g_signal_connect (window, "draw",
+ G_CALLBACK(draw), calib_area);
+ g_signal_connect (window, "button-press-event",
+ G_CALLBACK(on_button_press_event), calib_area);
+ g_signal_connect (window, "key-release-event",
+ G_CALLBACK(on_key_release_event), calib_area);
+
+ /* FIXME */
+#if 0
/* parse geometry string */
- if (geo != NULL)
+ if (c->geometry != NULL)
{
int gw,gh;
- int res = sscanf(geo,"%dx%d",&gw,&gh);
+ int res = sscanf(c->geometry,"%dx%d",&gw,&gh);
if (res != 2)
- geo = NULL;
+ c->geometry = NULL;
else
set_display_size(calib_area, gw, gh );\
}
- if (geo == NULL)
+ if (c->geometry == NULL)
{
GtkAllocation allocation;
gtk_widget_get_allocation(calib_area->drawing_area, &allocation);
set_display_size(calib_area, allocation.width, allocation.height);
}
+#endif
/* Setup timer for animation */
calib_area->anim_id = g_timeout_add(TIME_STEP, (GSourceFunc)on_timer_signal, calib_area);
@@ -352,9 +351,12 @@ run_gui(struct Calib *c,
gboolean *swap)
{
gboolean success;
- struct CalibArea *calib_area = CalibrationArea_(c);
+ struct CalibArea *calib_area;
GdkRGBA black;
+ GtkWidget *win;
+ GdkScreen *screen;
GdkWindow *window;
+ GdkRectangle rect;
g_debug ("Current calibration: %d, %d, %d, %d\n",
c->old_axis.x_min,
@@ -362,31 +364,26 @@ run_gui(struct Calib *c,
c->old_axis.x_max,
c->old_axis.y_max);
- GdkScreen *screen = gdk_screen_get_default();
- GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- GdkRectangle rect;
+ /* Which monitor are we on? */
+ screen = gdk_screen_get_default();
/*int num_monitors = screen->get_n_monitors(); TODO, multiple monitors?*/
-
- g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(gtk_main_quit), NULL);
-
gdk_screen_get_monitor_geometry(screen, 0, &rect);
- /* when no window manager: explicitely take size of full screen */
- gtk_window_move(GTK_WINDOW(win), rect.x, rect.y);
- gtk_window_set_default_size(GTK_WINDOW(win), rect.width, rect.height);
+ win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_app_paintable (GTK_WIDGET (win), TRUE);
+ g_signal_connect (G_OBJECT (win), "destroy",
+ G_CALLBACK (gtk_main_quit), NULL);
+ gtk_window_move (GTK_WINDOW(win), rect.x, rect.y);
+ gtk_window_set_default_size (GTK_WINDOW(win), rect.width, rect.height);
+
+ calib_area = calibration_area_new (c, win);
/* in case of window manager: set as full screen to hide window decorations */
gtk_window_fullscreen(GTK_WINDOW(win));
- gtk_container_add(GTK_CONTAINER(win), calib_area->drawing_area);
-
/* Black background */
gdk_rgba_parse (&black, "000");
- gtk_widget_realize (calib_area->drawing_area);
- window = gtk_widget_get_window (calib_area->drawing_area);
- gdk_window_set_background_rgba (window, &black);
-
gtk_widget_realize (win);
window = gtk_widget_get_window (win);
gdk_window_set_background_rgba (window, &black);
diff --git a/panels/wacom/calibrator/gui_gtk.h b/panels/wacom/calibrator/gui_gtk.h
index 72f27d1..7d48286 100644
--- a/panels/wacom/calibrator/gui_gtk.h
+++ b/panels/wacom/calibrator/gui_gtk.h
@@ -37,9 +37,9 @@ struct CalibArea
const char* message;
- GtkWidget *drawing_area;
-
guint anim_id;
+
+ GtkWidget *window;
};
gboolean run_gui (struct Calib *c,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]