23
23
#include <glib-object.h>
25
25
#include "libgimpbase/gimpbase.h"
26
#include "libgimpconfig/gimpconfig.h"
27
28
#include "core-types.h"
29
#include "config/gimpconfig.h"
30
#include "config/gimpconfig-params.h"
31
#include "config/gimpconfig-path.h"
32
30
#include "config/gimprc.h"
34
#include "pdb/procedural_db.h"
32
#include "pdb/gimppdb.h"
33
#include "pdb/gimp-pdb-compat.h"
34
#include "pdb/internal_procs.h"
36
#include "plug-in/plug-ins.h"
36
#include "plug-in/gimppluginmanager.h"
37
#include "plug-in/gimppluginmanager-restore.h"
38
39
#include "paint/gimp-paint.h"
50
52
#include "gimp-units.h"
51
53
#include "gimp-utils.h"
52
54
#include "gimpbrush.h"
53
#include "gimpbrushgenerated.h"
54
#include "gimpbrushpipe.h"
55
#include "gimpbrush-load.h"
56
#include "gimpbrushgenerated-load.h"
57
#include "gimpbrushclipboard.h"
58
#include "gimpbrushpipe-load.h"
55
59
#include "gimpbuffer.h"
56
60
#include "gimpcontext.h"
57
61
#include "gimpdatafactory.h"
58
62
#include "gimpdocumentlist.h"
59
#include "gimpenvirontable.h"
60
63
#include "gimpgradient.h"
61
64
#include "gimpgradient-load.h"
62
65
#include "gimpimage.h"
86
static void gimp_class_init (GimpClass *klass);
87
static void gimp_init (Gimp *gimp);
89
static void gimp_dispose (GObject *object);
90
static void gimp_finalize (GObject *object);
92
static gint64 gimp_get_memsize (GimpObject *object,
95
static void gimp_real_initialize (Gimp *gimp,
96
GimpInitStatusFunc status_callback);
97
static void gimp_real_restore (Gimp *gimp,
98
GimpInitStatusFunc status_callback);
99
static gboolean gimp_real_exit (Gimp *gimp,
102
static void gimp_global_config_notify (GObject *global_config,
103
GParamSpec *param_spec,
104
GObject *edit_config);
105
static void gimp_edit_config_notify (GObject *edit_config,
106
GParamSpec *param_spec,
107
GObject *global_config);
110
static GimpObjectClass *parent_class = NULL;
92
static void gimp_dispose (GObject *object);
93
static void gimp_finalize (GObject *object);
95
static gint64 gimp_get_memsize (GimpObject *object,
98
static void gimp_real_initialize (Gimp *gimp,
99
GimpInitStatusFunc status_callback);
100
static void gimp_real_restore (Gimp *gimp,
101
GimpInitStatusFunc status_callback);
102
static gboolean gimp_real_exit (Gimp *gimp,
105
static void gimp_global_config_notify (GObject *global_config,
106
GParamSpec *param_spec,
107
GObject *edit_config);
108
static void gimp_edit_config_notify (GObject *edit_config,
109
GParamSpec *param_spec,
110
GObject *global_config);
113
G_DEFINE_TYPE (Gimp, gimp, GIMP_TYPE_OBJECT)
115
#define parent_class gimp_parent_class
112
117
static guint gimp_signals[LAST_SIGNAL] = { 0, };
118
static GType object_type = 0;
122
static const GTypeInfo object_info =
125
(GBaseInitFunc) NULL,
126
(GBaseFinalizeFunc) NULL,
127
(GClassInitFunc) gimp_class_init,
128
NULL, /* class_finalize */
129
NULL, /* class_data */
132
(GInstanceInitFunc) gimp_init,
135
object_type = g_type_register_static (GIMP_TYPE_OBJECT,
144
121
gimp_class_init (GimpClass *klass)
146
123
GObjectClass *object_class = G_OBJECT_CLASS (klass);
147
124
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
149
parent_class = g_type_class_peek_parent (klass);
151
126
gimp_signals[INITIALIZE] =
152
127
g_signal_new ("initialize",
153
128
G_TYPE_FROM_CLASS (klass),
173
148
G_TYPE_FROM_CLASS (klass),
174
149
G_SIGNAL_RUN_LAST,
175
150
G_STRUCT_OFFSET (GimpClass, exit),
176
gimp_boolean_handled_accum, NULL,
151
g_signal_accumulator_true_handled, NULL,
177
152
gimp_marshal_BOOLEAN__BOOLEAN,
178
153
G_TYPE_BOOLEAN, 1,
233
199
gimp_modules_init (gimp);
235
gimp->environ_table = gimp_environ_table_new ();
237
gimp->plug_in_debug = NULL;
201
gimp->plug_in_manager = gimp_plug_in_manager_new (gimp);
239
203
gimp->images = gimp_list_new_weak (GIMP_TYPE_IMAGE, FALSE);
240
gimp_object_set_name (GIMP_OBJECT (gimp->images), "images");
204
gimp_object_set_static_name (GIMP_OBJECT (gimp->images), "images");
242
gimp->next_image_ID = 1;
243
gimp->next_guide_ID = 1;
244
gimp->image_table = g_hash_table_new (g_direct_hash, NULL);
206
gimp->next_image_ID = 1;
207
gimp->next_guide_ID = 1;
208
gimp->next_sample_point_ID = 1;
209
gimp->image_table = g_hash_table_new (g_direct_hash, NULL);
246
211
gimp->next_item_ID = 1;
247
212
gimp->item_table = g_hash_table_new (g_direct_hash, NULL);
249
214
gimp->displays = gimp_list_new_weak (GIMP_TYPE_OBJECT, FALSE);
250
gimp_object_set_name (GIMP_OBJECT (gimp->displays), "displays");
215
gimp_object_set_static_name (GIMP_OBJECT (gimp->displays), "displays");
252
217
gimp->next_display_ID = 1;
254
219
gimp->global_buffer = NULL;
255
220
gimp->named_buffers = gimp_list_new (GIMP_TYPE_BUFFER, TRUE);
256
gimp_object_set_name (GIMP_OBJECT (gimp->named_buffers), "named buffers");
221
gimp_object_set_static_name (GIMP_OBJECT (gimp->named_buffers),
258
224
gimp->fonts = NULL;
259
225
gimp->brush_factory = NULL;
261
227
gimp->gradient_factory = NULL;
262
228
gimp->palette_factory = NULL;
264
procedural_db_init (gimp);
266
gimp->load_procs = NULL;
267
gimp->save_procs = NULL;
230
gimp->pdb = gimp_pdb_new (gimp);
271
234
gimp->tool_info_list = gimp_list_new (GIMP_TYPE_TOOL_INFO, FALSE);
272
gimp_object_set_name (GIMP_OBJECT (gimp->tool_info_list), "tool infos");
235
gimp_object_set_static_name (GIMP_OBJECT (gimp->tool_info_list),
274
238
gimp->standard_tool_info = NULL;
276
240
gimp->documents = gimp_document_list_new (gimp);
278
242
gimp->templates = gimp_list_new (GIMP_TYPE_TEMPLATE, TRUE);
279
gimp_object_set_name (GIMP_OBJECT (gimp->tool_info_list), "templates");
243
gimp_object_set_static_name (GIMP_OBJECT (gimp->templates), "templates");
281
245
gimp->image_new_last_template = NULL;
282
gimp->have_current_cut_buffer = FALSE;
284
247
gimp->context_list = NULL;
285
248
gimp->default_context = NULL;
475
428
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->parasites),
431
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->paint_info_list),
478
434
memsize += gimp_g_object_get_memsize (G_OBJECT (gimp->module_db));
435
memsize += gimp_g_object_get_memsize (G_OBJECT (gimp->plug_in_manager));
480
memsize += gimp_g_hash_table_get_memsize (gimp->image_table);
481
memsize += gimp_g_hash_table_get_memsize (gimp->item_table);
437
memsize += gimp_g_hash_table_get_memsize (gimp->image_table, 0);
438
memsize += gimp_g_hash_table_get_memsize (gimp->item_table, 0);
483
440
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->displays), gui_size);
499
456
gimp_object_get_memsize (GIMP_OBJECT (gimp->palette_factory),
502
memsize += gimp_g_hash_table_get_memsize (gimp->procedural_ht);
503
memsize += gimp_g_hash_table_get_memsize (gimp->procedural_compat_ht);
505
memsize += gimp_g_list_get_memsize (gimp->procedural_db_data_list,
508
memsize += gimp_g_slist_get_memsize (gimp->load_procs, 0 /* FIXME */);
509
memsize += gimp_g_slist_get_memsize (gimp->save_procs, 0 /* FIXME */);
459
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->pdb), gui_size);
511
461
memsize += (gimp_object_get_memsize (GIMP_OBJECT (gimp->tool_info_list),
534
484
gimp_real_initialize (Gimp *gimp,
535
485
GimpInitStatusFunc status_callback)
537
GimpContext *context;
540
487
static const GimpDataFactoryLoaderEntry brush_loader_entries[] =
542
489
{ gimp_brush_load, GIMP_BRUSH_FILE_EXTENSION, FALSE },
543
490
{ gimp_brush_load, GIMP_BRUSH_PIXMAP_FILE_EXTENSION, FALSE },
491
{ gimp_brush_load_abr, GIMP_BRUSH_PS_FILE_EXTENSION, FALSE },
492
{ gimp_brush_load_abr, GIMP_BRUSH_PSP_FILE_EXTENSION, FALSE },
544
493
{ gimp_brush_generated_load, GIMP_BRUSH_GENERATED_FILE_EXTENSION, TRUE },
545
494
{ gimp_brush_pipe_load, GIMP_BRUSH_PIPE_FILE_EXTENSION, FALSE }
615
573
gimp->image_new_last_template =
616
574
gimp_config_duplicate (GIMP_CONFIG (gimp->config->default_image));
618
gimp->have_current_cut_buffer = FALSE;
620
/* the default context contains the user's saved preferences
622
* TODO: load from disk
624
context = gimp_context_new (gimp, "Default", NULL);
625
gimp_set_default_context (gimp, context);
626
g_object_unref (context);
628
/* the initial user_context is a straight copy of the default context
630
context = gimp_context_new (gimp, "User", context);
631
gimp_set_user_context (gimp, context);
632
g_object_unref (context);
576
/* create user and default context */
577
gimp_contexts_init (gimp);
634
579
/* add the builtin FG -> BG etc. gradients */
635
580
gimp_gradients_init (gimp);
582
/* add the clipboard brush */
583
clipboard_brush = gimp_brush_clipboard_new (gimp);
584
gimp_data_make_internal (GIMP_DATA (clipboard_brush));
585
gimp_container_add (gimp->brush_factory->container,
586
GIMP_OBJECT (clipboard_brush));
587
g_object_unref (clipboard_brush);
589
/* add the clipboard pattern */
590
clipboard_pattern = gimp_pattern_clipboard_new (gimp);
591
gimp_data_make_internal (GIMP_DATA (clipboard_pattern));
592
gimp_container_add (gimp->pattern_factory->container,
593
GIMP_OBJECT (clipboard_pattern));
594
g_object_unref (clipboard_pattern);
637
596
/* register all internal procedures */
638
(* status_callback) (_("Procedural Database"), NULL, -1);
639
procedural_db_init_procs (gimp, status_callback);
641
(* status_callback) (_("Plug-In Environment"), "", -1);
643
path = gimp_config_path_expand (gimp->config->environ_path, TRUE, NULL);
644
gimp_environ_table_load (gimp->environ_table, path);
597
status_callback (NULL, _("Internal Procedures"), 0.2);
598
internal_procs_init (gimp->pdb);
599
gimp_pdb_compat_procs_register (gimp->pdb, gimp->pdb_compat_mode);
601
gimp_plug_in_manager_initialize (gimp->plug_in_manager, status_callback);
603
status_callback (NULL, "", 1.0);
849
811
g_print ("INIT: gimp_restore\n");
851
813
/* initialize the global parasite table */
852
(* status_callback) (_("Looking for data files"), _("Parasites"), 0.0);
814
status_callback (_("Looking for data files"), _("Parasites"), 0.0);
853
815
gimp_parasiterc_load (gimp);
855
817
/* initialize the list of gimp brushes */
856
(* status_callback) (NULL, _("Brushes"), 0.1);
818
status_callback (NULL, _("Brushes"), 0.1);
857
819
gimp_data_factory_data_init (gimp->brush_factory, gimp->no_data);
859
821
/* initialize the list of gimp patterns */
860
(* status_callback) (NULL, _("Patterns"), 0.2);
822
status_callback (NULL, _("Patterns"), 0.2);
861
823
gimp_data_factory_data_init (gimp->pattern_factory, gimp->no_data);
863
825
/* initialize the list of gimp palettes */
864
(* status_callback) (NULL, _("Palettes"), 0.3);
826
status_callback (NULL, _("Palettes"), 0.3);
865
827
gimp_data_factory_data_init (gimp->palette_factory, gimp->no_data);
867
829
/* initialize the list of gimp gradients */
868
(* status_callback) (NULL, _("Gradients"), 0.4);
830
status_callback (NULL, _("Gradients"), 0.4);
869
831
gimp_data_factory_data_init (gimp->gradient_factory, gimp->no_data);
871
833
/* initialize the list of gimp fonts */
872
(* status_callback) (NULL, _("Fonts"), 0.5);
873
gimp_fonts_load (gimp);
834
status_callback (NULL, _("Fonts"), 0.5);
835
if (! gimp->no_fonts)
836
gimp_fonts_load (gimp);
875
838
/* initialize the document history */
876
(* status_callback) (NULL, _("Documents"), 0.6);
839
status_callback (NULL, _("Documents"), 0.6);
877
840
gimp_documents_load (gimp);
879
842
/* initialize the template list */
880
(* status_callback) (NULL, _("Templates"), 0.7);
843
status_callback (NULL, _("Templates"), 0.7);
881
844
gimp_templates_load (gimp);
883
846
/* initialize the module list */
884
(* status_callback) (NULL, _("Modules"), 0.8);
847
status_callback (NULL, _("Modules"), 0.8);
885
848
gimp_modules_load (gimp);
887
850
g_signal_emit (gimp, gimp_signals[RESTORE], 0, status_callback);
929
892
if (gimp->global_buffer)
930
893
g_object_ref (gimp->global_buffer);
932
gimp->have_current_cut_buffer = (buffer != NULL);
934
895
g_signal_emit (gimp, gimp_signals[BUFFER_CHANGED], 0);
938
gimp_set_last_plug_in (Gimp *gimp,
939
PlugInProcDef *proc_def)
941
g_return_if_fail (GIMP_IS_GIMP (gimp));
943
gimp->last_plug_in = proc_def;
945
g_signal_emit (gimp, gimp_signals[LAST_PLUG_IN_CHANGED], 0);
949
899
gimp_create_image (Gimp *gimp,
983
931
GimpContext *context)
985
933
g_return_if_fail (GIMP_IS_GIMP (gimp));
986
g_return_if_fail (! context || GIMP_IS_CONTEXT (context));
988
if (gimp->default_context)
989
g_object_unref (gimp->default_context);
991
gimp->default_context = context;
993
if (gimp->default_context)
994
g_object_ref (gimp->default_context);
934
g_return_if_fail (context == NULL || GIMP_IS_CONTEXT (context));
936
if (context != gimp->default_context)
938
if (gimp->default_context)
939
g_object_unref (gimp->default_context);
941
gimp->default_context = context;
943
if (gimp->default_context)
944
g_object_ref (gimp->default_context);
1007
958
GimpContext *context)
1009
960
g_return_if_fail (GIMP_IS_GIMP (gimp));
1010
g_return_if_fail (! context || GIMP_IS_CONTEXT (context));
1012
if (gimp->user_context)
1013
g_object_unref (gimp->user_context);
1015
gimp->user_context = context;
1017
if (gimp->user_context)
1018
g_object_ref (gimp->user_context);
961
g_return_if_fail (context == NULL || GIMP_IS_CONTEXT (context));
963
if (context != gimp->user_context)
965
if (gimp->user_context)
966
g_object_unref (gimp->user_context);
968
gimp->user_context = context;
970
if (gimp->user_context)
971
g_object_ref (gimp->user_context);
1026
980
return gimp->user_context;
984
gimp_get_tool_info (Gimp *gimp,
985
const gchar *tool_id)
989
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
990
g_return_val_if_fail (tool_id != NULL, NULL);
992
info = gimp_container_get_child_by_name (gimp->tool_info_list, tool_id);
994
return (GimpToolInfo *) info;
998
gimp_message (Gimp *gimp,
1000
GimpMessageSeverity severity,
1001
const gchar *format,
1006
va_start (args, format);
1008
gimp_message_valist (gimp, handler, severity, format, args);
1014
gimp_message_valist (Gimp *gimp,
1016
GimpMessageSeverity severity,
1017
const gchar *format,
1022
g_return_if_fail (GIMP_IS_GIMP (gimp));
1023
g_return_if_fail (handler == NULL || G_IS_OBJECT (handler));
1024
g_return_if_fail (format != NULL);
1026
message = g_strdup_vprintf (format, args);
1028
gimp_show_message (gimp, handler, severity, NULL, message);