1 /* GIMP - The GNU Image Manipulation Program
2 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3 *
4 * gimptemporaryprocedure.c
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #include "config.h"
21
22 #include <gdk-pixbuf/gdk-pixbuf.h>
23 #include <gegl.h>
24
25 #include "libgimpbase/gimpbase.h"
26
27 #include "plug-in-types.h"
28
29 #include "core/gimp.h"
30
31 #include "gimpplugin.h"
32 #define __YES_I_NEED_GIMP_PLUG_IN_MANAGER_CALL__
33 #include "gimppluginmanager-call.h"
34 #include "gimptemporaryprocedure.h"
35
36 #include "gimp-intl.h"
37
38
39 static void gimp_temporary_procedure_finalize (GObject *object);
40
41 static GimpValueArray * gimp_temporary_procedure_execute (GimpProcedure *procedure,
42 Gimp *gimp,
43 GimpContext *context,
44 GimpProgress *progress,
45 GimpValueArray *args,
46 GError **error);
47 static void gimp_temporary_procedure_execute_async (GimpProcedure *procedure,
48 Gimp *gimp,
49 GimpContext *context,
50 GimpProgress *progress,
51 GimpValueArray *args,
52 GimpObject *display);
53
54 static GFile * gimp_temporary_procedure_get_file (GimpPlugInProcedure *procedure);
55
56
G_DEFINE_TYPE(GimpTemporaryProcedure,gimp_temporary_procedure,GIMP_TYPE_PLUG_IN_PROCEDURE)57 G_DEFINE_TYPE (GimpTemporaryProcedure, gimp_temporary_procedure,
58 GIMP_TYPE_PLUG_IN_PROCEDURE)
59
60 #define parent_class gimp_temporary_procedure_parent_class
61
62
63 static void
64 gimp_temporary_procedure_class_init (GimpTemporaryProcedureClass *klass)
65 {
66 GObjectClass *object_class = G_OBJECT_CLASS (klass);
67 GimpProcedureClass *proc_class = GIMP_PROCEDURE_CLASS (klass);
68 GimpPlugInProcedureClass *plug_class = GIMP_PLUG_IN_PROCEDURE_CLASS (klass);
69
70 object_class->finalize = gimp_temporary_procedure_finalize;
71
72 proc_class->execute = gimp_temporary_procedure_execute;
73 proc_class->execute_async = gimp_temporary_procedure_execute_async;
74
75 plug_class->get_file = gimp_temporary_procedure_get_file;
76 }
77
78 static void
gimp_temporary_procedure_init(GimpTemporaryProcedure * proc)79 gimp_temporary_procedure_init (GimpTemporaryProcedure *proc)
80 {
81 GIMP_PROCEDURE (proc)->proc_type = GIMP_TEMPORARY;
82 }
83
84 static void
gimp_temporary_procedure_finalize(GObject * object)85 gimp_temporary_procedure_finalize (GObject *object)
86 {
87 /* GimpTemporaryProcedure *proc = GIMP_TEMPORARY_PROCEDURE (object); */
88
89 G_OBJECT_CLASS (parent_class)->finalize (object);
90 }
91
92 static GimpValueArray *
gimp_temporary_procedure_execute(GimpProcedure * procedure,Gimp * gimp,GimpContext * context,GimpProgress * progress,GimpValueArray * args,GError ** error)93 gimp_temporary_procedure_execute (GimpProcedure *procedure,
94 Gimp *gimp,
95 GimpContext *context,
96 GimpProgress *progress,
97 GimpValueArray *args,
98 GError **error)
99 {
100 return gimp_plug_in_manager_call_run_temp (gimp->plug_in_manager,
101 context, progress,
102 GIMP_TEMPORARY_PROCEDURE (procedure),
103 args);
104 }
105
106 static void
gimp_temporary_procedure_execute_async(GimpProcedure * procedure,Gimp * gimp,GimpContext * context,GimpProgress * progress,GimpValueArray * args,GimpObject * display)107 gimp_temporary_procedure_execute_async (GimpProcedure *procedure,
108 Gimp *gimp,
109 GimpContext *context,
110 GimpProgress *progress,
111 GimpValueArray *args,
112 GimpObject *display)
113 {
114 GimpTemporaryProcedure *temp_procedure = GIMP_TEMPORARY_PROCEDURE (procedure);
115 GimpValueArray *return_vals;
116
117 return_vals = gimp_plug_in_manager_call_run_temp (gimp->plug_in_manager,
118 context, progress,
119 temp_procedure,
120 args);
121
122 if (return_vals)
123 {
124 GimpPlugInProcedure *proc = GIMP_PLUG_IN_PROCEDURE (procedure);
125
126 gimp_plug_in_procedure_handle_return_values (proc,
127 gimp, progress,
128 return_vals);
129 gimp_value_array_unref (return_vals);
130 }
131 }
132
133 static GFile *
gimp_temporary_procedure_get_file(GimpPlugInProcedure * procedure)134 gimp_temporary_procedure_get_file (GimpPlugInProcedure *procedure)
135 {
136 return GIMP_TEMPORARY_PROCEDURE (procedure)->plug_in->file;
137 }
138
139
140 /* public functions */
141
142 GimpProcedure *
gimp_temporary_procedure_new(GimpPlugIn * plug_in)143 gimp_temporary_procedure_new (GimpPlugIn *plug_in)
144 {
145 GimpTemporaryProcedure *proc;
146
147 g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
148
149 proc = g_object_new (GIMP_TYPE_TEMPORARY_PROCEDURE, NULL);
150
151 proc->plug_in = plug_in;
152
153 GIMP_PLUG_IN_PROCEDURE (proc)->file = g_file_new_for_path ("none");
154
155 return GIMP_PROCEDURE (proc);
156 }
157