diff --git a/app/actions/gimpgeglprocedure.c b/app/actions/gimpgeglprocedure.c index c56946cb29..7305c44460 100644 --- a/app/actions/gimpgeglprocedure.c +++ b/app/actions/gimpgeglprocedure.c @@ -38,6 +38,7 @@ #include "core/gimp-memsize.h" #include "core/gimpcontainer.h" #include "core/gimpcontext.h" +#include "core/gimpdisplay.h" #include "core/gimpdrawable-operation.h" #include "core/gimpimage.h" #include "core/gimplayermask.h" @@ -45,8 +46,6 @@ #include "core/gimpsettings.h" #include "core/gimptoolinfo.h" -#include "display/gimpdisplay.h" - #include "tools/gimpoperationtool.h" #include "tools/tool_manager.h" @@ -80,7 +79,7 @@ static void gimp_gegl_procedure_execute_async (GimpProcedure *procedu GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display); + GimpDisplay *display); G_DEFINE_TYPE (GimpGeglProcedure, gimp_gegl_procedure, @@ -269,7 +268,7 @@ gimp_gegl_procedure_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display) + GimpDisplay *display) { GimpGeglProcedure *gegl_procedure = GIMP_GEGL_PROCEDURE (procedure); GimpRunMode run_mode; @@ -396,7 +395,7 @@ gimp_gegl_procedure_execute_async (GimpProcedure *procedure, gimp_procedure_get_help_id (procedure)); } - tool_manager_initialize_active (gimp, GIMP_DISPLAY (display)); + tool_manager_initialize_active (gimp, display); if (settings) gimp_filter_tool_set_config (GIMP_FILTER_TOOL (active_tool), diff --git a/app/actions/procedure-commands.c b/app/actions/procedure-commands.c index bcb4586a0d..db3dff9c0c 100644 --- a/app/actions/procedure-commands.c +++ b/app/actions/procedure-commands.c @@ -343,7 +343,7 @@ procedure_commands_run_procedure_async (GimpProcedure *procedure, gimp_procedure_execute_async (procedure, gimp, gimp_get_user_context (gimp), progress, args, - GIMP_OBJECT (display), &error); + display, &error); if (error) { diff --git a/app/actions/vectors-commands.c b/app/actions/vectors-commands.c index 5a2967ac10..120e600b73 100644 --- a/app/actions/vectors-commands.c +++ b/app/actions/vectors-commands.c @@ -410,7 +410,7 @@ vectors_selection_to_vectors_cmd_callback (GimpAction *action, gimp_procedure_execute_async (procedure, image->gimp, action_data_get_context (data), GIMP_PROGRESS (display), args, - GIMP_OBJECT (display), &error); + display, &error); gimp_value_array_unref (args); diff --git a/app/core/Makefile.am b/app/core/Makefile.am index be90e742ed..a2d6f0a2de 100644 --- a/app/core/Makefile.am +++ b/app/core/Makefile.am @@ -175,6 +175,8 @@ libappcore_a_sources = \ gimpdatafactory.h \ gimpdataloaderfactory.c \ gimpdataloaderfactory.h \ + gimpdisplay.c \ + gimpdisplay.h \ gimpdocumentlist.c \ gimpdocumentlist.h \ gimpdrawable.c \ diff --git a/app/core/core-types.h b/app/core/core-types.h index afb27e8211..d31040d06b 100644 --- a/app/core/core-types.h +++ b/app/core/core-types.h @@ -96,6 +96,8 @@ typedef struct _GimpAuxItem GimpAuxItem; typedef struct _Gimp Gimp; typedef struct _GimpImage GimpImage; +typedef struct _GimpDisplay GimpDisplay; + /* containers */ diff --git a/app/core/gimp-gui.c b/app/core/gimp-gui.c index b854fd68d3..42786b8786 100644 --- a/app/core/gimp-gui.c +++ b/app/core/gimp-gui.c @@ -28,6 +28,7 @@ #include "gimp-gui.h" #include "gimpcontainer.h" #include "gimpcontext.h" +#include "gimpdisplay.h" #include "gimpimage.h" #include "gimpprogress.h" #include "gimpwaitable.h" @@ -52,8 +53,6 @@ gimp_gui_init (Gimp *gimp) gimp->gui.get_user_time = NULL; gimp->gui.get_theme_dir = NULL; gimp->gui.get_icon_theme_dir = NULL; - gimp->gui.display_get_by_id = NULL; - gimp->gui.display_get_id = NULL; gimp->gui.display_get_window_id = NULL; gimp->gui.display_create = NULL; gimp->gui.display_delete = NULL; @@ -310,7 +309,7 @@ gimp_get_window_strategy (Gimp *gimp) return NULL; } -GimpObject * +GimpDisplay * gimp_get_empty_display (Gimp *gimp) { g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); @@ -321,37 +320,12 @@ gimp_get_empty_display (Gimp *gimp) return NULL; } -GimpObject * -gimp_get_display_by_id (Gimp *gimp, - gint id) -{ - g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); - - if (gimp->gui.display_get_by_id) - return gimp->gui.display_get_by_id (gimp, id); - - return NULL; -} - -gint -gimp_get_display_id (Gimp *gimp, - GimpObject *display) -{ - g_return_val_if_fail (GIMP_IS_GIMP (gimp), -1); - g_return_val_if_fail (GIMP_IS_OBJECT (display), -1); - - if (gimp->gui.display_get_id) - return gimp->gui.display_get_id (display); - - return -1; -} - guint32 -gimp_get_display_window_id (Gimp *gimp, - GimpObject *display) +gimp_get_display_window_id (Gimp *gimp, + GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_GIMP (gimp), -1); - g_return_val_if_fail (GIMP_IS_OBJECT (display), -1); + g_return_val_if_fail (GIMP_IS_DISPLAY (display), -1); if (gimp->gui.display_get_window_id) return gimp->gui.display_get_window_id (display); @@ -359,7 +333,7 @@ gimp_get_display_window_id (Gimp *gimp, return -1; } -GimpObject * +GimpDisplay * gimp_create_display (Gimp *gimp, GimpImage *image, GimpUnit unit, @@ -377,11 +351,11 @@ gimp_create_display (Gimp *gimp, } void -gimp_delete_display (Gimp *gimp, - GimpObject *display) +gimp_delete_display (Gimp *gimp, + GimpDisplay *display) { g_return_if_fail (GIMP_IS_GIMP (gimp)); - g_return_if_fail (GIMP_IS_OBJECT (display)); + g_return_if_fail (GIMP_IS_DISPLAY (display)); if (gimp->gui.display_delete) gimp->gui.display_delete (display); @@ -401,11 +375,11 @@ gimp_reconnect_displays (Gimp *gimp, } GimpProgress * -gimp_new_progress (Gimp *gimp, - GimpObject *display) +gimp_new_progress (Gimp *gimp, + GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); - g_return_val_if_fail (display == NULL || GIMP_IS_OBJECT (display), NULL); + g_return_val_if_fail (display == NULL || GIMP_IS_DISPLAY (display), NULL); if (gimp->gui.progress_new) return gimp->gui.progress_new (gimp, display); diff --git a/app/core/gimp-gui.h b/app/core/gimp-gui.h index f4db2c894c..f9a465f0d7 100644 --- a/app/core/gimp-gui.h +++ b/app/core/gimp-gui.h @@ -53,23 +53,20 @@ struct _GimpGui GFile * (* get_icon_theme_dir) (Gimp *gimp); GimpObject * (* get_window_strategy) (Gimp *gimp); - GimpObject * (* get_empty_display) (Gimp *gimp); - GimpObject * (* display_get_by_id) (Gimp *gimp, - gint ID); - gint (* display_get_id) (GimpObject *display); - guint32 (* display_get_window_id) (GimpObject *display); - GimpObject * (* display_create) (Gimp *gimp, + GimpDisplay * (* get_empty_display) (Gimp *gimp); + guint32 (* display_get_window_id) (GimpDisplay *display); + GimpDisplay * (* display_create) (Gimp *gimp, GimpImage *image, GimpUnit unit, gdouble scale, GObject *monitor); - void (* display_delete) (GimpObject *display); + void (* display_delete) (GimpDisplay *display); void (* displays_reconnect) (Gimp *gimp, GimpImage *old_image, GimpImage *new_image); GimpProgress * (* progress_new) (Gimp *gimp, - GimpObject *display); + GimpDisplay *display); void (* progress_free) (Gimp *gimp, GimpProgress *progress); @@ -114,20 +111,20 @@ void gimp_gui_init (Gimp *gimp); void gimp_gui_ungrab (Gimp *gimp); GimpObject * gimp_get_window_strategy (Gimp *gimp); -GimpObject * gimp_get_empty_display (Gimp *gimp); -GimpObject * gimp_get_display_by_id (Gimp *gimp, +GimpDisplay * gimp_get_empty_display (Gimp *gimp); +GimpDisplay * gimp_get_display_by_id (Gimp *gimp, gint ID); gint gimp_get_display_id (Gimp *gimp, - GimpObject *display); + GimpDisplay *display); guint32 gimp_get_display_window_id (Gimp *gimp, - GimpObject *display); -GimpObject * gimp_create_display (Gimp *gimp, + GimpDisplay *display); +GimpDisplay * gimp_create_display (Gimp *gimp, GimpImage *image, GimpUnit unit, gdouble scale, GObject *monitor); void gimp_delete_display (Gimp *gimp, - GimpObject *display); + GimpDisplay *display); void gimp_reconnect_displays (Gimp *gimp, GimpImage *old_image, GimpImage *new_image); @@ -152,7 +149,7 @@ void gimp_wait (Gimp *gimp, ...) G_GNUC_PRINTF (3, 4); GimpProgress * gimp_new_progress (Gimp *gimp, - GimpObject *display); + GimpDisplay *display); void gimp_free_progress (Gimp *gimp, GimpProgress *progress); diff --git a/app/core/gimpcontext.c b/app/core/gimpcontext.c index 14f2f778c5..605d82caa9 100644 --- a/app/core/gimpcontext.c +++ b/app/core/gimpcontext.c @@ -39,6 +39,7 @@ #include "gimpcontainer.h" #include "gimpcontext.h" #include "gimpdatafactory.h" +#include "gimpdisplay.h" #include "gimpdynamics.h" #include "gimpimagefile.h" #include "gimpgradient.h" @@ -121,10 +122,10 @@ static void gimp_context_real_set_image (GimpContext *context, /* display */ static void gimp_context_display_removed (GimpContainer *container, - gpointer display, + GimpDisplay *display, GimpContext *context); static void gimp_context_real_set_display (GimpContext *context, - gpointer display); + GimpDisplay *display); /* tool */ static void gimp_context_tool_dirty (GimpToolInfo *tool_info, @@ -420,7 +421,7 @@ gimp_context_class_init (GimpContextClass *klass) G_STRUCT_OFFSET (GimpContextClass, display_changed), NULL, NULL, NULL, G_TYPE_NONE, 1, - GIMP_TYPE_OBJECT); + GIMP_TYPE_DISPLAY); gimp_context_signals[TOOL_CHANGED] = g_signal_new ("tool-changed", @@ -644,7 +645,7 @@ gimp_context_class_init (GimpContextClass *klass) g_object_class_install_property (object_class, GIMP_CONTEXT_PROP_DISPLAY, g_param_spec_object (gimp_context_prop_names[GIMP_CONTEXT_PROP_DISPLAY], NULL, NULL, - GIMP_TYPE_OBJECT, + GIMP_TYPE_DISPLAY, GIMP_PARAM_READWRITE)); GIMP_CONFIG_PROP_OBJECT (object_class, GIMP_CONTEXT_PROP_TOOL, @@ -1940,7 +1941,7 @@ gimp_context_real_set_image (GimpContext *context, /*****************************************************************************/ /* display *****************************************************************/ -gpointer +GimpDisplay * gimp_context_get_display (GimpContext *context) { g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL); @@ -1950,10 +1951,10 @@ gimp_context_get_display (GimpContext *context) void gimp_context_set_display (GimpContext *context, - gpointer display) + GimpDisplay *display) { g_return_if_fail (GIMP_IS_CONTEXT (context)); - g_return_if_fail (display == NULL || GIMP_IS_OBJECT (display)); + g_return_if_fail (display == NULL || GIMP_IS_DISPLAY (display)); context_find_defined (context, GIMP_CONTEXT_PROP_DISPLAY); @@ -1972,7 +1973,7 @@ gimp_context_display_changed (GimpContext *context) static void gimp_context_display_removed (GimpContainer *container, - gpointer display, + GimpDisplay *display, GimpContext *context) { if (context->display == display) @@ -1981,9 +1982,9 @@ gimp_context_display_removed (GimpContainer *container, static void gimp_context_real_set_display (GimpContext *context, - gpointer display) + GimpDisplay *display) { - GimpObject *old_display; + GimpDisplay *old_display; if (context->display == display) { diff --git a/app/core/gimpcontext.h b/app/core/gimpcontext.h index 7f15a4a01c..82ff26a752 100644 --- a/app/core/gimpcontext.h +++ b/app/core/gimpcontext.h @@ -56,7 +56,7 @@ struct _GimpContext guint32 serialize_props; GimpImage *image; - gpointer display; + GimpDisplay *display; GimpToolInfo *tool_info; gchar *tool_name; @@ -111,7 +111,7 @@ struct _GimpContextClass void (* image_changed) (GimpContext *context, GimpImage *image); void (* display_changed) (GimpContext *context, - gpointer display); + GimpDisplay *display); void (* tool_changed) (GimpContext *context, GimpToolInfo *tool_info); @@ -222,9 +222,9 @@ void gimp_context_image_changed (GimpContext *context); /* display */ -gpointer gimp_context_get_display (GimpContext *context); +GimpDisplay * gimp_context_get_display (GimpContext *context); void gimp_context_set_display (GimpContext *context, - gpointer display); + GimpDisplay *display); void gimp_context_display_changed (GimpContext *context); diff --git a/app/core/gimpdisplay.c b/app/core/gimpdisplay.c new file mode 100644 index 0000000000..a8aba94ba3 --- /dev/null +++ b/app/core/gimpdisplay.c @@ -0,0 +1,195 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * 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 "libgimpbase/gimpbase.h" +#include "libgimpmath/gimpmath.h" + +#include "core-types.h" + +#include "config/gimpguiconfig.h" + +#include "core/gimp.h" +#include "core/gimpcontainer.h" +#include "core/gimpcontext.h" + +#include "gimpdisplay.h" + +#include "gimp-intl.h" + +enum +{ + PROP_0, + PROP_ID, + PROP_GIMP +}; + + +struct _GimpDisplayPrivate +{ + gint id; /* unique identifier for this display */ +}; + + +/* local function prototypes */ + +static void gimp_display_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void gimp_display_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + + +G_DEFINE_TYPE_WITH_PRIVATE (GimpDisplay, gimp_display, GIMP_TYPE_OBJECT) + +#define parent_class gimp_display_parent_class + + +static void +gimp_display_class_init (GimpDisplayClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->set_property = gimp_display_set_property; + object_class->get_property = gimp_display_get_property; + + g_object_class_install_property (object_class, PROP_ID, + g_param_spec_int ("id", + NULL, NULL, + 0, G_MAXINT, 0, + GIMP_PARAM_READABLE)); + + g_object_class_install_property (object_class, PROP_GIMP, + g_param_spec_object ("gimp", + NULL, NULL, + GIMP_TYPE_GIMP, + GIMP_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); +} + +static void +gimp_display_init (GimpDisplay *display) +{ + display->priv = gimp_display_get_instance_private (display); +} + +static void +gimp_display_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + GimpDisplay *display = GIMP_DISPLAY (object); + GimpDisplayPrivate *private = display->priv; + + switch (property_id) + { + case PROP_GIMP: + { + gint id; + + display->gimp = g_value_get_object (value); /* don't ref the gimp */ + display->config = GIMP_DISPLAY_CONFIG (display->gimp->config); + + do + { + id = display->gimp->next_display_id++; + + if (display->gimp->next_display_id == G_MAXINT) + display->gimp->next_display_id = 1; + } + while (gimp_display_get_by_id (display->gimp, id)); + + private->id = id; + } + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gimp_display_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GimpDisplay *display = GIMP_DISPLAY (object); + + switch (property_id) + { + case PROP_ID: + g_value_set_int (value, display->priv->id); + break; + + case PROP_GIMP: + g_value_set_object (value, display->gimp); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/* public functions */ + +gint +gimp_display_get_id (GimpDisplay *display) +{ + g_return_val_if_fail (GIMP_IS_DISPLAY (display), -1); + + return display->priv->id; +} + +GimpDisplay * +gimp_display_get_by_id (Gimp *gimp, + gint id) +{ + GList *list; + + g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); + + for (list = gimp_get_display_iter (gimp); + list; + list = g_list_next (list)) + { + GimpDisplay *display = list->data; + + if (gimp_display_get_id (display) == id) + return display; + } + + return NULL; +} + +Gimp * +gimp_display_get_gimp (GimpDisplay *display) +{ + g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); + + return display->gimp; +} diff --git a/app/core/gimpdisplay.h b/app/core/gimpdisplay.h new file mode 100644 index 0000000000..2ea00c80d4 --- /dev/null +++ b/app/core/gimpdisplay.h @@ -0,0 +1,61 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * 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 . + */ + +#ifndef __GIMP_DISPLAY_H__ +#define __GIMP_DISPLAY_H__ + + +#include "gimpobject.h" + + +#define GIMP_TYPE_DISPLAY (gimp_display_get_type ()) +#define GIMP_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DISPLAY, GimpDisplay)) +#define GIMP_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DISPLAY, GimpDisplayClass)) +#define GIMP_IS_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DISPLAY)) +#define GIMP_IS_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DISPLAY)) +#define GIMP_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_DISPLAY, GimpDisplayClass)) + + +typedef struct _GimpDisplayClass GimpDisplayClass; +typedef struct _GimpDisplayPrivate GimpDisplayPrivate; + +struct _GimpDisplay +{ + GimpObject parent_instance; + + Gimp *gimp; + GimpDisplayConfig *config; + + GimpDisplayPrivate *priv; +}; + +struct _GimpDisplayClass +{ + GimpObjectClass parent_class; +}; + + +GType gimp_display_get_type (void) G_GNUC_CONST; + +gint gimp_display_get_id (GimpDisplay *display); +GimpDisplay * gimp_display_get_by_id (Gimp *gimp, + gint id); + +Gimp * gimp_display_get_gimp (GimpDisplay *display); + + +#endif /* __GIMP_DISPLAY_H__ */ diff --git a/app/core/gimpparamspecs.c b/app/core/gimpparamspecs.c index 5182261f4c..1b096ef10d 100644 --- a/app/core/gimpparamspecs.c +++ b/app/core/gimpparamspecs.c @@ -25,6 +25,7 @@ #include "core-types.h" #include "gimp.h" +#include "gimpdisplay.h" #include "gimpimage.h" #include "gimplayer.h" #include "gimplayermask.h" @@ -383,7 +384,7 @@ gimp_param_image_init (GParamSpec *pspec) static gboolean gimp_param_image_validate (GParamSpec *pspec, - GValue *value) + GValue *value) { GimpParamSpecImage *ispec = GIMP_PARAM_SPEC_IMAGE (pspec); GimpImage *image = value->data[0].v_pointer; @@ -876,10 +877,10 @@ gimp_param_spec_vectors (const gchar *name, * GIMP_TYPE_PARAM_DISPLAY */ -static void gimp_param_display_class_init (GParamSpecClass *klass); -static void gimp_param_display_init (GParamSpec *pspec); -static gboolean gimp_param_display_validate (GParamSpec *pspec, - GValue *value); +static void gimp_param_display_class_init (GParamSpecClass *klass); +static void gimp_param_display_init (GParamSpec *pspec); +static gboolean gimp_param_display_validate (GParamSpec *pspec, + GValue *value); GType gimp_param_display_get_type (void) @@ -909,33 +910,29 @@ gimp_param_display_get_type (void) static void gimp_param_display_class_init (GParamSpecClass *klass) { - klass->value_type = g_type_from_name ("GimpDisplay"); - - g_assert (klass->value_type != G_TYPE_NONE); - + klass->value_type = GIMP_TYPE_DISPLAY; klass->value_validate = gimp_param_display_validate; } static void gimp_param_display_init (GParamSpec *pspec) { - GimpParamSpecDisplay *ispec = GIMP_PARAM_SPEC_DISPLAY (pspec); + GimpParamSpecDisplay *dspec = GIMP_PARAM_SPEC_DISPLAY (pspec); - ispec->none_ok = FALSE; + dspec->none_ok = FALSE; } static gboolean gimp_param_display_validate (GParamSpec *pspec, GValue *value) { - GimpParamSpecDisplay *ispec = GIMP_PARAM_SPEC_DISPLAY (pspec); - GObject *display = value->data[0].v_pointer; + GimpParamSpecDisplay *dspec = GIMP_PARAM_SPEC_DISPLAY (pspec); + GimpDisplay *display = value->data[0].v_pointer; - if (! ispec->none_ok && display == NULL) + if (! dspec->none_ok && display == NULL) return TRUE; - if (display && ! g_value_type_compatible (G_OBJECT_TYPE (display), - G_PARAM_SPEC_VALUE_TYPE (pspec))) + if (display && ! GIMP_IS_DISPLAY (display)) { g_object_unref (display); value->data[0].v_pointer = NULL; @@ -952,12 +949,12 @@ gimp_param_spec_display (const gchar *name, gboolean none_ok, GParamFlags flags) { - GimpParamSpecDisplay *ispec; + GimpParamSpecDisplay *dspec; - ispec = g_param_spec_internal (GIMP_TYPE_PARAM_DISPLAY, + dspec = g_param_spec_internal (GIMP_TYPE_PARAM_DISPLAY, name, nick, blurb, flags); - ispec->none_ok = none_ok ? TRUE : FALSE; + dspec->none_ok = none_ok ? TRUE : FALSE; - return G_PARAM_SPEC (ispec); + return G_PARAM_SPEC (dspec); } diff --git a/app/core/gimpparamspecs.h b/app/core/gimpparamspecs.h index c89a615718..0405835b4e 100644 --- a/app/core/gimpparamspecs.h +++ b/app/core/gimpparamspecs.h @@ -210,13 +210,13 @@ struct _GimpParamSpecChannel GimpParamSpecDrawable parent_instance; }; -GType gimp_param_channel_get_type (void) G_GNUC_CONST; +GType gimp_param_channel_get_type (void) G_GNUC_CONST; -GParamSpec * gimp_param_spec_channel (const gchar *name, - const gchar *nick, - const gchar *blurb, - gboolean none_ok, - GParamFlags flags); +GParamSpec * gimp_param_spec_channel (const gchar *name, + const gchar *nick, + const gchar *blurb, + gboolean none_ok, + GParamFlags flags); /* @@ -305,7 +305,7 @@ GParamSpec * gimp_param_spec_vectors (const gchar *name, */ #define GIMP_VALUE_HOLDS_DISPLAY(value) (G_TYPE_CHECK_VALUE_TYPE ((value),\ - GIMP_TYPE_OBJECT)) + GIMP_TYPE_DISPLAY)) #define GIMP_TYPE_PARAM_DISPLAY (gimp_param_display_get_type ()) #define GIMP_PARAM_SPEC_DISPLAY(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GIMP_TYPE_PARAM_DISPLAY, GimpParamSpecDisplay)) diff --git a/app/display/display-types.h b/app/display/display-types.h index 6de751dc1c..302f465d19 100644 --- a/app/display/display-types.h +++ b/app/display/display-types.h @@ -28,7 +28,6 @@ typedef struct _GimpCanvas GimpCanvas; typedef struct _GimpCanvasGroup GimpCanvasGroup; typedef struct _GimpCanvasItem GimpCanvasItem; -typedef struct _GimpDisplay GimpDisplay; typedef struct _GimpDisplayShell GimpDisplayShell; typedef struct _GimpMotionBuffer GimpMotionBuffer; diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index 7c7bfafadb..905cdc7142 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -59,19 +59,13 @@ enum { PROP_0, - PROP_ID, - PROP_GIMP, PROP_IMAGE, PROP_SHELL }; -typedef struct _GimpDisplayPrivate GimpDisplayPrivate; - -struct _GimpDisplayPrivate +struct _GimpDisplayImplPrivate { - gint ID; /* unique identifier for this display */ - GimpImage *image; /* pointer to the associated image */ gint instance; /* the instance # of this display as * taken from the image at creation */ @@ -80,9 +74,6 @@ struct _GimpDisplayPrivate cairo_region_t *update_region; }; -#define GIMP_DISPLAY_GET_PRIVATE(display) \ - ((GimpDisplayPrivate *) gimp_display_get_instance_private ((GimpDisplay *) (display))) - /* local function prototypes */ @@ -125,35 +116,22 @@ static void gimp_display_paint_area (GimpDisplay *displa gint h); -G_DEFINE_TYPE_WITH_CODE (GimpDisplay, gimp_display, GIMP_TYPE_OBJECT, - G_ADD_PRIVATE (GimpDisplay) +G_DEFINE_TYPE_WITH_CODE (GimpDisplayImpl, gimp_display_impl, GIMP_TYPE_DISPLAY, + G_ADD_PRIVATE (GimpDisplayImpl) G_IMPLEMENT_INTERFACE (GIMP_TYPE_PROGRESS, gimp_display_progress_iface_init)) -#define parent_class gimp_display_parent_class +#define parent_class gimp_display_impl_parent_class static void -gimp_display_class_init (GimpDisplayClass *klass) +gimp_display_impl_class_init (GimpDisplayImplClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = gimp_display_set_property; object_class->get_property = gimp_display_get_property; - g_object_class_install_property (object_class, PROP_ID, - g_param_spec_int ("id", - NULL, NULL, - 0, G_MAXINT, 0, - GIMP_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_GIMP, - g_param_spec_object ("gimp", - NULL, NULL, - GIMP_TYPE_GIMP, - GIMP_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (object_class, PROP_IMAGE, g_param_spec_object ("image", NULL, NULL, @@ -168,8 +146,9 @@ gimp_display_class_init (GimpDisplayClass *klass) } static void -gimp_display_init (GimpDisplay *display) +gimp_display_impl_init (GimpDisplayImpl *display) { + display->priv = gimp_display_impl_get_instance_private (display); } static void @@ -192,31 +171,8 @@ gimp_display_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - GimpDisplay *display = GIMP_DISPLAY (object); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); - switch (property_id) { - case PROP_GIMP: - { - gint ID; - - display->gimp = g_value_get_object (value); /* don't ref the gimp */ - display->config = GIMP_DISPLAY_CONFIG (display->gimp->config); - - do - { - ID = display->gimp->next_display_id++; - - if (display->gimp->next_display_id == G_MAXINT) - display->gimp->next_display_id = 1; - } - while (gimp_display_get_by_id (display->gimp, ID)); - - private->ID = ID; - } - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -229,25 +185,16 @@ gimp_display_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - GimpDisplay *display = GIMP_DISPLAY (object); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (object); switch (property_id) { - case PROP_ID: - g_value_set_int (value, private->ID); - break; - - case PROP_GIMP: - g_value_set_object (value, display->gimp); - break; - case PROP_IMAGE: - g_value_set_object (value, private->image); + g_value_set_object (value, display->priv->image); break; case PROP_SHELL: - g_value_set_object (value, private->shell); + g_value_set_object (value, display->priv->shell); break; default: @@ -261,11 +208,11 @@ gimp_display_progress_start (GimpProgress *progress, gboolean cancellable, const gchar *message) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - return gimp_progress_start (GIMP_PROGRESS (private->shell), cancellable, + if (display->priv->shell) + return gimp_progress_start (GIMP_PROGRESS (display->priv->shell), + cancellable, "%s", message); return NULL; @@ -274,21 +221,19 @@ gimp_display_progress_start (GimpProgress *progress, static void gimp_display_progress_end (GimpProgress *progress) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - gimp_progress_end (GIMP_PROGRESS (private->shell)); + if (display->priv->shell) + gimp_progress_end (GIMP_PROGRESS (display->priv->shell)); } static gboolean gimp_display_progress_is_active (GimpProgress *progress) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - return gimp_progress_is_active (GIMP_PROGRESS (private->shell)); + if (display->priv->shell) + return gimp_progress_is_active (GIMP_PROGRESS (display->priv->shell)); return FALSE; } @@ -297,32 +242,31 @@ static void gimp_display_progress_set_text (GimpProgress *progress, const gchar *message) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - gimp_progress_set_text_literal (GIMP_PROGRESS (private->shell), message); + if (display->priv->shell) + gimp_progress_set_text_literal (GIMP_PROGRESS (display->priv->shell), + message); } static void gimp_display_progress_set_value (GimpProgress *progress, gdouble percentage) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - gimp_progress_set_value (GIMP_PROGRESS (private->shell), percentage); + if (display->priv->shell) + gimp_progress_set_value (GIMP_PROGRESS (display->priv->shell), + percentage); } static gdouble gimp_display_progress_get_value (GimpProgress *progress) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - return gimp_progress_get_value (GIMP_PROGRESS (private->shell)); + if (display->priv->shell) + return gimp_progress_get_value (GIMP_PROGRESS (display->priv->shell)); return 0.0; } @@ -330,21 +274,19 @@ gimp_display_progress_get_value (GimpProgress *progress) static void gimp_display_progress_pulse (GimpProgress *progress) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - gimp_progress_pulse (GIMP_PROGRESS (private->shell)); + if (display->priv->shell) + gimp_progress_pulse (GIMP_PROGRESS (display->priv->shell)); } static guint32 gimp_display_progress_get_window_id (GimpProgress *progress) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - return gimp_progress_get_window_id (GIMP_PROGRESS (private->shell)); + if (display->priv->shell) + return gimp_progress_get_window_id (GIMP_PROGRESS (display->priv->shell)); return 0; } @@ -356,11 +298,10 @@ gimp_display_progress_message (GimpProgress *progress, const gchar *domain, const gchar *message) { - GimpDisplay *display = GIMP_DISPLAY (progress); - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImpl *display = GIMP_DISPLAY_IMPL (progress); - if (private->shell) - return gimp_progress_message (GIMP_PROGRESS (private->shell), gimp, + if (display->priv->shell) + return gimp_progress_message (GIMP_PROGRESS (display->priv->shell), gimp, severity, domain, message); return FALSE; @@ -385,10 +326,10 @@ gimp_display_new (Gimp *gimp, GimpDialogFactory *dialog_factory, GdkMonitor *monitor) { - GimpDisplay *display; - GimpDisplayPrivate *private; - GimpImageWindow *window = NULL; - GimpDisplayShell *shell; + GimpDisplay *display; + GimpDisplayImplPrivate *private; + GimpImageWindow *window = NULL; + GimpDisplayShell *shell; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (image == NULL || GIMP_IS_IMAGE (image), NULL); @@ -398,11 +339,11 @@ gimp_display_new (Gimp *gimp, if (gimp->no_interface) return NULL; - display = g_object_new (GIMP_TYPE_DISPLAY, + display = g_object_new (GIMP_TYPE_DISPLAY_IMPL, "gimp", gimp, NULL); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; /* refs the image */ if (image) @@ -472,12 +413,12 @@ gimp_display_new (Gimp *gimp, void gimp_display_delete (GimpDisplay *display) { - GimpDisplayPrivate *private; - GimpTool *active_tool; + GimpDisplayImplPrivate *private; + GimpTool *active_tool; g_return_if_fail (GIMP_IS_DISPLAY (display)); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; /* remove the display from the list */ gimp_container_remove (display->gimp->displays, GIMP_OBJECT (display)); @@ -548,39 +489,6 @@ gimp_display_close (GimpDisplay *display) } } -gint -gimp_display_get_id (GimpDisplay *display) -{ - GimpDisplayPrivate *private; - - g_return_val_if_fail (GIMP_IS_DISPLAY (display), -1); - - private = GIMP_DISPLAY_GET_PRIVATE (display); - - return private->ID; -} - -GimpDisplay * -gimp_display_get_by_id (Gimp *gimp, - gint id) -{ - GList *list; - - g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); - - for (list = gimp_get_display_iter (gimp); - list; - list = g_list_next (list)) - { - GimpDisplay *display = list->data; - - if (gimp_display_get_id (display) == id) - return display; - } - - return NULL; -} - /** * gimp_display_get_action_name: * @display: @@ -597,34 +505,26 @@ gimp_display_get_action_name (GimpDisplay *display) gimp_display_get_id (display)); } -Gimp * -gimp_display_get_gimp (GimpDisplay *display) -{ - g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); - - return display->gimp; -} - GimpImage * gimp_display_get_image (GimpDisplay *display) { g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); - return GIMP_DISPLAY_GET_PRIVATE (display)->image; + return GIMP_DISPLAY_IMPL (display)->priv->image; } void gimp_display_set_image (GimpDisplay *display, GimpImage *image) { - GimpDisplayPrivate *private; - GimpImage *old_image = NULL; - GimpDisplayShell *shell; + GimpDisplayImplPrivate *private; + GimpImage *old_image = NULL; + GimpDisplayShell *shell; g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (image == NULL || GIMP_IS_IMAGE (image)); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; shell = gimp_display_get_shell (display); @@ -694,36 +594,28 @@ gimp_display_set_image (GimpDisplay *display, gint gimp_display_get_instance (GimpDisplay *display) { - GimpDisplayPrivate *private; - g_return_val_if_fail (GIMP_IS_DISPLAY (display), 0); - private = GIMP_DISPLAY_GET_PRIVATE (display); - - return private->instance; + return GIMP_DISPLAY_IMPL (display)->priv->instance; } GimpDisplayShell * gimp_display_get_shell (GimpDisplay *display) { - GimpDisplayPrivate *private; - g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL); - private = GIMP_DISPLAY_GET_PRIVATE (display); - - return GIMP_DISPLAY_SHELL (private->shell); + return GIMP_DISPLAY_SHELL (GIMP_DISPLAY_IMPL (display)->priv->shell); } void gimp_display_empty (GimpDisplay *display) { - GimpDisplayPrivate *private; - GList *iter; + GimpDisplayImplPrivate *private; + GList *iter; g_return_if_fail (GIMP_IS_DISPLAY (display)); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; g_return_if_fail (GIMP_IS_IMAGE (private->image)); @@ -746,12 +638,12 @@ gimp_display_fill (GimpDisplay *display, GimpUnit unit, gdouble scale) { - GimpDisplayPrivate *private; + GimpDisplayImplPrivate *private; g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (GIMP_IS_IMAGE (image)); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; g_return_if_fail (private->image == NULL); @@ -769,11 +661,11 @@ gimp_display_update_area (GimpDisplay *display, gint w, gint h) { - GimpDisplayPrivate *private; + GimpDisplayImplPrivate *private; g_return_if_fail (GIMP_IS_DISPLAY (display)); - private = GIMP_DISPLAY_GET_PRIVATE (display); + private = GIMP_DISPLAY_IMPL (display)->priv; if (now) { @@ -824,7 +716,7 @@ gimp_display_flush_now (GimpDisplay *display) static void gimp_display_flush_update_region (GimpDisplay *display) { - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); + GimpDisplayImplPrivate *private = GIMP_DISPLAY_IMPL (display)->priv; if (private->update_region) { @@ -856,12 +748,12 @@ gimp_display_paint_area (GimpDisplay *display, gint w, gint h) { - GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display); - GimpDisplayShell *shell = gimp_display_get_shell (display); - gint image_width = gimp_image_get_width (private->image); - gint image_height = gimp_image_get_height (private->image); - gint x1, y1, x2, y2; - gdouble x1_f, y1_f, x2_f, y2_f; + GimpDisplayImplPrivate *private = GIMP_DISPLAY_IMPL (display)->priv; + GimpDisplayShell *shell = gimp_display_get_shell (display); + gint image_width = gimp_image_get_width (private->image); + gint image_height = gimp_image_get_height (private->image); + gint x1, y1, x2, y2; + gdouble x1_f, y1_f, x2_f, y2_f; /* Bounds check */ x1 = CLAMP (x, 0, image_width); diff --git a/app/display/gimpdisplay.h b/app/display/gimpdisplay.h index 43d70d59b0..6fbb5154fa 100644 --- a/app/display/gimpdisplay.h +++ b/app/display/gimpdisplay.h @@ -15,39 +15,41 @@ * along with this program. If not, see . */ -#ifndef __GIMP_DISPLAY_H__ -#define __GIMP_DISPLAY_H__ +#ifndef __GIMP_DISPLAY_IMPL_H__ +#define __GIMP_DISPLAY_IMPL_H__ -#include "core/gimpobject.h" +#include "core/gimpdisplay.h" -#define GIMP_TYPE_DISPLAY (gimp_display_get_type ()) -#define GIMP_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DISPLAY, GimpDisplay)) -#define GIMP_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DISPLAY, GimpDisplayClass)) -#define GIMP_IS_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DISPLAY)) -#define GIMP_IS_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DISPLAY)) -#define GIMP_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_DISPLAY, GimpDisplayClass)) +#define GIMP_TYPE_DISPLAY_IMPL (gimp_display_impl_get_type ()) +#define GIMP_DISPLAY_IMPL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DISPLAY_IMPL, GimpDisplayImpl)) +#define GIMP_DISPLAY_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DISPLAY_IMPL, GimpDisplayImplClass)) +#define GIMP_IS_DISPLAY_IMPL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DISPLAY_IMPL)) +#define GIMP_IS_DISPLAY_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DISPLAY_IMPL)) +#define GIMP_DISPLAY_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_DISPLAY_IMPL, GimpDisplayImplClass)) -typedef struct _GimpDisplayClass GimpDisplayClass; +typedef struct _GimpDisplayImpl GimpDisplayImpl; +typedef struct _GimpDisplayImplClass GimpDisplayImplClass; +typedef struct _GimpDisplayImplPrivate GimpDisplayImplPrivate; -struct _GimpDisplay + +struct _GimpDisplayImpl { - GimpObject parent_instance; + GimpDisplay parent_instance; - Gimp *gimp; - GimpDisplayConfig *config; + GimpDisplayImplPrivate *priv; }; -struct _GimpDisplayClass +struct _GimpDisplayImplClass { - GimpObjectClass parent_class; + GimpDisplayClass parent_class; }; -GType gimp_display_get_type (void) G_GNUC_CONST; +GType gimp_display_impl_get_type (void) G_GNUC_CONST; GimpDisplay * gimp_display_new (Gimp *gimp, GimpImage *image, @@ -59,14 +61,8 @@ GimpDisplay * gimp_display_new (Gimp *gimp, void gimp_display_delete (GimpDisplay *display); void gimp_display_close (GimpDisplay *display); -gint gimp_display_get_id (GimpDisplay *display); -GimpDisplay * gimp_display_get_by_id (Gimp *gimp, - gint id); - gchar * gimp_display_get_action_name (GimpDisplay *display); -Gimp * gimp_display_get_gimp (GimpDisplay *display); - GimpImage * gimp_display_get_image (GimpDisplay *display); void gimp_display_set_image (GimpDisplay *display, GimpImage *image); @@ -92,4 +88,4 @@ void gimp_display_flush (GimpDisplay *display); void gimp_display_flush_now (GimpDisplay *display); -#endif /* __GIMP_DISPLAY_H__ */ +#endif /* __GIMP_DISPLAY_IMPL_H__ */ diff --git a/app/file/file-open.c b/app/file/file-open.c index b87e6e7005..9f3a21b96d 100644 --- a/app/file/file-open.c +++ b/app/file/file-open.c @@ -682,7 +682,7 @@ file_open_from_command_line (Gimp *gimp, { GimpImage *image; - GimpObject *display; + GimpDisplay *display; GimpPDBStatusType status; gboolean success = FALSE; GError *error = NULL; diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c index 09487382f1..191c5b1a75 100644 --- a/app/gui/gui-vtable.c +++ b/app/gui/gui-vtable.c @@ -128,17 +128,14 @@ static guint32 gui_get_user_time (Gimp *gimp); static GFile * gui_get_theme_dir (Gimp *gimp); static GFile * gui_get_icon_theme_dir (Gimp *gimp); static GimpObject * gui_get_window_strategy (Gimp *gimp); -static GimpObject * gui_get_empty_display (Gimp *gimp); -static GimpObject * gui_display_get_by_id (Gimp *gimp, - gint ID); -static gint gui_display_get_id (GimpObject *display); -static guint32 gui_display_get_window_id (GimpObject *display); -static GimpObject * gui_display_create (Gimp *gimp, +static GimpDisplay * gui_get_empty_display (Gimp *gimp); +static guint32 gui_display_get_window_id (GimpDisplay *display); +static GimpDisplay * gui_display_create (Gimp *gimp, GimpImage *image, GimpUnit unit, gdouble scale, GObject *monitor); -static void gui_display_delete (GimpObject *display); +static void gui_display_delete (GimpDisplay *display); static void gui_displays_reconnect (Gimp *gimp, GimpImage *old_image, GimpImage *new_image); @@ -146,7 +143,7 @@ static gboolean gui_wait (Gimp *gimp, GimpWaitable *waitable, const gchar *message); static GimpProgress * gui_new_progress (Gimp *gimp, - GimpObject *display); + GimpDisplay *display); static void gui_free_progress (Gimp *gimp, GimpProgress *progress); static gboolean gui_pdb_dialog_new (Gimp *gimp, @@ -203,8 +200,6 @@ gui_vtable_init (Gimp *gimp) gimp->gui.get_icon_theme_dir = gui_get_icon_theme_dir; gimp->gui.get_window_strategy = gui_get_window_strategy; gimp->gui.get_empty_display = gui_get_empty_display; - gimp->gui.display_get_by_id = gui_display_get_by_id; - gimp->gui.display_get_id = gui_display_get_id; gimp->gui.display_get_window_id = gui_display_get_window_id; gimp->gui.display_create = gui_display_create; gimp->gui.display_delete = gui_display_delete; @@ -345,16 +340,16 @@ gui_get_window_strategy (Gimp *gimp) return gimp_multi_window_strategy_get_singleton (); } -static GimpObject * +static GimpDisplay * gui_get_empty_display (Gimp *gimp) { - GimpObject *display = NULL; + GimpDisplay *display = NULL; if (gimp_container_get_n_children (gimp->displays) == 1) { - display = gimp_container_get_first_child (gimp->displays); + display = (GimpDisplay *) gimp_container_get_first_child (gimp->displays); - if (gimp_display_get_image (GIMP_DISPLAY (display))) + if (gimp_display_get_image (display)) { /* The display was not empty */ display = NULL; @@ -364,21 +359,8 @@ gui_get_empty_display (Gimp *gimp) return display; } -static GimpObject * -gui_display_get_by_id (Gimp *gimp, - gint id) -{ - return (GimpObject *) gimp_display_get_by_id (gimp, id); -} - -static gint -gui_display_get_id (GimpObject *display) -{ - return gimp_display_get_id (GIMP_DISPLAY (display)); -} - static guint32 -gui_display_get_window_id (GimpObject *display) +gui_display_get_window_id (GimpDisplay *display) { GimpDisplay *disp = GIMP_DISPLAY (display); GimpDisplayShell *shell = gimp_display_get_shell (disp); @@ -394,7 +376,7 @@ gui_display_get_window_id (GimpObject *display) return 0; } -static GimpObject * +static GimpDisplay * gui_display_create (Gimp *gimp, GimpImage *image, GimpUnit unit, @@ -433,13 +415,13 @@ gui_display_create (Gimp *gimp, gimp_context_set_display (context, display); } - return GIMP_OBJECT (display); + return display; } static void -gui_display_delete (GimpObject *display) +gui_display_delete (GimpDisplay *display) { - gimp_display_close (GIMP_DISPLAY (display)); + gimp_display_close (display); } static void @@ -563,8 +545,8 @@ gui_wait (Gimp *gimp, } static GimpProgress * -gui_new_progress (Gimp *gimp, - GimpObject *display) +gui_new_progress (Gimp *gimp, + GimpDisplay *display) { g_return_val_if_fail (display == NULL || GIMP_IS_DISPLAY (display), NULL); diff --git a/app/pdb/display-cmds.c b/app/pdb/display-cmds.c index c98d6e4ba1..2f84486fc8 100644 --- a/app/pdb/display-cmds.c +++ b/app/pdb/display-cmds.c @@ -29,6 +29,7 @@ #include "core/gimp.h" #include "core/gimpcontainer.h" +#include "core/gimpdisplay.h" #include "core/gimpimage.h" #include "core/gimpparamspecs.h" @@ -54,7 +55,7 @@ display_id_is_valid_invoker (GimpProcedure *procedure, if (success) { - valid = (gimp_get_display_by_id (gimp, display_id) != NULL); + valid = (gimp_display_get_by_id (gimp, display_id) != NULL); } return_vals = gimp_procedure_get_return_values (procedure, success, @@ -77,7 +78,7 @@ display_new_invoker (GimpProcedure *procedure, gboolean success = TRUE; GimpValueArray *return_vals; GimpImage *image; - GimpObject *display = NULL; + GimpDisplay *display = NULL; image = g_value_get_object (gimp_value_array_index (args, 0)); @@ -117,7 +118,7 @@ display_delete_invoker (GimpProcedure *procedure, GError **error) { gboolean success = TRUE; - GimpObject *display; + GimpDisplay *display; display = g_value_get_object (gimp_value_array_index (args, 0)); @@ -140,7 +141,7 @@ display_get_window_handle_invoker (GimpProcedure *procedure, { gboolean success = TRUE; GimpValueArray *return_vals; - GimpObject *display; + GimpDisplay *display; gint window = 0; display = g_value_get_object (gimp_value_array_index (args, 0)); diff --git a/app/pdb/gimpprocedure.c b/app/pdb/gimpprocedure.c index d2de0ffdf5..1bcf01ee6f 100644 --- a/app/pdb/gimpprocedure.c +++ b/app/pdb/gimpprocedure.c @@ -30,6 +30,7 @@ #include "core/gimp.h" #include "core/gimp-memsize.h" #include "core/gimpchannel.h" +#include "core/gimpdisplay.h" #include "core/gimplayer.h" #include "core/gimpparamspecs.h" #include "core/gimpprogress.h" @@ -66,7 +67,7 @@ static void gimp_procedure_real_execute_async (GimpProcedure *proced GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display); + GimpDisplay *display); static void gimp_procedure_free_strings (GimpProcedure *procedure); static gboolean gimp_procedure_validate_args (GimpProcedure *procedure, @@ -220,7 +221,7 @@ gimp_procedure_real_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display) + GimpDisplay *display) { GimpValueArray *return_vals; GError *error = NULL; @@ -496,7 +497,7 @@ gimp_procedure_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display, + GimpDisplay *display, GError **error) { g_return_if_fail (GIMP_IS_PROCEDURE (procedure)); @@ -504,7 +505,7 @@ gimp_procedure_execute_async (GimpProcedure *procedure, g_return_if_fail (GIMP_IS_CONTEXT (context)); g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress)); g_return_if_fail (args != NULL); - g_return_if_fail (display == NULL || GIMP_IS_OBJECT (display)); + g_return_if_fail (display == NULL || GIMP_IS_DISPLAY (display)); g_return_if_fail (error == NULL || *error == NULL); if (gimp_procedure_validate_args (procedure, diff --git a/app/pdb/gimpprocedure.h b/app/pdb/gimpprocedure.h index 5990c25c38..d3cdcf42af 100644 --- a/app/pdb/gimpprocedure.h +++ b/app/pdb/gimpprocedure.h @@ -87,7 +87,7 @@ struct _GimpProcedureClass GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display); + GimpDisplay *display); }; @@ -150,7 +150,7 @@ void gimp_procedure_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display, + GimpDisplay *display, GError **error); gint gimp_procedure_name_compare (GimpProcedure *proc1, diff --git a/app/pdb/progress-cmds.c b/app/pdb/progress-cmds.c index af91745e59..535246a672 100644 --- a/app/pdb/progress-cmds.c +++ b/app/pdb/progress-cmds.c @@ -48,7 +48,7 @@ progress_init_invoker (GimpProcedure *procedure, { gboolean success = TRUE; const gchar *message; - GimpObject *gdisplay; + GimpDisplay *gdisplay; message = g_value_get_string (gimp_value_array_index (args, 0)); gdisplay = g_value_get_object (gimp_value_array_index (args, 1)); diff --git a/app/plug-in/gimpgpparams.c b/app/plug-in/gimpgpparams.c index cab548e018..4fa6b70e38 100644 --- a/app/plug-in/gimpgpparams.c +++ b/app/plug-in/gimpgpparams.c @@ -31,6 +31,7 @@ #include "plug-in-types.h" #include "core/gimp.h" +#include "core/gimpdisplay.h" #include "core/gimpimage.h" #include "core/gimplayer.h" #include "core/gimplayermask.h" diff --git a/app/plug-in/gimpplugin-progress.c b/app/plug-in/gimpplugin-progress.c index af90092181..df22e1d227 100644 --- a/app/plug-in/gimpplugin-progress.c +++ b/app/plug-in/gimpplugin-progress.c @@ -27,6 +27,7 @@ #include "plug-in-types.h" #include "core/gimp.h" +#include "core/gimpdisplay.h" #include "core/gimpparamspecs.h" #include "core/gimppdbprogress.h" #include "core/gimpprogress.h" @@ -91,12 +92,12 @@ gimp_plug_in_progress_detach (GimpProgress *progress) void gimp_plug_in_progress_start (GimpPlugIn *plug_in, const gchar *message, - GimpObject *display) + GimpDisplay *display) { GimpPlugInProcFrame *proc_frame; g_return_if_fail (GIMP_IS_PLUG_IN (plug_in)); - g_return_if_fail (display == NULL || GIMP_IS_OBJECT (display)); + g_return_if_fail (display == NULL || GIMP_IS_DISPLAY (display)); proc_frame = gimp_plug_in_get_proc_frame (plug_in); diff --git a/app/plug-in/gimpplugin-progress.h b/app/plug-in/gimpplugin-progress.h index 56e5285be7..43514fa46d 100644 --- a/app/plug-in/gimpplugin-progress.h +++ b/app/plug-in/gimpplugin-progress.h @@ -26,7 +26,7 @@ gint gimp_plug_in_progress_detach (GimpProgress *progress); void gimp_plug_in_progress_start (GimpPlugIn *plug_in, const gchar *message, - GimpObject *display); + GimpDisplay *display); void gimp_plug_in_progress_end (GimpPlugIn *plug_in, GimpPlugInProcFrame *proc_frame); void gimp_plug_in_progress_set_text (GimpPlugIn *plug_in, diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c index be645d8bae..e85d94e934 100644 --- a/app/plug-in/gimppluginmanager-call.c +++ b/app/plug-in/gimppluginmanager-call.c @@ -37,6 +37,7 @@ #include "config/gimpguiconfig.h" #include "core/gimp.h" +#include "core/gimpdisplay.h" #include "core/gimpprogress.h" #include "pdb/gimppdbcontext.h" @@ -151,7 +152,7 @@ gimp_plug_in_manager_call_run (GimpPlugInManager *manager, GimpPlugInProcedure *procedure, GimpValueArray *args, gboolean synchronous, - GimpObject *display) + GimpDisplay *display) { GimpValueArray *return_vals = NULL; GimpPlugIn *plug_in; @@ -161,7 +162,7 @@ gimp_plug_in_manager_call_run (GimpPlugInManager *manager, g_return_val_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress), NULL); g_return_val_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (procedure), NULL); g_return_val_if_fail (args != NULL, NULL); - g_return_val_if_fail (display == NULL || GIMP_IS_OBJECT (display), NULL); + g_return_val_if_fail (display == NULL || GIMP_IS_DISPLAY (display), NULL); plug_in = gimp_plug_in_new (manager, context, progress, procedure, NULL); @@ -194,7 +195,7 @@ gimp_plug_in_manager_call_run (GimpPlugInManager *manager, return return_vals; } - display_id = display ? gimp_get_display_id (manager->gimp, display) : -1; + display_id = display ? gimp_display_get_id (display) : -1; icon_theme_dir = gimp_get_icon_theme_dir (manager->gimp); diff --git a/app/plug-in/gimppluginmanager-call.h b/app/plug-in/gimppluginmanager-call.h index c456ab3b74..405452e2a8 100644 --- a/app/plug-in/gimppluginmanager-call.h +++ b/app/plug-in/gimppluginmanager-call.h @@ -45,7 +45,7 @@ GimpValueArray * gimp_plug_in_manager_call_run (GimpPlugInManager *man GimpPlugInProcedure *procedure, GimpValueArray *args, gboolean synchronous, - GimpObject *display); + GimpDisplay *display); /* Run a temp plug-in proc as if it were a procedure database procedure */ diff --git a/app/plug-in/gimppluginprocedure.c b/app/plug-in/gimppluginprocedure.c index 3a006abb80..a88bdbfdd8 100644 --- a/app/plug-in/gimppluginprocedure.c +++ b/app/plug-in/gimppluginprocedure.c @@ -82,7 +82,7 @@ static void gimp_plug_in_procedure_execute_async (GimpProcedure *procedur GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display); + GimpDisplay *display); static GFile * gimp_plug_in_procedure_real_get_file (GimpPlugInProcedure *procedure); @@ -412,7 +412,7 @@ gimp_plug_in_procedure_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display) + GimpDisplay *display) { GimpPlugInProcedure *plug_in_procedure = GIMP_PLUG_IN_PROCEDURE (procedure); GError *error = NULL; diff --git a/app/plug-in/gimptemporaryprocedure.c b/app/plug-in/gimptemporaryprocedure.c index e0a269a500..849ee3962a 100644 --- a/app/plug-in/gimptemporaryprocedure.c +++ b/app/plug-in/gimptemporaryprocedure.c @@ -49,7 +49,7 @@ static void gimp_temporary_procedure_execute_async (GimpProcedure *proce GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display); + GimpDisplay *display); static GFile * gimp_temporary_procedure_get_file (GimpPlugInProcedure *procedure); @@ -109,7 +109,7 @@ gimp_temporary_procedure_execute_async (GimpProcedure *procedure, GimpContext *context, GimpProgress *progress, GimpValueArray *args, - GimpObject *display) + GimpDisplay *display) { GimpTemporaryProcedure *temp_procedure = GIMP_TEMPORARY_PROCEDURE (procedure); GimpValueArray *return_vals; diff --git a/app/widgets/gimpdockwindow.c b/app/widgets/gimpdockwindow.c index ac63c96c29..fd3f78da53 100644 --- a/app/widgets/gimpdockwindow.c +++ b/app/widgets/gimpdockwindow.c @@ -139,7 +139,7 @@ static GimpAlignmentType GimpDock *dock); static gboolean gimp_dock_window_should_add_to_recent (GimpDockWindow *dock_window); static void gimp_dock_window_display_changed (GimpDockWindow *dock_window, - GimpObject *display, + GimpDisplay *display, GimpContext *context); static void gimp_dock_window_image_changed (GimpDockWindow *dock_window, GimpImage *image, @@ -155,7 +155,7 @@ static void gimp_dock_window_dock_removed (GimpDockWindo GimpDock *dock, GimpDockColumns *dock_columns); static void gimp_dock_window_factory_display_changed (GimpContext *context, - GimpObject *display, + GimpDisplay *display, GimpDock *dock); static void gimp_dock_window_factory_image_changed (GimpContext *context, GimpImage *image, @@ -844,7 +844,7 @@ gimp_dock_window_image_flush (GimpImage *image, { if (image == gimp_context_get_image (dock_window->p->context)) { - GimpObject *display = gimp_context_get_display (dock_window->p->context); + GimpDisplay *display = gimp_context_get_display (dock_window->p->context); if (display) gimp_ui_manager_update (dock_window->p->ui_manager, display); @@ -919,7 +919,7 @@ gimp_dock_window_dock_removed (GimpDockWindow *dock_window, static void gimp_dock_window_factory_display_changed (GimpContext *context, - GimpObject *display, + GimpDisplay *display, GimpDock *dock) { GimpDockWindow *dock_window = GIMP_DOCK_WINDOW (dock); @@ -942,7 +942,7 @@ gimp_dock_window_factory_image_changed (GimpContext *context, static void gimp_dock_window_display_changed (GimpDockWindow *dock_window, - GimpObject *display, + GimpDisplay *display, GimpContext *context) { /* make sure auto-follow-active works both ways */ @@ -991,9 +991,9 @@ gimp_dock_window_image_changed (GimpDockWindow *dock_window, } else if (image != NULL && ! gimp_container_is_empty (display_container)) { - GimpObject *display; - GimpImage *display_image; - gboolean find_display = TRUE; + GimpDisplay *display; + GimpImage *display_image; + gboolean find_display = TRUE; display = gimp_context_get_display (context); @@ -1018,7 +1018,7 @@ gimp_dock_window_image_changed (GimpDockWindow *dock_window, list; list = g_list_next (list)) { - display = GIMP_OBJECT (list->data); + display = list->data; g_object_get (display, "image", &display_image, NULL); diff --git a/app/widgets/gimpdrawabletreeview.c b/app/widgets/gimpdrawabletreeview.c index 5b17d7953a..7b9919db9b 100644 --- a/app/widgets/gimpdrawabletreeview.c +++ b/app/widgets/gimpdrawabletreeview.c @@ -183,9 +183,9 @@ gimp_drawable_tree_view_select_item (GimpContainerView *view, { Gimp *gimp = image->gimp; GimpContext *context = gimp_get_user_context (gimp); - GObject *display = gimp_context_get_display (context); + GimpDisplay *display = gimp_context_get_display (context); - gimp_message_literal (gimp, display, GIMP_MESSAGE_WARNING, + gimp_message_literal (gimp, G_OBJECT (display), GIMP_MESSAGE_WARNING, _("Cannot select item while a floating " "selection is active.")); } diff --git a/libgimp/gimpgpparams-body.c b/libgimp/gimpgpparams-body.c index a60bdc1eb9..0a2991bad4 100644 --- a/libgimp/gimpgpparams-body.c +++ b/libgimp/gimpgpparams-body.c @@ -341,9 +341,9 @@ _gimp_param_spec_to_gp_param_def (GParamSpec *pspec, GType value_type = G_PARAM_SPEC_VALUE_TYPE (pspec); const gchar *type_name = NULL; - if (! strcmp (g_type_name (value_type), "GimpDisplay")) + if (g_type_is_a (value_type, GIMP_TYPE_DISPLAY)) { - /* strcmp() because GimpDisplay is not visible from app/plug-in */ + /* g_type_is_a() because the core has a GimpDisplay subclasses */ type_name = "GimpParamDisplay"; } else if (value_type == GIMP_TYPE_IMAGE) @@ -416,14 +416,14 @@ get_item_by_id (gpointer gimp, #endif } -static GObject * +static GimpDisplay * get_display_by_id (gpointer gimp, gint id) { #ifdef LIBGIMP_COMPILATION - return (GObject *) gimp_display_get_by_id (id); + return gimp_display_get_by_id (id); #else - return (GObject *) gimp_get_display_by_id (gimp, id); + return gimp_display_get_by_id (gimp, id); #endif } @@ -835,25 +835,11 @@ _gimp_value_to_gp_param (const GValue *value, } else if (GIMP_VALUE_HOLDS_DISPLAY (value)) { - GObject *display = g_value_get_object (value); - gint id = -1; - -#if 0 - if (full_copy) - { - g_free (param->type_name); - param->type_name = "GObject"; - } - else - param->type_name = (gchar *) "GObject"; -#endif + GimpDisplay *display = g_value_get_object (value); param->param_type = GP_PARAM_TYPE_INT; - if (display) - g_object_get (display, "id", &id, NULL); - - param->data.d_int = id; + param->data.d_int = display ? gimp_display_get_id (display) : -1; } else if (G_VALUE_HOLDS_PARAM (value)) { diff --git a/libgimp/gimpparamspecs.c b/libgimp/gimpparamspecs.c index bcfd76f662..3bc3e69019 100644 --- a/libgimp/gimpparamspecs.c +++ b/libgimp/gimpparamspecs.c @@ -222,10 +222,10 @@ gimp_param_item_validate (GParamSpec *pspec, **/ GParamSpec * gimp_param_spec_item (const gchar *name, - const gchar *nick, - const gchar *blurb, - gboolean none_ok, - GParamFlags flags) + const gchar *nick, + const gchar *blurb, + gboolean none_ok, + GParamFlags flags) { GimpParamSpecItem *ispec; @@ -894,9 +894,9 @@ gimp_param_display_class_init (GParamSpecClass *klass) static void gimp_param_display_init (GParamSpec *pspec) { - GimpParamSpecDisplay *ispec = GIMP_PARAM_SPEC_DISPLAY (pspec); + GimpParamSpecDisplay *dspec = GIMP_PARAM_SPEC_DISPLAY (pspec); - ispec->none_ok = FALSE; + dspec->none_ok = FALSE; } static gboolean @@ -944,12 +944,12 @@ gimp_param_spec_display (const gchar *name, gboolean none_ok, GParamFlags flags) { - GimpParamSpecDisplay *ispec; + GimpParamSpecDisplay *dspec; - ispec = g_param_spec_internal (GIMP_TYPE_PARAM_DISPLAY, + dspec = g_param_spec_internal (GIMP_TYPE_PARAM_DISPLAY, name, nick, blurb, flags); - ispec->none_ok = none_ok ? TRUE : FALSE; + dspec->none_ok = none_ok ? TRUE : FALSE; - return G_PARAM_SPEC (ispec); + return G_PARAM_SPEC (dspec); } diff --git a/pdb/groups/display.pdb b/pdb/groups/display.pdb index 932335c001..4ca4042ec1 100644 --- a/pdb/groups/display.pdb +++ b/pdb/groups/display.pdb @@ -39,7 +39,7 @@ HELP %invoke = ( code => <<'CODE' { - valid = (gimp_get_display_by_id (gimp, display_id) != NULL); + valid = (gimp_display_get_by_id (gimp, display_id) != NULL); } CODE ); @@ -210,7 +210,8 @@ CODE } -@headers = qw("core/gimp.h"); +@headers = qw("core/gimp.h" + "core/gimpdisplay.h"); @procs = qw(display_id_is_valid display_new diff --git a/pdb/pdb.pl b/pdb/pdb.pl index de0affbf4e..4400980d90 100644 --- a/pdb/pdb.pl +++ b/pdb/pdb.pl @@ -152,8 +152,8 @@ package Gimp::CodeGen::pdb; gtype => 'GIMP_TYPE_DISPLAY', type => 'GimpDisplay *', const_type => 'GimpDisplay *', - app_type => 'GimpObject *', - app_const_type => 'GimpObject *', + app_type => 'GimpDisplay *', + app_const_type => 'GimpDisplay *', init_value => 'NULL', out_annotate => '(transfer none)', get_value_func => '$var = g_value_get_object ($value)',