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