[gthumb] use the draw signal to paint widgets and other changes
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] use the draw signal to paint widgets and other changes
- Date: Tue, 25 Oct 2011 14:53:49 +0000 (UTC)
commit 28373050e3ea681dfc7c0512bfbbc955daf50845
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Oct 16 13:11:23 2011 +0200
use the draw signal to paint widgets and other changes
.../contact_sheet/gth-contact-sheet-theme-dialog.c | 13 +-
extensions/gstreamer_tools/gth-media-viewer-page.c | 16 +-
extensions/image_print/gth-image-print-job.c | 17 +-
extensions/image_viewer/gth-image-viewer-page.c | 1 -
gthumb/gedit-message-area.c | 14 +--
gthumb/gth-browser.c | 5 +-
gthumb/gth-cell-renderer-thumbnail.c | 10 +-
gthumb/gth-dumb-notebook.c | 156 ++++++++++++---
gthumb/gth-empty-list.c | 15 +-
gthumb/gth-file-list.c | 77 +++++---
gthumb/gth-folder-tree.c | 21 +--
gthumb/gth-histogram-view.c | 18 +-
gthumb/gth-icon-view.c | 33 ++--
gthumb/gth-image-dragger.c | 11 +-
gthumb/gth-image-navigator.c | 19 +--
gthumb/gth-image-selector.c | 47 ++---
gthumb/gth-image-viewer-tool.c | 7 +-
gthumb/gth-image-viewer-tool.h | 6 +-
gthumb/gth-image-viewer.c | 211 ++++++++++++--------
gthumb/gth-image-viewer.h | 2 -
gthumb/gth-time-selector.c | 3 +-
gthumb/gth-toggle-menu-tool-button.c | 10 +-
22 files changed, 409 insertions(+), 303 deletions(-)
---
diff --git a/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c b/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
index 61a2f1e..c7be9e0 100644
--- a/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
+++ b/extensions/contact_sheet/gth-contact-sheet-theme-dialog.c
@@ -67,19 +67,16 @@ gth_contact_sheet_theme_dialog_class_init (GthContactSheetThemeDialogClass *klas
static gboolean
-preview_area_expose_event_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
+preview_area_draw_cb (GtkWidget *widget,
+ cairo_t *cr,
+ gpointer user_data)
{
GthContactSheetThemeDialog *self = user_data;
- cairo_t *cr;
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
gth_contact_sheet_theme_paint_preview (self->priv->theme,
cr,
gdk_window_get_width (gtk_widget_get_window (widget)),
gdk_window_get_height (gtk_widget_get_window (widget)));
- cairo_destroy (cr);
return TRUE;
}
@@ -229,8 +226,8 @@ gth_contact_sheet_theme_dialog_init (GthContactSheetThemeDialog *self)
gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
g_signal_connect (GET_WIDGET ("preview_area"),
- "expose_event",
- G_CALLBACK (preview_area_expose_event_cb),
+ "draw",
+ G_CALLBACK (preview_area_draw_cb),
self);
g_signal_connect_swapped (GET_WIDGET ("solid_color_radiobutton"),
"toggled",
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 2a0bf43..e4b5ff5 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -171,14 +171,13 @@ video_area_unrealize_cb (GtkWidget *widget,
static gboolean
-video_area_expose_event_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
+video_area_draw_cb (GtkWidget *widget,
+ cairo_t *cr,
+ gpointer user_data)
{
GthMediaViewerPage *self = user_data;
GtkAllocation allocation;
GtkStyle *style;
- cairo_t *cr;
if (event->count > 0)
return FALSE;
@@ -210,9 +209,6 @@ video_area_expose_event_cb (GtkWidget *widget,
g_free (type);
}
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
- gdk_cairo_region (cr, event->region);
- cairo_clip (cr);
if (self->priv->has_video)
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
else
@@ -250,8 +246,6 @@ video_area_expose_event_cb (GtkWidget *widget,
cairo_fill (cr);
}
- cairo_destroy (cr);
-
return TRUE;
}
@@ -714,8 +708,8 @@ gth_media_viewer_page_real_activate (GthViewerPage *base,
G_CALLBACK (video_area_unrealize_cb),
self);
g_signal_connect (G_OBJECT (self->priv->area),
- "expose_event",
- G_CALLBACK (video_area_expose_event_cb),
+ "draw",
+ G_CALLBACK (video_area_draw_cb),
self);
g_signal_connect (G_OBJECT (self->priv->area),
"button_press_event",
diff --git a/extensions/image_print/gth-image-print-job.c b/extensions/image_print/gth-image-print-job.c
index b44838f..1b1060d 100644
--- a/extensions/image_print/gth-image-print-job.c
+++ b/extensions/image_print/gth-image-print-job.c
@@ -1029,10 +1029,10 @@ gth_image_print_job_update_image_preview (GthImagePrintJob *self,
}
-static void
-preview_expose_event_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
+static gboolean
+preview_draw_cb (GtkWidget *widget,
+ cairo_t *cr,
+ gpointer user_data)
{
GthImagePrintJob *self = user_data;
cairo_t *cr;
@@ -1042,8 +1042,6 @@ preview_expose_event_cb (GtkWidget *widget,
g_return_if_fail (GTH_IS_IMAGE_PRINT_JOB (self));
g_return_if_fail ((self->priv->page_setup != NULL) && GTK_IS_PAGE_SETUP (self->priv->page_setup));
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
-
/* paint the paper */
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
@@ -1065,7 +1063,8 @@ preview_expose_event_cb (GtkWidget *widget,
TRUE);
g_object_unref (pango_layout);
- cairo_destroy (cr);
+
+ return TRUE;
}
@@ -1517,8 +1516,8 @@ operation_create_custom_widget_cb (GtkPrintOperation *operation,
gtk_combo_box_set_active (GTK_COMBO_BOX (GET_WIDGET ("unit_combobox")), eel_gconf_get_enum (PREF_IMAGE_PRINT_UNIT, GTH_TYPE_METRIC, GTH_METRIC_PIXELS));
g_signal_connect (GET_WIDGET ("preview_drawingarea"),
- "expose_event",
- G_CALLBACK (preview_expose_event_cb),
+ "draw",
+ G_CALLBACK (preview_draw_cb),
self);
g_signal_connect (GET_WIDGET ("preview_drawingarea"),
"motion-notify-event",
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 2c75eeb..eafd5fa 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -572,7 +572,6 @@ pref_viewer_shrink_wrap_changed (GConfClient *client,
static void
paint_comment_over_image_func (GthImageViewer *image_viewer,
- GdkEventExpose *event,
cairo_t *cr,
gpointer user_data)
{
diff --git a/gthumb/gedit-message-area.c b/gthumb/gedit-message-area.c
index 5565d62..a4795b6 100644
--- a/gthumb/gedit-message-area.c
+++ b/gthumb/gedit-message-area.c
@@ -71,17 +71,6 @@ static guint signals[LAST_SIGNAL];
G_DEFINE_TYPE(GeditMessageArea, gedit_message_area, GTK_TYPE_HBOX)
-
-static void
-gedit_message_area_finalize (GObject *object)
-{
- /*
- GeditMessageArea *message_area = GEDIT_MESSAGE_AREA (object);
- */
-
- G_OBJECT_CLASS (gedit_message_area_parent_class)->finalize (object);
-}
-
static ResponseData *
get_response_data (GtkWidget *widget,
gboolean create)
@@ -89,8 +78,7 @@ get_response_data (GtkWidget *widget,
ResponseData *ad = g_object_get_data (G_OBJECT (widget),
"gedit-message-area-response-data");
- if (ad == NULL && create)
- {
+ if (ad == NULL && create) {
ad = g_new (ResponseData, 1);
g_object_set_data_full (G_OBJECT (widget),
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 7b59e25..8aaeabc 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -4144,6 +4144,8 @@ _gth_browser_construct (GthBrowser *browser)
gtk_window_set_default_size (GTK_WINDOW (browser), width, height);
}
+ gtk_window_set_has_resize_grip (GTK_WINDOW (browser), TRUE);
+
/* ui actions */
browser->priv->actions = gtk_action_group_new ("Actions");
@@ -4287,7 +4289,6 @@ _gth_browser_construct (GthBrowser *browser)
/* statusbar */
browser->priv->statusbar = gth_statusbar_new ();
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (browser->priv->statusbar), TRUE);
browser->priv->help_message_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (browser->priv->statusbar), "gth_help_message");
_gth_browser_set_statusbar_visibility (browser, eel_gconf_get_boolean (PREF_UI_STATUSBAR_VISIBLE, TRUE));
gth_window_attach (GTH_WINDOW (browser), browser->priv->statusbar, GTH_WINDOW_STATUSBAR);
@@ -6029,7 +6030,7 @@ hide_mouse_pointer_cb (gpointer data)
GtkWidget *widget = scan->data;
int x, y, w, h;
- gdk_window_get_geometry (gtk_widget_get_window (widget), &x, &y, &w, &h, NULL);
+ gdk_window_get_geometry (gtk_widget_get_window (widget), &x, &y, &w, &h);
if ((px >= x) && (px <= x + w) && (py >= y) && (py <= y + h))
return FALSE;
diff --git a/gthumb/gth-cell-renderer-thumbnail.c b/gthumb/gth-cell-renderer-thumbnail.c
index d6c9bf8..222dc2c 100644
--- a/gthumb/gth-cell-renderer-thumbnail.c
+++ b/gthumb/gth-cell-renderer-thumbnail.c
@@ -226,7 +226,7 @@ gth_cell_renderer_thumbnail_get_size (GtkCellRenderer *cell,
static void
gth_cell_renderer_thumbnail_render (GtkCellRenderer *cell,
- GdkWindow *window,
+ cairo_t *cr,
GtkWidget *widget,
cairo_rectangle_int_t *background_area,
cairo_rectangle_int_t *cell_area,
@@ -239,7 +239,6 @@ gth_cell_renderer_thumbnail_render (GtkCellRenderer *cell,
cairo_rectangle_int_t thumb_rect;
cairo_rectangle_int_t draw_rect;
cairo_rectangle_int_t image_rect;
- cairo_t *cr;
GdkPixbuf *pixbuf;
int xpad;
int ypad;
@@ -265,13 +264,8 @@ gth_cell_renderer_thumbnail_render (GtkCellRenderer *cell,
thumb_rect.width -= xpad * 2;
thumb_rect.height -= ypad * 2;
- if (! gdk_rectangle_intersect (cell_area, &thumb_rect, &draw_rect)
- || ! gdk_rectangle_intersect (expose_area, &thumb_rect, &draw_rect))
- {
+ if (! gdk_rectangle_intersect (cell_area, &thumb_rect, &draw_rect))
return;
- }
-
- cr = gdk_cairo_create (window);
image_rect.width = gdk_pixbuf_get_width (pixbuf);
image_rect.height = gdk_pixbuf_get_height (pixbuf);
diff --git a/gthumb/gth-dumb-notebook.c b/gthumb/gth-dumb-notebook.c
index 3b2d4f5..428d52e 100644
--- a/gthumb/gth-dumb-notebook.c
+++ b/gthumb/gth-dumb-notebook.c
@@ -49,32 +49,136 @@ gth_dumb_notebook_finalize (GObject *object)
}
+static GtkSizeRequestMode
+gth_dumb_notebook_get_request_mode (GtkWidget *widget)
+{
+ return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
+}
+
+
static void
-gth_dumb_notebook_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
+gth_dumb_notebook_get_preferred_height (GtkWidget *widget,
+ int *minimum_height,
+ int *natural_height)
{
GthDumbNotebook *dumb_notebook = GTH_DUMB_NOTEBOOK (widget);
GList *scan;
- GtkRequisition child_requisition;
int border_width;
-
- requisition->width = 0;
- requisition->height = 0;
-
+
+ *minimum_height = 0;
+ *natural_height = 0;
+
for (scan = dumb_notebook->priv->children; scan; scan = scan->next) {
GtkWidget *child = scan->data;
+ int child_minimum_height;
+ int child_natural_height;
if (! gtk_widget_get_visible (child))
continue;
-
- gtk_widget_size_request (child, &child_requisition);
- requisition->width = MAX (requisition->width, child_requisition.width);
- requisition->height = MAX (requisition->height, child_requisition.height);
+
+ gtk_widget_get_preferred_height (child, &child_minimum_height, &child_natural_height);
+ *minimum_height = MAX (*minimum_height, child_minimum_height);
+ *natural_height = MAX (*natural_height, child_natural_height);
}
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
- requisition->width += border_width * 2;
- requisition->height += border_width * 2;
+ *minimum_height += border_width * 2;
+ *natural_height += border_width * 2;
+}
+
+
+static void
+gth_dumb_notebook_get_preferred_width_for_height (GtkWidget *widget,
+ int height,
+ int *minimum_width,
+ int *natural_width)
+{
+ GthDumbNotebook *dumb_notebook = GTH_DUMB_NOTEBOOK (widget);
+ GList *scan;
+ int border_width;
+
+ *minimum_width = 0;
+ *natural_width = 0;
+
+ for (scan = dumb_notebook->priv->children; scan; scan = scan->next) {
+ GtkWidget *child = scan->data;
+ int child_minimum_width;
+ int child_natural_width;
+
+ if (! gtk_widget_get_visible (child))
+ continue;
+
+ gtk_widget_get_preferred_width_for_height (child, height, &child_minimum_width, &child_natural_width);
+ *minimum_width = MAX (*minimum_width, child_minimum_width);
+ *natural_width = MAX (*natural_width, child_natural_width);
+ }
+
+ border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
+ *minimum_width += border_width * 2;
+ *natural_width += border_width * 2;
+}
+
+
+static void
+gth_dumb_notebook_get_preferred_width (GtkWidget *widget,
+ int *minimum_width,
+ int *natural_width)
+{
+ GthDumbNotebook *dumb_notebook = GTH_DUMB_NOTEBOOK (widget);
+ GList *scan;
+ int border_width;
+
+ *minimum_width = 0;
+ *natural_width = 0;
+
+ for (scan = dumb_notebook->priv->children; scan; scan = scan->next) {
+ GtkWidget *child = scan->data;
+ int child_minimum_width;
+ int child_natural_width;
+
+ if (! gtk_widget_get_visible (child))
+ continue;
+
+ gtk_widget_get_preferred_width (child, &child_minimum_width, &child_natural_width);
+ *minimum_width = MAX (*minimum_width, child_minimum_width);
+ *natural_width = MAX (*natural_width, child_natural_width);
+ }
+
+ border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
+ *minimum_width += border_width * 2;
+ *natural_width += border_width * 2;
+}
+
+
+static void
+gth_dumb_notebook_get_preferred_height_for_width (GtkWidget *widget,
+ int width,
+ int *minimum_height,
+ int *natural_height)
+{
+ GthDumbNotebook *dumb_notebook = GTH_DUMB_NOTEBOOK (widget);
+ GList *scan;
+ int border_width;
+
+ *minimum_height = 0;
+ *natural_height = 0;
+
+ for (scan = dumb_notebook->priv->children; scan; scan = scan->next) {
+ GtkWidget *child = scan->data;
+ int child_minimum_height;
+ int child_natural_height;
+
+ if (! gtk_widget_get_visible (child))
+ continue;
+
+ gtk_widget_get_preferred_height_for_width (child, width, &child_minimum_height, &child_natural_height);
+ *minimum_height = MAX (*minimum_height, child_minimum_height);
+ *natural_height = MAX (*natural_height, child_natural_height);
+ }
+
+ border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
+ *minimum_height += border_width * 2;
+ *natural_height += border_width * 2;
}
@@ -104,18 +208,18 @@ gth_dumb_notebook_size_allocate (GtkWidget *widget,
}
-static int
-gth_dumb_notebook_expose (GtkWidget *widget,
- GdkEventExpose *event)
+static gboolean
+gth_dumb_notebook_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GthDumbNotebook *dumb_notebook = GTH_DUMB_NOTEBOOK (widget);
- if (dumb_notebook->priv->current != NULL)
- gtk_container_propagate_expose (GTK_CONTAINER (dumb_notebook),
- dumb_notebook->priv->current,
- event);
-
- return FALSE;
+ if (dumb_notebook->priv->current == NULL)
+ return FALSE;
+
+ gtk_widget_draw (dumb_notebook->priv->current, cr);
+
+ return TRUE;
}
@@ -186,9 +290,13 @@ gth_dumb_notebook_class_init (GthDumbNotebookClass *klass)
gobject_class->finalize = gth_dumb_notebook_finalize;
widget_class = GTK_WIDGET_CLASS (klass);
- widget_class->size_request = gth_dumb_notebook_size_request;
+ widget_class->get_request_mode = gth_dumb_notebook_get_request_mode;
+ widget_class->get_preferred_height = gth_dumb_notebook_get_preferred_height;
+ widget_class->get_preferred_width_for_height = gth_dumb_notebook_get_preferred_width_for_height;
+ widget_class->get_preferred_width = gth_dumb_notebook_get_preferred_width;
+ widget_class->get_preferred_height_for_width = gth_dumb_notebook_get_preferred_height_for_width;
widget_class->size_allocate = gth_dumb_notebook_size_allocate;
- widget_class->expose_event = gth_dumb_notebook_expose;
+ widget_class->draw = gth_dumb_notebook_draw;
container_class = GTK_CONTAINER_CLASS (klass);
container_class->add = gth_dumb_notebook_add;
diff --git a/gthumb/gth-empty-list.c b/gthumb/gth-empty-list.c
index efa2ac5..963e88d 100644
--- a/gthumb/gth-empty-list.c
+++ b/gthumb/gth-empty-list.c
@@ -121,12 +121,10 @@ gth_empty_list_realize (GtkWidget *widget)
attributes.height = allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK;
attributes_mask = (GDK_WA_X
| GDK_WA_Y
- | GDK_WA_VISUAL
- | GDK_WA_COLORMAP);
+ | GDK_WA_VISUAL);
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes,
attributes_mask);
@@ -233,8 +231,8 @@ gth_empty_list_size_allocate (GtkWidget *widget,
static gboolean
-gth_empty_list_expose_event (GtkWidget *widget,
- GdkEventExpose *event)
+gth_empty_list_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GthEmptyList *self = (GthEmptyList*) widget;
GtkAllocation allocation;
@@ -253,7 +251,6 @@ gth_empty_list_expose_event (GtkWidget *widget,
pango_layout_set_text (self->priv->layout, self->priv->text, strlen (self->priv->text));
pango_layout_get_pixel_extents (self->priv->layout, NULL, &bounds);
- cr = gdk_cairo_create (self->priv->bin_window);
cairo_move_to (cr, 0, (allocation.height - bounds.height) / 2);
pango_cairo_layout_path (cr, self->priv->layout);
style = gtk_widget_get_style (widget);
@@ -272,9 +269,7 @@ gth_empty_list_expose_event (GtkWidget *widget,
allocation.height - 2);
}
- cairo_destroy (cr);
-
- return FALSE;
+ return TRUE;
}
@@ -311,7 +306,7 @@ gth_empty_list_class_init (GthEmptyListClass *klass)
widget_class->map = gth_empty_list_map;
widget_class->unmap = gth_empty_list_unmap;
widget_class->size_allocate = gth_empty_list_size_allocate;
- widget_class->expose_event = gth_empty_list_expose_event;
+ widget_class->draw = gth_empty_list_draw;
widget_class->button_press_event = gth_empty_list_button_press;
/* properties */
diff --git a/gthumb/gth-file-list.c b/gthumb/gth-file-list.c
index 0d1a34f..169d085 100644
--- a/gthumb/gth-file-list.c
+++ b/gthumb/gth-file-list.c
@@ -279,41 +279,58 @@ gth_file_list_finalize (GObject *object)
}
+static GtkSizeRequestMode
+gth_file_list_get_request_mode (GtkWidget *widget)
+{
+ GthFileList *file_list = GTH_FILE_LIST (widget);
+
+ if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR)
+ return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
+ else
+ return GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT;
+}
+
+
static void
-gth_file_list_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
+gth_file_list_get_preferred_width (GtkWidget *widget,
+ int *minimum_width,
+ int *natural_width)
{
- GthFileList *file_list;
+ GthFileList *file_list = GTH_FILE_LIST (widget);
+ int xthickness;
+ GtkWidget *vscrollbar;
- GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition);
+ xthickness = gtk_widget_get_style (file_list->priv->scrolled_window)->xthickness;
+ *minimum_width = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + xthickness * 2;
- file_list = GTH_FILE_LIST (widget);
+ vscrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window));
+ if (gtk_widget_get_visible (vscrollbar)) {
+ int vscrollbar_minimum_width;
+ int vscrollbar_natural_width;
+ int scrollbar_spacing;
- if (file_list->priv->type == GTH_FILE_LIST_TYPE_V_SIDEBAR) {
- int xthickness;
- GtkWidget *vscrollbar;
+ gtk_widget_get_preferred_width (vscrollbar, &vscrollbar_minimum_width, &vscrollbar_natural_width);
+ gtk_widget_style_get (file_list->priv->scrolled_window,
+ "scrollbar-spacing", &scrollbar_spacing,
+ NULL);
+ *minimum_width += vscrollbar_minimum_width + scrollbar_spacing;
+ }
- xthickness = gtk_widget_get_style (file_list->priv->scrolled_window)->xthickness;
- requisition->width = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + xthickness * 2;
+ *natural_width = *minimum_width;
+}
- vscrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (file_list->priv->scrolled_window));
- if (gtk_widget_get_visible (vscrollbar)) {
- GtkRequisition vscrollbar_requisition;
- int scrollbar_spacing;
- gtk_widget_size_request (vscrollbar, &vscrollbar_requisition);
- gtk_widget_style_get (file_list->priv->scrolled_window,
- "scrollbar-spacing", &scrollbar_spacing,
- NULL);
- requisition->width += vscrollbar_requisition.width + scrollbar_spacing;
- }
- }
- else if (file_list->priv->type == GTH_FILE_LIST_TYPE_H_SIDEBAR) {
- int ythickness;
+static void
+gth_file_list_get_preferred_height (GtkWidget *widget,
+ int *minimum_height,
+ int *natural_height)
+{
+ GthFileList *file_list = GTH_FILE_LIST (widget);
+ int ythickness;
- ythickness = gtk_widget_get_style (file_list->priv->scrolled_window)->ythickness;
- requisition->height = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + ythickness * 2;
- }
+ ythickness = gtk_widget_get_style (file_list->priv->scrolled_window)->ythickness;
+ *minimum_height = file_list->priv->thumb_size + (THUMBNAIL_BORDER * 2) + ythickness * 2;
+ *natural_height = *minimum_height;
}
@@ -329,7 +346,9 @@ gth_file_list_class_init (GthFileListClass *class)
object_class->finalize = gth_file_list_finalize;
widget_class = (GtkWidgetClass*) class;
- widget_class->size_request = gth_file_list_size_request;
+ widget_class->get_request_mode = gth_file_list_get_request_mode;
+ widget_class->get_preferred_width = gth_file_list_get_preferred_width;
+ widget_class->get_preferred_height = gth_file_list_get_preferred_height;
}
diff --git a/gthumb/gth-folder-tree.c b/gthumb/gth-folder-tree.c
index 17629ec..f41cb15 100644
--- a/gthumb/gth-folder-tree.c
+++ b/gthumb/gth-folder-tree.c
@@ -532,11 +532,11 @@ motion_notify_event_cb (GtkWidget *widget,
event->x,
event->y))
{
- GtkTreePath *path = NULL;
- GdkDragContext *context;
- int cell_x;
- int cell_y;
- GdkPixmap *dnd_icon;
+ GtkTreePath *path = NULL;
+ GdkDragContext *context;
+ int cell_x;
+ int cell_y;
+ cairo_surface_t *dnd_surface;
if (! gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (folder_tree),
event->x,
@@ -560,15 +560,10 @@ motion_notify_event_cb (GtkWidget *widget,
1,
(GdkEvent *) event);
- dnd_icon = gtk_tree_view_create_row_drag_icon (GTK_TREE_VIEW (folder_tree), path);
- gtk_drag_set_icon_pixmap (context,
- gdk_drawable_get_colormap (dnd_icon),
- dnd_icon,
- NULL,
- cell_x,
- cell_y);
+ dnd_surface = gtk_tree_view_create_row_drag_icon (GTK_TREE_VIEW (folder_tree), path);
+ gtk_drag_set_icon_surface (context, dnd_surface);
- g_object_unref (dnd_icon);
+ cairo_surface_destroy (dnd_surface);
gtk_tree_path_free (path);
}
diff --git a/gthumb/gth-histogram-view.c b/gthumb/gth-histogram-view.c
index ce76c07..2e877d4 100644
--- a/gthumb/gth-histogram-view.c
+++ b/gthumb/gth-histogram-view.c
@@ -531,14 +531,16 @@ gth_histogram_paint_selection (GthHistogramView *self,
static gboolean
-histogram_view_expose_event_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
+histogram_view_draw_cb (GtkWidget *widget,
+ cairo_t *cr,
+ gpointer user_data)
{
GthHistogramView *self = user_data;
GtkAllocation allocation;
GtkStyle *style;
- cairo_t *cr;
+
+ if (GTK_WIDGET_CLASS (gth_histogram_view_parent_class)->draw != NULL)
+ GTK_WIDGET_CLASS (gth_histogram_view_parent_class)->draw (widget, cr);
gtk_widget_get_allocation (widget, &allocation);
allocation.width--;
@@ -546,8 +548,6 @@ histogram_view_expose_event_cb (GtkWidget *widget,
style = gtk_widget_get_style (widget);
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
-
gdk_cairo_set_source_color (cr, &style->base[gtk_widget_get_state (widget)]);
cairo_rectangle (cr, 0, 0, allocation.width, allocation.height);
cairo_fill (cr);
@@ -571,8 +571,6 @@ histogram_view_expose_event_cb (GtkWidget *widget,
gth_histogram_paint_channel (self, cr, self->priv->current_channel, &allocation);
}
- cairo_destroy (cr);
-
return TRUE;
}
@@ -919,8 +917,8 @@ gth_histogram_view_instance_init (GthHistogramView *self)
gtk_container_add (GTK_CONTAINER (view_frame), self->priv->histogram_view);
g_signal_connect (self->priv->histogram_view,
- "expose-event",
- G_CALLBACK (histogram_view_expose_event_cb),
+ "draw",
+ G_CALLBACK (histogram_view_draw_cb),
self);
g_signal_connect (self->priv->histogram_view,
"scroll-event",
diff --git a/gthumb/gth-icon-view.c b/gthumb/gth-icon-view.c
index 0eaef26..87dcd58 100644
--- a/gthumb/gth-icon-view.c
+++ b/gthumb/gth-icon-view.c
@@ -720,10 +720,12 @@ icon_view_motion_notify_event_cb (GtkWidget *widget,
event->x,
event->y))
{
- GtkTreePath *path = NULL;
- GdkDragContext *context;
- GdkPixmap *dnd_icon;
- int n_selected;
+ GtkTreePath *path = NULL;
+ GdkDragContext *context;
+ cairo_surface_t *dnd_surface;
+ int width;
+ int height;
+ int n_selected;
path = gtk_icon_view_get_path_at_pos (GTK_ICON_VIEW (icon_view),
event->x,
@@ -744,39 +746,42 @@ icon_view_motion_notify_event_cb (GtkWidget *widget,
if (icon_view->priv->drag_button == 2)
gdk_drag_status (context, GDK_ACTION_ASK, event->time);
- dnd_icon = gtk_icon_view_create_drag_icon (GTK_ICON_VIEW (icon_view), path);
+ dnd_surface = gtk_icon_view_create_drag_icon (GTK_ICON_VIEW (icon_view), path);
+ width = cairo_image_surface_get_width (dnd_surface);
+ height = cairo_image_surface_get_height (dnd_surface);
- n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (icon_view));
+ n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (icon_view));
if (n_selected >= 1) {
const int offset = 3;
int n_visible;
int width;
int height;
int border;
+ GdkPixbuf *dnd_icon;
GdkPixbuf *multi_dnd_icon;
int i;
+ dnd_icon = gdk_pixbuf_get_from_surface (dnd_surface, 0, 0, width, height);
+
n_visible = MIN (n_selected, 4);
- gdk_pixmap_get_size (dnd_icon, &width, &height);
border = n_visible * offset;
multi_dnd_icon = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width + border, height + border);
gdk_pixbuf_fill (multi_dnd_icon, 0x00000000);
for (i = n_visible - 1; i >= 0; i--)
- gdk_pixbuf_get_from_drawable (multi_dnd_icon,
- dnd_icon,
- gdk_drawable_get_colormap (dnd_icon),
- 0, 0,
- i * offset, i * offset,
- width, height);
+ gdk_pixbuf_copy_area (dnd_icon,
+ 0, 0,
+ width, height,
+ multi_dnd_icon,
+ i * offset, i * offset);
gtk_drag_set_icon_pixbuf (context,
multi_dnd_icon,
width / 4,
height / 4);
g_object_unref (multi_dnd_icon);
+ g_object_unref (dnd_icon);
}
- g_object_unref (dnd_icon);
gtk_tree_path_free (path);
}
diff --git a/gthumb/gth-image-dragger.c b/gthumb/gth-image-dragger.c
index 2c9b27c..9fd1ae5 100644
--- a/gthumb/gth-image-dragger.c
+++ b/gthumb/gth-image-dragger.c
@@ -149,9 +149,8 @@ gth_image_dragger_unmap (GthImageViewerTool *base)
static void
-gth_image_dragger_expose (GthImageViewerTool *self,
- GdkEventExpose *event,
- cairo_t *cr)
+gth_image_dragger_draw (GthImageViewerTool *self,
+ cairo_t *cr)
{
GthImageDragger *dragger;
GthImageViewer *viewer;
@@ -170,10 +169,10 @@ gth_image_dragger_expose (GthImageViewerTool *self,
viewer->x_offset - viewer->image_area.x,
viewer->y_offset - viewer->image_area.y,
&viewer->image_area,
- event->region,
+ NULL,
gth_image_viewer_get_zoom_quality_filter (viewer));
- gth_image_viewer_apply_painters (viewer, event, cr);
+ gth_image_viewer_apply_painters (viewer, cr);
}
@@ -292,7 +291,7 @@ gth_image_dragger_gth_image_tool_interface_init (GthImageViewerToolIface *iface)
iface->size_allocate = gth_image_dragger_size_allocate;
iface->map = gth_image_dragger_map;
iface->unmap = gth_image_dragger_unmap;
- iface->expose = gth_image_dragger_expose;
+ iface->draw = gth_image_dragger_draw;
iface->button_press = gth_image_dragger_button_press;
iface->button_release = gth_image_dragger_button_release;
iface->motion_notify = gth_image_dragger_motion_notify;
diff --git a/gthumb/gth-image-navigator.c b/gthumb/gth-image-navigator.c
index 874d6eb..3e4c2c7 100644
--- a/gthumb/gth-image-navigator.c
+++ b/gthumb/gth-image-navigator.c
@@ -295,21 +295,14 @@ nav_window_grab_pointer (NavigatorPopup *nav_popup)
static gboolean
-navigator_popup_expose_event_cb (GtkWidget *widget,
- GdkEventExpose *event,
- NavigatorPopup *nav_popup)
+navigator_popup_draw_cb (GtkWidget *widget,
+ cairo_t *cr,
+ NavigatorPopup *nav_popup)
{
- cairo_t *cr;
-
if (nav_popup->image == NULL)
return FALSE;
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
-
cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- gdk_cairo_region (cr, event->region);
- cairo_clip (cr);
-
cairo_save (cr);
cairo_set_source_surface (cr, nav_popup->image, 0, 0);
@@ -350,8 +343,6 @@ navigator_popup_expose_event_cb (GtkWidget *widget,
cairo_restore (cr);
}
- cairo_destroy (cr);
-
return TRUE;
}
@@ -384,8 +375,8 @@ navigator_event_area_button_press_event_cb (GtkWidget *widget,
nav_popup->preview = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (in_frame), nav_popup->preview);
g_signal_connect (G_OBJECT (nav_popup->preview),
- "expose_event",
- G_CALLBACK (navigator_popup_expose_event_cb),
+ "draw",
+ G_CALLBACK (navigator_popup_draw_cb),
nav_popup);
nav_popup->x_root = event->x_root;
diff --git a/gthumb/gth-image-selector.c b/gthumb/gth-image-selector.c
index 000f3ce..8e5cd69 100644
--- a/gthumb/gth-image-selector.c
+++ b/gthumb/gth-image-selector.c
@@ -599,7 +599,6 @@ gth_image_selector_unmap (GthImageViewerTool *base)
static void
paint_background (GthImageSelector *self,
- GdkEventExpose *event,
cairo_t *cr)
{
gth_image_viewer_paint_region (self->priv->viewer,
@@ -608,35 +607,21 @@ paint_background (GthImageSelector *self,
self->priv->viewer->x_offset - self->priv->viewer->image_area.x,
self->priv->viewer->y_offset - self->priv->viewer->image_area.y,
&self->priv->viewer->image_area,
- event->region,
+ NULL,
gth_image_viewer_get_zoom_quality_filter (self->priv->viewer));
/* make the background darker */
- {
- cairo_rectangle_int_t *rects;
- int n_rects;
- int i;
-
- gdk_cairo_rectangle (cr, &self->priv->viewer->image_area);
- cairo_clip (cr);
- cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5);
- gdk_region_get_rectangles (event->region, &rects, &n_rects);
- for (i = 0; i < n_rects; i++) {
- cairo_rectangle_int_t paint_area;
-
- if (gdk_rectangle_intersect (&self->priv->viewer->image_area, &rects[i], &paint_area))
- cairo_rectangle (cr, paint_area.x, paint_area.y, paint_area.width, paint_area.height);
- }
- cairo_fill (cr);
- g_free (rects);
- }
+ cairo_save (cr);
+ gdk_cairo_rectangle (cr, &self->priv->viewer->image_area);
+ cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5);
+ cairo_fill (cr);
+ cairo_restore (cr);
}
static void
paint_selection (GthImageSelector *self,
- GdkEventExpose *event,
cairo_t *cr)
{
cairo_rectangle_int_t selection_area;
@@ -652,7 +637,7 @@ paint_selection (GthImageSelector *self,
self->priv->viewer->x_offset - self->priv->viewer->image_area.x,
self->priv->viewer->y_offset - self->priv->viewer->image_area.y,
&selection_area,
- event->region,
+ NULL,
gth_image_viewer_get_zoom_quality_filter (self->priv->viewer));
cairo_save (cr);
@@ -685,7 +670,6 @@ paint_selection (GthImageSelector *self,
static void
paint_image (GthImageSelector *self,
- GdkEventExpose *event,
cairo_t *cr)
{
gth_image_viewer_paint_region (self->priv->viewer,
@@ -694,15 +678,14 @@ paint_image (GthImageSelector *self,
self->priv->viewer->x_offset - self->priv->viewer->image_area.x,
self->priv->viewer->y_offset - self->priv->viewer->image_area.y,
&self->priv->viewer->image_area,
- event->region,
+ NULL,
gth_image_viewer_get_zoom_quality_filter (self->priv->viewer));
}
static void
-gth_image_selector_expose (GthImageViewerTool *base,
- GdkEventExpose *event,
- cairo_t *cr)
+gth_image_selector_draw (GthImageViewerTool *base,
+ cairo_t *cr)
{
GthImageSelector *self = GTH_IMAGE_SELECTOR (base);
@@ -713,13 +696,13 @@ gth_image_selector_expose (GthImageViewerTool *base,
if (self->priv->mask_visible) {
if (self->priv->viewer->dragging)
- paint_image (self, event, cr);
+ paint_image (self, cr);
else
- paint_background (self, event, cr);
- paint_selection (self, event, cr);
+ paint_background (self, cr);
+ paint_selection (self, cr);
}
else
- paint_image (self, event, cr);
+ paint_image (self, cr);
}
@@ -1597,7 +1580,7 @@ gth_image_selector_gth_image_tool_interface_init (GthImageViewerToolIface *iface
iface->size_allocate = gth_image_selector_size_allocate;
iface->map = gth_image_selector_map;
iface->unmap = gth_image_selector_unmap;
- iface->expose = gth_image_selector_expose;
+ iface->draw = gth_image_selector_draw;
iface->button_press = gth_image_selector_button_press;
iface->button_release = gth_image_selector_button_release;
iface->motion_notify = gth_image_selector_motion_notify;
diff --git a/gthumb/gth-image-viewer-tool.c b/gthumb/gth-image-viewer-tool.c
index 76ddd4e..2a9a7bc 100644
--- a/gthumb/gth-image-viewer-tool.c
+++ b/gthumb/gth-image-viewer-tool.c
@@ -102,11 +102,10 @@ gth_image_viewer_tool_size_allocate (GthImageViewerTool *self,
void
-gth_image_viewer_tool_expose (GthImageViewerTool *self,
- GdkEventExpose *event,
- cairo_t *cr)
+gth_image_viewer_tool_draw (GthImageViewerTool *self,
+ cairo_t *cr)
{
- GTH_IMAGE_VIEWER_TOOL_GET_INTERFACE (self)->expose (self, event, cr);
+ GTH_IMAGE_VIEWER_TOOL_GET_INTERFACE (self)->draw (self, cr);
}
diff --git a/gthumb/gth-image-viewer-tool.h b/gthumb/gth-image-viewer-tool.h
index df78c48..111257a 100644
--- a/gthumb/gth-image-viewer-tool.h
+++ b/gthumb/gth-image-viewer-tool.h
@@ -47,8 +47,7 @@ struct _GthImageViewerToolIface {
void (*unrealize) (GthImageViewerTool *self);
void (*size_allocate) (GthImageViewerTool *self,
GtkAllocation *allocation);
- void (*expose) (GthImageViewerTool *self,
- GdkEventExpose *event,
+ void (*draw) (GthImageViewerTool *self,
cairo_t *cr);
gboolean (*button_press) (GthImageViewerTool *self,
GdkEventButton *event);
@@ -71,8 +70,7 @@ void gth_image_viewer_tool_realize (GthImageViewerTool *self);
void gth_image_viewer_tool_unrealize (GthImageViewerTool *self);
void gth_image_viewer_tool_size_allocate (GthImageViewerTool *self,
GtkAllocation *allocation);
-void gth_image_viewer_tool_expose (GthImageViewerTool *self,
- GdkEventExpose *event,
+void gth_image_viewer_tool_draw (GthImageViewerTool *self,
cairo_t *cr);
gboolean gth_image_viewer_tool_button_press (GthImageViewerTool *self,
GdkEventButton *event);
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index dd69cde..68766fc 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -49,6 +49,15 @@
enum {
+ PROP_0,
+ PROP_HADJUSTMENT,
+ PROP_VADJUSTMENT,
+ PROP_HSCROLL_POLICY,
+ PROP_VSCROLL_POLICY
+};
+
+
+enum {
CLICKED,
ZOOM_IN,
ZOOM_OUT,
@@ -62,6 +71,9 @@ enum {
struct _GthImageViewerPrivate {
+ GtkScrollablePolicy hscroll_policy;
+ GtkScrollablePolicy vscroll_policy;
+
cairo_surface_t *surface;
GdkPixbufAnimation *animation;
int original_width;
@@ -329,7 +341,6 @@ gth_image_viewer_realize (GtkWidget *widget)
attributes.height = allocation.height;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = (gtk_widget_get_events (widget)
| GDK_EXPOSURE_MASK
| GDK_BUTTON_PRESS_MASK
@@ -341,8 +352,7 @@ gth_image_viewer_realize (GtkWidget *widget)
attributes_mask = (GDK_WA_X
| GDK_WA_Y
- | GDK_WA_VISUAL
- | GDK_WA_COLORMAP);
+ | GDK_WA_VISUAL);
window = gdk_window_new (gtk_widget_get_parent_window (widget),
&attributes,
@@ -670,7 +680,7 @@ gth_image_viewer_key_press (GtkWidget *widget,
{
gboolean handled;
- handled = gtk_bindings_activate (GTK_OBJECT (widget),
+ handled = gtk_bindings_activate (G_OBJECT (widget),
event->keyval,
event->state);
if (handled)
@@ -729,32 +739,24 @@ queue_animation_frame_change (GthImageViewer *self)
}
-static int
-gth_image_viewer_expose (GtkWidget *widget,
- GdkEventExpose *event)
+static gboolean
+gth_image_viewer_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GthImageViewer *self = GTH_IMAGE_VIEWER (widget);
- cairo_t *cr;
- /* create the cairo context and set some default values */
+ /* set the default values of the cairo context */
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
cairo_set_line_width (cr, 0.5);
cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- /* clip to the exposed area */
-
- gdk_cairo_region (cr, event->region);
- cairo_clip (cr);
-
/* delegate the rest to the tool */
- gth_image_viewer_tool_expose (self->priv->tool, event, cr);
- cairo_destroy (cr);
+ gth_image_viewer_tool_draw (self->priv->tool, cr);
queue_animation_frame_change (self);
- return FALSE;
+ return TRUE;
}
@@ -826,7 +828,7 @@ scroll_to (GthImageViewer *self,
int *x_offset,
int *y_offset)
{
- GdkDrawable *drawable;
+ GdkWindow *window;
GtkAllocation allocation;
int width, height;
int delta_x, delta_y;
@@ -839,7 +841,7 @@ scroll_to (GthImageViewer *self,
_gth_image_viewer_get_zoomed_size (self, &width, &height);
- drawable = gtk_widget_get_window (GTK_WIDGET (self));
+ window = gtk_widget_get_window (GTK_WIDGET (self));
gtk_widget_get_allocation (GTK_WIDGET (self), &allocation);
gdk_width = allocation.width - self->priv->frame_border2;
gdk_height = allocation.height - self->priv->frame_border2;
@@ -870,8 +872,8 @@ scroll_to (GthImageViewer *self,
area.y = 0;
area.width = allocation.width;
area.height = allocation.height;
- gdk_window_invalidate_rect (drawable, &area, FALSE);
- gdk_window_process_updates (drawable, FALSE);
+ gdk_window_invalidate_rect (window, &area, TRUE);
+ gdk_window_process_updates (window, TRUE);
return;
}
@@ -887,7 +889,7 @@ scroll_to (GthImageViewer *self,
area.width = gdk_width - abs (delta_x);
area.height = gdk_height - abs (delta_y);
region = gdk_region_rectangle (&area);
- gdk_window_move_region (drawable, region, -delta_x, -delta_y);
+ gdk_window_move_region (window, region, -delta_x, -delta_y);
gdk_region_destroy (region);
}
@@ -912,12 +914,12 @@ scroll_to (GthImageViewer *self,
area.height = gdk_height;
gdk_region_union_with_rect (region, &area);
- gdk_window_invalidate_region (drawable, region, FALSE);
+ gdk_window_invalidate_region (window, region, TRUE);
gdk_region_destroy (region);
}
- gdk_window_process_updates (drawable, TRUE);
+ gdk_window_process_updates (window, TRUE);
}
@@ -1102,43 +1104,20 @@ vadj_value_changed (GtkAdjustment *adj,
static void
-set_scroll_adjustments (GtkWidget *widget,
- GtkAdjustment *hadj,
- GtkAdjustment *vadj)
+_gth_image_viewer_set_hadjustment (GthImageViewer *self,
+ GtkAdjustment *hadj)
{
- GthImageViewer *self;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GTH_IS_IMAGE_VIEWER (widget));
-
- self = GTH_IMAGE_VIEWER (widget);
-
if (hadj != NULL)
g_return_if_fail (GTK_IS_ADJUSTMENT (hadj));
else
- hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0));
-
- if (vadj != NULL)
- g_return_if_fail (GTK_IS_ADJUSTMENT (vadj));
- else
- vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,
- 0.0, 0.0, 0.0));
+ hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
if ((self->hadj != NULL) && (self->hadj != hadj)) {
- g_signal_handlers_disconnect_by_data (G_OBJECT (self->hadj),
- self);
+ g_signal_handlers_disconnect_by_data (G_OBJECT (self->hadj), self);
g_object_unref (self->hadj);
-
self->hadj = NULL;
}
- if ((self->vadj != NULL) && (self->vadj != vadj)) {
- g_signal_handlers_disconnect_by_data (G_OBJECT (self->vadj), self);
- g_object_unref (self->vadj);
- self->vadj = NULL;
- }
-
if (self->hadj != hadj) {
self->hadj = hadj;
g_object_ref (self->hadj);
@@ -1149,6 +1128,23 @@ set_scroll_adjustments (GtkWidget *widget,
G_CALLBACK (hadj_value_changed),
self);
}
+}
+
+
+static void
+_gth_image_viewer_set_vadjustment (GthImageViewer *self,
+ GtkAdjustment *vadj)
+{
+ if (vadj != NULL)
+ g_return_if_fail (GTK_IS_ADJUSTMENT (vadj));
+ else
+ vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
+
+ if ((self->vadj != NULL) && (self->vadj != vadj)) {
+ g_signal_handlers_disconnect_by_data (G_OBJECT (self->vadj), self);
+ g_object_unref (self->vadj);
+ self->vadj = NULL;
+ }
if (self->vadj != vadj) {
self->vadj = vadj;
@@ -1197,6 +1193,64 @@ gth_image_viewer_set_zoom__key_binding (GthImageViewer *self,
static void
+gth_image_viewer_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GthImageViewer *self = GTH_IMAGE_VIEWER (object);
+
+ switch (prop_id) {
+ case PROP_HADJUSTMENT:
+ g_value_set_object (value, self->hadj);
+ break;
+ case PROP_VADJUSTMENT:
+ g_value_set_object (value, self->vadj);
+ break;
+ case PROP_HSCROLL_POLICY:
+ g_value_set_enum (value, self->priv->hscroll_policy);
+ break;
+ case PROP_VSCROLL_POLICY:
+ g_value_set_enum (value, self->priv->vscroll_policy);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
+gth_image_viewer_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GthImageViewer *self = GTH_IMAGE_VIEWER (object);
+
+ switch (prop_id) {
+ case PROP_HADJUSTMENT:
+ _gth_image_viewer_set_hadjustment (self, (GtkAdjustment *) g_value_get_object (value));
+ break;
+ case PROP_VADJUSTMENT:
+ _gth_image_viewer_set_vadjustment (self, (GtkAdjustment *) g_value_get_object (value));
+ break;
+ case PROP_HSCROLL_POLICY:
+ self->priv->hscroll_policy = g_value_get_enum (value);
+ gtk_widget_queue_resize (GTK_WIDGET (self));
+ break;
+ case PROP_VSCROLL_POLICY:
+ self->priv->vscroll_policy = g_value_get_enum (value);
+ gtk_widget_queue_resize (GTK_WIDGET (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+static void
gth_image_viewer_class_init (GthImageViewerClass *class)
{
GObjectClass *gobject_class;
@@ -1206,8 +1260,7 @@ gth_image_viewer_class_init (GthImageViewerClass *class)
parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (GthImageViewerPrivate));
- widget_class = (GtkWidgetClass*) class;
- gobject_class = (GObjectClass*) class;
+ /* signals */
gth_image_viewer_signals[CLICKED] =
g_signal_new ("clicked",
@@ -1274,18 +1327,6 @@ gth_image_viewer_class_init (GthImageViewerClass *class)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
- class->set_scroll_adjustments = set_scroll_adjustments;
- widget_class->set_scroll_adjustments_signal =
- g_signal_new ("set_scroll_adjustments",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GthImageViewerClass, set_scroll_adjustments),
- NULL, NULL,
- gth_marshal_VOID__POINTER_POINTER,
- G_TYPE_NONE,
- 2,
- GTK_TYPE_ADJUSTMENT,
- GTK_TYPE_ADJUSTMENT);
gth_image_viewer_signals[SCROLL] =
g_signal_new ("scroll",
G_TYPE_FROM_CLASS (class),
@@ -1298,24 +1339,28 @@ gth_image_viewer_class_init (GthImageViewerClass *class)
GTK_TYPE_SCROLL_TYPE,
GTK_TYPE_SCROLL_TYPE);
+ /**/
+
+ gobject_class = (GObjectClass*) class;
gobject_class->finalize = gth_image_viewer_finalize;
+ gobject_class->set_property = gth_image_viewer_set_property;
+ gobject_class->get_property = gth_image_viewer_get_property;
- widget_class->realize = gth_image_viewer_realize;
- widget_class->unrealize = gth_image_viewer_unrealize;
- widget_class->map = gth_image_viewer_map;
- widget_class->unmap = gth_image_viewer_unmap;
- widget_class->size_allocate = gth_image_viewer_size_allocate;
- widget_class->focus_in_event = gth_image_viewer_focus_in;
+ widget_class = (GtkWidgetClass*) class;
+ widget_class->realize = gth_image_viewer_realize;
+ widget_class->unrealize = gth_image_viewer_unrealize;
+ widget_class->map = gth_image_viewer_map;
+ widget_class->unmap = gth_image_viewer_unmap;
+ widget_class->size_allocate = gth_image_viewer_size_allocate;
+ widget_class->focus_in_event = gth_image_viewer_focus_in;
widget_class->focus_out_event = gth_image_viewer_focus_out;
widget_class->key_press_event = gth_image_viewer_key_press;
-
- widget_class->expose_event = gth_image_viewer_expose;
- widget_class->button_press_event = gth_image_viewer_button_press;
+ widget_class->draw = gth_image_viewer_draw;
+ widget_class->button_press_event = gth_image_viewer_button_press;
widget_class->button_release_event = gth_image_viewer_button_release;
- widget_class->motion_notify_event = gth_image_viewer_motion_notify;
-
+ widget_class->motion_notify_event = gth_image_viewer_motion_notify;
widget_class->scroll_event = gth_image_viewer_scroll_event;
- widget_class->style_set = gth_image_viewer_style_set;
+ widget_class->style_set = gth_image_viewer_style_set;
class->clicked = NULL;
class->zoom_changed = NULL;
@@ -1325,6 +1370,13 @@ gth_image_viewer_class_init (GthImageViewerClass *class)
class->set_zoom = gth_image_viewer_set_zoom__key_binding;
class->set_fit_mode = gth_image_viewer_set_fit_mode__key_binding;
+ /* GtkScrollable interface */
+
+ g_object_class_override_property (gobject_class, PROP_HADJUSTMENT, "hadjustment");
+ g_object_class_override_property (gobject_class, PROP_VADJUSTMENT, "vadjustment");
+ g_object_class_override_property (gobject_class, PROP_HSCROLL_POLICY, "hscroll-policy");
+ g_object_class_override_property (gobject_class, PROP_VSCROLL_POLICY, "vscroll-policy");
+
/* Add key bindings */
binding_set = gtk_binding_set_by_class (class);
@@ -2718,7 +2770,6 @@ gth_image_viewer_paint_background (GthImageViewer *self,
void
gth_image_viewer_apply_painters (GthImageViewer *self,
- GdkEventExpose *event,
cairo_t *cr)
{
GList *scan;
@@ -2727,7 +2778,7 @@ gth_image_viewer_apply_painters (GthImageViewer *self,
PainterData *painter_data = scan->data;
cairo_save (cr);
- painter_data->func (self, event, cr, painter_data->user_data);
+ painter_data->func (self, cr, painter_data->user_data);
cairo_restore (cr);
}
}
diff --git a/gthumb/gth-image-viewer.h b/gthumb/gth-image-viewer.h
index 5dd22f1..d9dd0d5 100644
--- a/gthumb/gth-image-viewer.h
+++ b/gthumb/gth-image-viewer.h
@@ -47,7 +47,6 @@ typedef struct _GthImageViewerPrivate GthImageViewerPrivate;
#define GTH_IMAGE_VIEWER_FRAME_BORDER2 (GTH_IMAGE_VIEWER_FRAME_BORDER * 2)
typedef void (*GthImageViewerPaintFunc) (GthImageViewer *image_viewer,
- GdkEventExpose *event,
cairo_t *cr,
gpointer user_data);
@@ -316,7 +315,6 @@ void gth_image_viewer_paint_region (GthImageViewer
void gth_image_viewer_paint_background (GthImageViewer *self,
cairo_t *cr);
void gth_image_viewer_apply_painters (GthImageViewer *image_viewer,
- GdkEventExpose *event,
cairo_t *cr);
void gth_image_viewer_crop_area (GthImageViewer *viewer,
cairo_rectangle_int_t *area);
diff --git a/gthumb/gth-time-selector.c b/gthumb/gth-time-selector.c
index 4508a61..7f8c0c8 100644
--- a/gthumb/gth-time-selector.c
+++ b/gthumb/gth-time-selector.c
@@ -345,8 +345,7 @@ calendar_popup_button_press_event_cb (GtkWidget *widget,
&popup_area.x,
&popup_area.y,
&popup_area.width,
- &popup_area.height,
- NULL);
+ &popup_area.height);
/*g_print ("(%.0f, %.0f) <==> (%d, %d)[%d, %d]\n", event->x_root, event->y_root, popup_area.x, popup_area.y, popup_area.width, popup_area.height);*/
diff --git a/gthumb/gth-toggle-menu-tool-button.c b/gthumb/gth-toggle-menu-tool-button.c
index b14d1f4..22fcf9f 100644
--- a/gthumb/gth-toggle-menu-tool-button.c
+++ b/gthumb/gth-toggle-menu-tool-button.c
@@ -498,7 +498,6 @@ menu_position_func (GtkMenu *menu,
}
else {
gdk_window_get_origin (gtk_button_get_event_window (GTK_BUTTON (widget)), x, y);
-
gtk_widget_size_request (widget, &req);
if (direction == GTK_TEXT_DIR_LTR)
@@ -578,7 +577,7 @@ real_button_button_press_event_cb (GtkWidget *widget,
static void
-gth_toggle_menu_tool_button_destroy (GtkObject *object)
+gth_toggle_menu_tool_button_finalize (GObject *object)
{
GthToggleMenuToolButton *button;
@@ -594,7 +593,7 @@ gth_toggle_menu_tool_button_destroy (GtkObject *object)
button->priv->toggle_button = NULL;
}
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
+ G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -662,7 +661,6 @@ static void
gth_toggle_menu_tool_button_class_init (GthToggleMenuToolButtonClass *klass)
{
GObjectClass *object_class;
- GtkObjectClass *gtk_object_class;
GtkWidgetClass *widget_class;
GtkToolItemClass *tool_item_class;
@@ -670,12 +668,10 @@ gth_toggle_menu_tool_button_class_init (GthToggleMenuToolButtonClass *klass)
g_type_class_add_private (klass, sizeof (GthToggleMenuToolButtonPrivate));
object_class = (GObjectClass *) klass;
+ object_class->finalize = gth_toggle_menu_tool_button_finalize;
object_class->set_property = gth_toggle_menu_tool_button_set_property;
object_class->get_property = gth_toggle_menu_tool_button_get_property;
- gtk_object_class = (GtkObjectClass *) klass;
- gtk_object_class->destroy = gth_toggle_menu_tool_button_destroy;
-
widget_class = (GtkWidgetClass *) klass;
widget_class->state_changed = gth_toggle_menu_tool_button_state_changed;
widget_class->style_set = gth_toggle_menu_tool_button_style_set;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]