/* PIKA - Photo and Image Kooker Application * a rebranding of The GNU Image Manipulation Program (created with heckimp) * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio * * Original copyright, applying to most contents (license remains unchanged): * Copyright (C) 1999 Manish Singh * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "config.h" #include #include #include "libpikacolor/pikacolor.h" #include "libpikawidgets/pikawidgets.h" #include "display-types.h" #include "core/pika.h" #include "core/pikaviewable.h" #include "widgets/pikacolordisplayeditor.h" #include "widgets/pikahelp-ids.h" #include "widgets/pikaviewabledialog.h" #include "pikadisplay.h" #include "pikadisplayshell.h" #include "pikadisplayshell-filter.h" #include "pikadisplayshell-filter-dialog.h" #include "pika-intl.h" typedef struct { PikaDisplayShell *shell; GtkWidget *dialog; PikaColorDisplayStack *old_stack; } ColorDisplayDialog; /* local function prototypes */ static void pika_display_shell_filter_dialog_response (GtkWidget *widget, gint response_id, ColorDisplayDialog *cdd); static void pika_display_shell_filter_dialog_free (ColorDisplayDialog *cdd); /* public functions */ GtkWidget * pika_display_shell_filter_dialog_new (PikaDisplayShell *shell) { PikaImage *image; ColorDisplayDialog *cdd; GtkWidget *editor; g_return_val_if_fail (PIKA_IS_DISPLAY_SHELL (shell), NULL); image = pika_display_get_image (shell->display); cdd = g_slice_new0 (ColorDisplayDialog); cdd->shell = shell; cdd->dialog = pika_viewable_dialog_new (g_list_prepend (NULL, image), pika_get_user_context (shell->display->pika), _("Color Display Filters"), "pika-display-filters", PIKA_ICON_DISPLAY_FILTER, _("Configure Color Display Filters"), GTK_WIDGET (cdd->shell), pika_standard_help_func, PIKA_HELP_DISPLAY_FILTER_DIALOG, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_OK"), GTK_RESPONSE_OK, NULL); pika_dialog_set_alternative_button_order (GTK_DIALOG (cdd->dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gtk_window_set_destroy_with_parent (GTK_WINDOW (cdd->dialog), TRUE); g_object_weak_ref (G_OBJECT (cdd->dialog), (GWeakNotify) pika_display_shell_filter_dialog_free, cdd); g_signal_connect (cdd->dialog, "response", G_CALLBACK (pika_display_shell_filter_dialog_response), cdd); if (shell->filter_stack) { cdd->old_stack = pika_color_display_stack_clone (shell->filter_stack); g_object_weak_ref (G_OBJECT (cdd->dialog), (GWeakNotify) g_object_unref, cdd->old_stack); } else { PikaColorDisplayStack *stack = pika_color_display_stack_new (); pika_display_shell_filter_set (shell, stack); g_object_unref (stack); } editor = pika_color_display_editor_new (shell->display->pika, shell->filter_stack, pika_display_shell_get_color_config (shell), PIKA_COLOR_MANAGED (shell)); gtk_container_set_border_width (GTK_CONTAINER (editor), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (cdd->dialog))), editor, TRUE, TRUE, 0); gtk_widget_show (editor); return cdd->dialog; } /* private functions */ static void pika_display_shell_filter_dialog_response (GtkWidget *widget, gint response_id, ColorDisplayDialog *cdd) { if (response_id != GTK_RESPONSE_OK) pika_display_shell_filter_set (cdd->shell, cdd->old_stack); gtk_widget_destroy (GTK_WIDGET (cdd->dialog)); } static void pika_display_shell_filter_dialog_free (ColorDisplayDialog *cdd) { g_slice_free (ColorDisplayDialog, cdd); }