summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2011-10-14 00:15:20 -0700
committerBenjamin Otte <otte@redhat.com>2011-10-15 00:06:23 -0700
commit52e30a95090d72badff001e8976731666c68a0f7 (patch)
tree9758d32ee61ce3f152e750ce6901def5c2e7fdc7
parent127623241459c149c8d7a415b36af32268fc26a7 (diff)
gnome: Port to GTK 3
-rw-r--r--configure.ac2
-rw-r--r--src/gnome/gnome-board.c40
-rw-r--r--src/gnome/gnome-cellrenderercolor.c49
-rw-r--r--src/gnome/gnome-cellrendererkeys.c12
-rw-r--r--src/gnome/gnome-highscore.c2
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);