diff options
author | Benjamin Otte <otte@redhat.com> | 2011-10-14 00:15:20 -0700 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2011-10-15 00:06:23 -0700 |
commit | 52e30a95090d72badff001e8976731666c68a0f7 (patch) | |
tree | 9758d32ee61ce3f152e750ce6901def5c2e7fdc7 | |
parent | 127623241459c149c8d7a415b36af32268fc26a7 (diff) |
gnome: Port to GTK 3
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/gnome/gnome-board.c | 40 | ||||
-rw-r--r-- | src/gnome/gnome-cellrenderercolor.c | 49 | ||||
-rw-r--r-- | src/gnome/gnome-cellrendererkeys.c | 12 | ||||
-rw-r--r-- | src/gnome/gnome-highscore.c | 2 |
5 files changed, 55 insertions, 50 deletions
diff --git a/configure.ac b/configure.ac index ec9f82e..0cf85db 100644 --- a/configure.ac +++ b/configure.ac @@ -43,7 +43,7 @@ dnl are known to work PKG_CHECK_MODULES(LIBGAME, \ cairo \ gnet-2.0 >= 2.0.7 \ - gtk+-2.0 >= 2.20.0 \ + gtk+-3.0 >= 3.0.0 \ libxml-2.0 >= 2.5.9 \ pangocairo) diff --git a/src/gnome/gnome-board.c b/src/gnome/gnome-board.c index e003685..cdd8412 100644 --- a/src/gnome/gnome-board.c +++ b/src/gnome/gnome-board.c @@ -48,14 +48,25 @@ game_gnome_board_get_graphic_size (GameGnomeBoard *board, double *width, double } static void -game_gnome_board_size_request (GtkWidget *widget, GtkRequisition *requisition) +game_gnome_board_get_preferred_width (GtkWidget *widget, int *min, int *nat) { - double width, height; + double width; game_gnome_board_get_graphic_size (GAME_GNOME_BOARD (widget), - &width, &height); - requisition->width = ceil (width); - requisition->height = ceil (height); + &width, NULL); + + *min = *nat = ceil (width); +} + +static void +game_gnome_board_get_preferred_height (GtkWidget *widget, int *min, int *nat) +{ + double height; + + game_gnome_board_get_graphic_size (GAME_GNOME_BOARD (widget), + NULL, &height); + + *min = *nat = ceil (height); } static void @@ -90,20 +101,18 @@ game_gnome_board_size_allocate (GtkWidget *widget, GtkAllocation *allocation) } static gboolean -game_gnome_board_expose (GtkWidget *widget, GdkEventExpose *event) +game_gnome_board_draw (GtkWidget *widget, cairo_t *cr) { GameGnomeBoard *board = GAME_GNOME_BOARD (widget); - cairo_t *cr; + GtkAllocation allocation; if (!board->graphic) return FALSE; - cr = gdk_cairo_create (event->window); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - cairo_translate (cr, board->skip_x, board->skip_y); + gtk_widget_get_allocation (widget, &allocation); + cairo_translate (cr, board->skip_x - allocation.x, board->skip_y - allocation.y); cairo_scale (cr, board->scale, board->scale); + { static double time = 0.0; GTimer *timer = g_timer_new (); @@ -115,7 +124,7 @@ game_gnome_board_expose (GtkWidget *widget, GdkEventExpose *event) } g_timer_destroy (timer); } - cairo_destroy (cr); + return FALSE; } @@ -233,9 +242,10 @@ game_gnome_board_class_init (gpointer g_class, gpointer class_data) g_param_spec_object ("graphic", _("graphic"), _("Graphic that is displayed"), GAME_TYPE_GRAPHIC, G_PARAM_READWRITE)); - widget_class->size_request = game_gnome_board_size_request; + widget_class->get_preferred_width = game_gnome_board_get_preferred_width; + widget_class->get_preferred_height = game_gnome_board_get_preferred_height; widget_class->size_allocate = game_gnome_board_size_allocate; - widget_class->expose_event = game_gnome_board_expose; + widget_class->draw = game_gnome_board_draw; } static void diff --git a/src/gnome/gnome-cellrenderercolor.c b/src/gnome/gnome-cellrenderercolor.c index 556ecbe..a33e6e5 100644 --- a/src/gnome/gnome-cellrenderercolor.c +++ b/src/gnome/gnome-cellrenderercolor.c @@ -94,7 +94,7 @@ game_gnome_cell_renderer_color_set_property (GObject *object, static void game_gnome_cell_renderer_color_get_size (GtkCellRenderer *renderer, - GtkWidget *widget, GdkRectangle *cell_area, gint *x_offset, gint *y_offset, + GtkWidget *widget, const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height) { gint min_width, real_width; @@ -139,16 +139,15 @@ game_gnome_cell_renderer_color_get_size (GtkCellRenderer *renderer, static void game_gnome_cell_renderer_color_render (GtkCellRenderer *renderer, - GdkWindow *window, GtkWidget *widget, GdkRectangle *background, - GdkRectangle *cell, GdkRectangle *expose, GtkCellRendererState flags) + cairo_t *cr, GtkWidget *widget, const GdkRectangle *background, + const GdkRectangle *cell, GtkCellRendererState flags) { GameGnomeCellRendererColor *color = GAME_GNOME_CELL_RENDERER_COLOR (renderer); + GtkStyleContext *context; gint width, height; gint x_offset, y_offset; gint xpad, ypad; - GtkShadowType shadow; - GtkStateType state; - cairo_t *cr; + GtkStateFlags state; gtk_cell_renderer_get_padding (renderer, &xpad, &ypad); @@ -161,42 +160,36 @@ game_gnome_cell_renderer_color_render (GtkCellRenderer *renderer, if (width <= 0 || height <= 0) return; - if (!color->activatable) - shadow = GTK_SHADOW_NONE; - else if (color->active) - shadow = GTK_SHADOW_IN; - else - shadow = GTK_SHADOW_OUT; - - if (!gtk_cell_renderer_get_sensitive (renderer)) - state = GTK_STATE_INSENSITIVE; - else if (flags & GTK_CELL_RENDERER_SELECTED) - state = gtk_widget_has_focus (widget) ? GTK_STATE_SELECTED : GTK_STATE_ACTIVE; - else if (color->activatable) - state = GTK_STATE_NORMAL; - else - state = GTK_STATE_INSENSITIVE; + context = gtk_widget_get_style_context (widget); + + gtk_style_context_save (context); + + if (color->activatable) + gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON); + + state = gtk_cell_renderer_get_state (renderer, widget, flags); + if (color->active) + state |= GTK_STATE_FLAG_ACTIVE; - gtk_paint_box (gtk_widget_get_style (widget), window, state, shadow, - expose, widget, NULL, cell->x + x_offset + xpad, + gtk_render_background (context, cr, cell->x + x_offset + xpad, + cell->y + y_offset + ypad, width, height); + gtk_render_frame (context, cr, cell->x + x_offset + xpad, cell->y + y_offset + ypad, width, height); - cr = gdk_cairo_create (window); gdk_cairo_set_source_color (cr, &color->color); - gdk_cairo_rectangle (cr, expose); - cairo_clip (cr); #define SPACE 4 cairo_rectangle (cr, cell->x + x_offset + xpad + SPACE, cell->y + y_offset + ypad + SPACE, MAX (0, width - 2 * SPACE), MAX (0, height - 2 * SPACE)); cairo_fill (cr); - cairo_destroy (cr); + + gtk_style_context_restore (context); } static gint game_gnome_cell_renderer_color_activate (GtkCellRenderer *renderer, GdkEvent *event, GtkWidget *widget, const gchar *path, - GdkRectangle *background, GdkRectangle *cell, GtkCellRendererState flags) + const GdkRectangle *background, const GdkRectangle *cell, GtkCellRendererState flags) { GameGnomeCellRendererColor *color; diff --git a/src/gnome/gnome-cellrendererkeys.c b/src/gnome/gnome-cellrendererkeys.c index 2685e4f..653a2d1 100644 --- a/src/gnome/gnome-cellrendererkeys.c +++ b/src/gnome/gnome-cellrendererkeys.c @@ -42,8 +42,8 @@ static GtkCellEditable *game_cell_renderer_keys_start_editing (GtkCellRenderer GdkEvent *event, GtkWidget *widget, const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, + const GdkRectangle *background_area, + const GdkRectangle *cell_area, GtkCellRendererState flags); @@ -57,7 +57,7 @@ static void game_cell_renderer_keys_set_property (GObject *object, GParamSpec *pspec); static void game_cell_renderer_keys_get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, @@ -178,7 +178,7 @@ game_cell_renderer_keys_set_property (GObject *object, guint param_id, const GVa } } static void -game_cell_renderer_keys_get_size (GtkCellRenderer *cell, GtkWidget *widget, GdkRectangle *cell_area, +game_cell_renderer_keys_get_size (GtkCellRenderer *cell, GtkWidget *widget, const GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height) { GameCellRendererKeys *keys = (GameCellRendererKeys *) cell; @@ -286,8 +286,8 @@ pointless_eventbox_subclass_get_type (void) } static GtkCellEditable * game_cell_renderer_keys_start_editing (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, - const gchar *path, GdkRectangle *background_area, - GdkRectangle *cell_area, GtkCellRendererState flags) + const gchar *path, const GdkRectangle *background_area, + const GdkRectangle *cell_area, GtkCellRendererState flags) { GameCellRendererKeys *keys; GdkWindow *window; diff --git a/src/gnome/gnome-highscore.c b/src/gnome/gnome-highscore.c index 8b4d06d..6c3fa69 100644 --- a/src/gnome/gnome-highscore.c +++ b/src/gnome/gnome-highscore.c @@ -188,6 +188,8 @@ game_gnome_high_score_init (GTypeInstance *instance, gpointer g_class) gtk_tree_view_column_set_sort_column_id (GTK_TREE_VIEW_COLUMN (column), DATE_COLUMN); viewport = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_set_hexpand (viewport, TRUE); + gtk_widget_set_vexpand (viewport, TRUE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (viewport), score->treeview); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (dialog)), viewport); |