static void gth_file_tool_negative_activate (GthFileTool *base) { GtkWidget *window; GtkWidget *viewer_page; GtkWidget *viewer; cairo_surface_t *image; NegativeData *negative_data; GthTask *task; window = gth_file_tool_get_window (base); viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window)); if (! GTH_IS_IMAGE_VIEWER_PAGE (viewer_page)) return; viewer = gth_image_viewer_page_get_image_viewer (GTH_IMAGE_VIEWER_PAGE (viewer_page)); image = gth_image_viewer_get_current_image (GTH_IMAGE_VIEWER (viewer)); if (image == NULL) return; negative_data = g_new0 (NegativeData, 1); negative_data->viewer_page = viewer_page; negative_data->source = cairo_surface_reference (image); task = gth_async_task_new (negative_init, negative_exec, negative_after, negative_data, negative_data_free); gth_browser_exec_task (GTH_BROWSER (window), task, FALSE); g_object_unref (task); }
static void ok_button_clicked_cb (GtkButton *button, GthFileToolSharpen *self) { GtkWidget *window; GtkWidget *viewer_page; SharpenData *sharpen_data; GthTask *task; if (self->priv->apply_event != 0) { g_source_remove (self->priv->apply_event); self->priv->apply_event = 0; } window = gth_file_tool_get_window (GTH_FILE_TOOL (self)); viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window)); if (! GTH_IS_IMAGE_VIEWER_PAGE (viewer_page)) return; sharpen_data = sharpen_data_new (self); sharpen_data->viewer_page = g_object_ref (viewer_page); sharpen_data->source = cairo_surface_reference (self->priv->source); task = gth_async_task_new (sharpen_before, sharpen_exec, sharpen_after, sharpen_data, sharpen_data_free); gth_browser_exec_task (GTH_BROWSER (gth_file_tool_get_window (GTH_FILE_TOOL (self))), task, FALSE); g_object_unref (task); gth_file_tool_hide_options (GTH_FILE_TOOL (self)); }
static ScaleData * scale_data_new (cairo_surface_t *image, int new_width, int new_height, scale_filter_t quality, GCancellable *cancellable) { ScaleData *scale_data; scale_data = g_new0 (ScaleData, 1); scale_data->original = cairo_surface_reference (image); scale_data->new_width = new_width; scale_data->new_height = new_height; scale_data->quality = quality; scale_data->scaled = NULL; scale_data->task = gth_async_task_new (NULL, NULL, NULL, NULL, NULL); gth_task_set_cancellable (scale_data->task, cancellable); return scale_data; }