From adef3095c1fa67f5a42067a82c13622e5d54c8b3 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 22 Mar 2002 15:47:59 +0000 Subject: [PATCH] app/widgets/Makefile.am new file containing 2002-03-22 Michael Natterer * app/widgets/Makefile.am * app/widgets/gimppreview-utils.[ch]: new file containing gimp_preview_type_from_viewable() so we don't need to include *all* vieable and preview subclasses in gimppreview.c * app/widgets/gimppreview.c: gimp_preview_set_viewable: never unset the drag source if the viewable is set to NULL (fixes dock tabs, thanks to sjburges), also check the passed viweable's type. * themes/Default/gtkrc: set the paned handle_size to 6 pixels, so it has the same size as the dock_separator. * etc/gtkrc_user: set both to 5 here, also fiddle around with the global focus padding and the GtkOptionMenu indicator. --- ChangeLog | 17 +++++ app/widgets/Makefile.am | 2 + app/widgets/gimppreview-utils.c | 94 ++++++++++++++++++++++++++ app/widgets/gimppreview-utils.h | 29 ++++++++ app/widgets/gimppreview.c | 109 ++++++------------------------ app/widgets/gimppreviewrenderer.c | 109 ++++++------------------------ app/widgets/gimpview.c | 109 ++++++------------------------ app/widgets/gimpviewrenderer.c | 109 ++++++------------------------ etc/gtkrc_user | 7 +- themes/Default/gtkrc | 1 + 10 files changed, 233 insertions(+), 353 deletions(-) create mode 100644 app/widgets/gimppreview-utils.c create mode 100644 app/widgets/gimppreview-utils.h diff --git a/ChangeLog b/ChangeLog index 579210a0c7..59d64fbac2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2002-03-22 Michael Natterer + + * app/widgets/Makefile.am + * app/widgets/gimppreview-utils.[ch]: new file containing + gimp_preview_type_from_viewable() so we don't need to include + *all* vieable and preview subclasses in gimppreview.c + + * app/widgets/gimppreview.c: gimp_preview_set_viewable: never + unset the drag source if the viewable is set to NULL (fixes dock + tabs, thanks to sjburges), also check the passed viweable's type. + + * themes/Default/gtkrc: set the paned handle_size to 6 pixels, so + it has the same size as the dock_separator. + + * etc/gtkrc_user: set both to 5 here, also fiddle around with + the global focus padding and the GtkOptionMenu indicator. + 2002-03-22 Sven Neumann * app/plug-in/plug-in-rc.c diff --git a/app/widgets/Makefile.am b/app/widgets/Makefile.am index 571fb1b2be..852d014820 100644 --- a/app/widgets/Makefile.am +++ b/app/widgets/Makefile.am @@ -127,6 +127,8 @@ libappwidgets_a_sources = @STRIP_BEGIN@ \ gimppatternpreview.h \ gimppreview.c \ gimppreview.h \ + gimppreview-utils.c \ + gimppreview-utils.h \ gimptoolbox.c \ gimptoolbox.h \ gimptoolbox-color-area.c \ diff --git a/app/widgets/gimppreview-utils.c b/app/widgets/gimppreview-utils.c new file mode 100644 index 0000000000..7eb208b608 --- /dev/null +++ b/app/widgets/gimppreview-utils.c @@ -0,0 +1,94 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimppreview-utils.c + * Copyright (C) 2001-2002 Michael Natterer + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "widgets-types.h" + +#include "core/gimpbrush.h" +#include "core/gimpbuffer.h" +#include "core/gimpdrawable.h" +#include "core/gimpgradient.h" +#include "core/gimpimage.h" +#include "core/gimpimagefile.h" +#include "core/gimppalette.h" +#include "core/gimppattern.h" +#include "core/gimptoolinfo.h" + +#include "gimpbrushpreview.h" +#include "gimpbufferpreview.h" +#include "gimpdrawablepreview.h" +#include "gimpgradientpreview.h" +#include "gimpimagepreview.h" +#include "gimpimagefilepreview.h" +#include "gimppalettepreview.h" +#include "gimppatternpreview.h" +#include "gimptoolinfopreview.h" + + +GType +gimp_preview_type_from_viewable (GimpViewable *viewable) +{ + GType type = GIMP_TYPE_PREVIEW; + + g_return_val_if_fail (GIMP_IS_VIEWABLE (viewable), G_TYPE_NONE); + + if (GIMP_IS_BRUSH (viewable)) + { + type = GIMP_TYPE_BRUSH_PREVIEW; + } + else if (GIMP_IS_DRAWABLE (viewable)) + { + type = GIMP_TYPE_DRAWABLE_PREVIEW; + } + else if (GIMP_IS_IMAGE (viewable)) + { + type = GIMP_TYPE_IMAGE_PREVIEW; + } + else if (GIMP_IS_PATTERN (viewable)) + { + type = GIMP_TYPE_PATTERN_PREVIEW; + } + else if (GIMP_IS_GRADIENT (viewable)) + { + type = GIMP_TYPE_GRADIENT_PREVIEW; + } + else if (GIMP_IS_PALETTE (viewable)) + { + type = GIMP_TYPE_PALETTE_PREVIEW; + } + else if (GIMP_IS_BUFFER (viewable)) + { + type = GIMP_TYPE_BUFFER_PREVIEW; + } + else if (GIMP_IS_TOOL_INFO (viewable)) + { + type = GIMP_TYPE_TOOL_INFO_PREVIEW; + } + else if (GIMP_IS_IMAGEFILE (viewable)) + { + type = GIMP_TYPE_IMAGEFILE_PREVIEW; + } + + return type; +} diff --git a/app/widgets/gimppreview-utils.h b/app/widgets/gimppreview-utils.h new file mode 100644 index 0000000000..e27f73fd78 --- /dev/null +++ b/app/widgets/gimppreview-utils.h @@ -0,0 +1,29 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimppreview.h + * Copyright (C) 2001 Michael Natterer + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __GIMP_PREVIEW_UTILS_H__ +#define __GIMP_PREVIEW_UTILS_H__ + + +GType gimp_preview_type_from_viewable (GimpViewable *viewable); + + +#endif /* __GIMP_PREVIEW_UTILS_H__ */ diff --git a/app/widgets/gimppreview.c b/app/widgets/gimppreview.c index 9f89c44ba0..539e8fd0ac 100644 --- a/app/widgets/gimppreview.c +++ b/app/widgets/gimppreview.c @@ -34,30 +34,14 @@ #include "base/temp-buf.h" -#include "core/gimpbrush.h" -#include "core/gimpbuffer.h" -#include "core/gimpdrawable.h" -#include "core/gimpgradient.h" -#include "core/gimpimage.h" -#include "core/gimpimagefile.h" #include "core/gimpmarshal.h" -#include "core/gimppalette.h" -#include "core/gimppattern.h" -#include "core/gimptoolinfo.h" +#include "core/gimpviewable.h" #include "display/gimpdisplayshell-render.h" -#include "gimpbrushpreview.h" -#include "gimpbufferpreview.h" #include "gimpdnd.h" -#include "gimpdrawablepreview.h" -#include "gimpgradientpreview.h" -#include "gimpimagepreview.h" -#include "gimpimagefilepreview.h" -#include "gimppalettepreview.h" -#include "gimppatternpreview.h" #include "gimppreview.h" -#include "gimptoolinfopreview.h" +#include "gimppreview-utils.h" #define PREVIEW_BYTES 3 @@ -350,7 +334,7 @@ gimp_preview_expose_event (GtkWidget *widget, extern gboolean gimp_debug_memsize; #endif -static gint +static gboolean gimp_preview_button_press_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -413,7 +397,7 @@ gimp_preview_button_press_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_button_release_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -461,7 +445,7 @@ gimp_preview_button_release_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -480,7 +464,7 @@ gimp_preview_enter_notify_event (GtkWidget *widget, return FALSE; } -static gint +static gboolean gimp_preview_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -499,51 +483,6 @@ gimp_preview_leave_notify_event (GtkWidget *widget, return FALSE; } -static GimpPreview * -gimp_preview_new_by_type (GimpViewable *viewable) -{ - GType type = GIMP_TYPE_PREVIEW; - - if (GIMP_IS_BRUSH (viewable)) - { - type = GIMP_TYPE_BRUSH_PREVIEW; - } - else if (GIMP_IS_DRAWABLE (viewable)) - { - type = GIMP_TYPE_DRAWABLE_PREVIEW; - } - else if (GIMP_IS_IMAGE (viewable)) - { - type = GIMP_TYPE_IMAGE_PREVIEW; - } - else if (GIMP_IS_PATTERN (viewable)) - { - type = GIMP_TYPE_PATTERN_PREVIEW; - } - else if (GIMP_IS_GRADIENT (viewable)) - { - type = GIMP_TYPE_GRADIENT_PREVIEW; - } - else if (GIMP_IS_PALETTE (viewable)) - { - type = GIMP_TYPE_PALETTE_PREVIEW; - } - else if (GIMP_IS_BUFFER (viewable)) - { - type = GIMP_TYPE_BUFFER_PREVIEW; - } - else if (GIMP_IS_TOOL_INFO (viewable)) - { - type = GIMP_TYPE_TOOL_INFO_PREVIEW; - } - else if (GIMP_IS_IMAGEFILE (viewable)) - { - type = GIMP_TYPE_IMAGEFILE_PREVIEW; - } - - return g_object_new (type, NULL); -} - /* public functions */ @@ -559,7 +498,7 @@ gimp_preview_new (GimpViewable *viewable, g_return_val_if_fail (size > 0 && size <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; @@ -586,7 +525,7 @@ gimp_preview_new_full (GimpViewable *viewable, g_return_val_if_fail (height > 0 && height <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; preview->clickable = clickable; @@ -605,16 +544,11 @@ gimp_preview_set_viewable (GimpPreview *preview, { g_return_if_fail (GIMP_IS_PREVIEW (preview)); g_return_if_fail (! viewable || GIMP_IS_VIEWABLE (viewable)); + g_return_if_fail (! viewable || (gimp_preview_type_from_viewable (viewable) == + G_TYPE_FROM_INSTANCE (preview))); if (preview->viewable) { - if (! preview->is_popup) - { - gtk_drag_source_unset (GTK_WIDGET (preview)); - gimp_dnd_viewable_source_unset (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable)); - } - g_object_remove_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); @@ -627,23 +561,22 @@ gimp_preview_set_viewable (GimpPreview *preview, preview); } + else if (viewable && ! preview->is_popup) + { + gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), + GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, + G_TYPE_FROM_INSTANCE (viewable), + GDK_ACTION_COPY); + gimp_dnd_viewable_source_set (GTK_WIDGET (preview), + G_TYPE_FROM_INSTANCE (viewable), + gimp_preview_drag_viewable, + NULL); + } preview->viewable = viewable; if (preview->viewable) { - if (! preview->is_popup) - { - gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), - GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, - G_TYPE_FROM_INSTANCE (preview->viewable), - GDK_ACTION_COPY); - gimp_dnd_viewable_source_set (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable), - gimp_preview_drag_viewable, - NULL); - } - g_object_add_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); diff --git a/app/widgets/gimppreviewrenderer.c b/app/widgets/gimppreviewrenderer.c index 9f89c44ba0..539e8fd0ac 100644 --- a/app/widgets/gimppreviewrenderer.c +++ b/app/widgets/gimppreviewrenderer.c @@ -34,30 +34,14 @@ #include "base/temp-buf.h" -#include "core/gimpbrush.h" -#include "core/gimpbuffer.h" -#include "core/gimpdrawable.h" -#include "core/gimpgradient.h" -#include "core/gimpimage.h" -#include "core/gimpimagefile.h" #include "core/gimpmarshal.h" -#include "core/gimppalette.h" -#include "core/gimppattern.h" -#include "core/gimptoolinfo.h" +#include "core/gimpviewable.h" #include "display/gimpdisplayshell-render.h" -#include "gimpbrushpreview.h" -#include "gimpbufferpreview.h" #include "gimpdnd.h" -#include "gimpdrawablepreview.h" -#include "gimpgradientpreview.h" -#include "gimpimagepreview.h" -#include "gimpimagefilepreview.h" -#include "gimppalettepreview.h" -#include "gimppatternpreview.h" #include "gimppreview.h" -#include "gimptoolinfopreview.h" +#include "gimppreview-utils.h" #define PREVIEW_BYTES 3 @@ -350,7 +334,7 @@ gimp_preview_expose_event (GtkWidget *widget, extern gboolean gimp_debug_memsize; #endif -static gint +static gboolean gimp_preview_button_press_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -413,7 +397,7 @@ gimp_preview_button_press_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_button_release_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -461,7 +445,7 @@ gimp_preview_button_release_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -480,7 +464,7 @@ gimp_preview_enter_notify_event (GtkWidget *widget, return FALSE; } -static gint +static gboolean gimp_preview_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -499,51 +483,6 @@ gimp_preview_leave_notify_event (GtkWidget *widget, return FALSE; } -static GimpPreview * -gimp_preview_new_by_type (GimpViewable *viewable) -{ - GType type = GIMP_TYPE_PREVIEW; - - if (GIMP_IS_BRUSH (viewable)) - { - type = GIMP_TYPE_BRUSH_PREVIEW; - } - else if (GIMP_IS_DRAWABLE (viewable)) - { - type = GIMP_TYPE_DRAWABLE_PREVIEW; - } - else if (GIMP_IS_IMAGE (viewable)) - { - type = GIMP_TYPE_IMAGE_PREVIEW; - } - else if (GIMP_IS_PATTERN (viewable)) - { - type = GIMP_TYPE_PATTERN_PREVIEW; - } - else if (GIMP_IS_GRADIENT (viewable)) - { - type = GIMP_TYPE_GRADIENT_PREVIEW; - } - else if (GIMP_IS_PALETTE (viewable)) - { - type = GIMP_TYPE_PALETTE_PREVIEW; - } - else if (GIMP_IS_BUFFER (viewable)) - { - type = GIMP_TYPE_BUFFER_PREVIEW; - } - else if (GIMP_IS_TOOL_INFO (viewable)) - { - type = GIMP_TYPE_TOOL_INFO_PREVIEW; - } - else if (GIMP_IS_IMAGEFILE (viewable)) - { - type = GIMP_TYPE_IMAGEFILE_PREVIEW; - } - - return g_object_new (type, NULL); -} - /* public functions */ @@ -559,7 +498,7 @@ gimp_preview_new (GimpViewable *viewable, g_return_val_if_fail (size > 0 && size <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; @@ -586,7 +525,7 @@ gimp_preview_new_full (GimpViewable *viewable, g_return_val_if_fail (height > 0 && height <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; preview->clickable = clickable; @@ -605,16 +544,11 @@ gimp_preview_set_viewable (GimpPreview *preview, { g_return_if_fail (GIMP_IS_PREVIEW (preview)); g_return_if_fail (! viewable || GIMP_IS_VIEWABLE (viewable)); + g_return_if_fail (! viewable || (gimp_preview_type_from_viewable (viewable) == + G_TYPE_FROM_INSTANCE (preview))); if (preview->viewable) { - if (! preview->is_popup) - { - gtk_drag_source_unset (GTK_WIDGET (preview)); - gimp_dnd_viewable_source_unset (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable)); - } - g_object_remove_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); @@ -627,23 +561,22 @@ gimp_preview_set_viewable (GimpPreview *preview, preview); } + else if (viewable && ! preview->is_popup) + { + gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), + GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, + G_TYPE_FROM_INSTANCE (viewable), + GDK_ACTION_COPY); + gimp_dnd_viewable_source_set (GTK_WIDGET (preview), + G_TYPE_FROM_INSTANCE (viewable), + gimp_preview_drag_viewable, + NULL); + } preview->viewable = viewable; if (preview->viewable) { - if (! preview->is_popup) - { - gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), - GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, - G_TYPE_FROM_INSTANCE (preview->viewable), - GDK_ACTION_COPY); - gimp_dnd_viewable_source_set (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable), - gimp_preview_drag_viewable, - NULL); - } - g_object_add_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); diff --git a/app/widgets/gimpview.c b/app/widgets/gimpview.c index 9f89c44ba0..539e8fd0ac 100644 --- a/app/widgets/gimpview.c +++ b/app/widgets/gimpview.c @@ -34,30 +34,14 @@ #include "base/temp-buf.h" -#include "core/gimpbrush.h" -#include "core/gimpbuffer.h" -#include "core/gimpdrawable.h" -#include "core/gimpgradient.h" -#include "core/gimpimage.h" -#include "core/gimpimagefile.h" #include "core/gimpmarshal.h" -#include "core/gimppalette.h" -#include "core/gimppattern.h" -#include "core/gimptoolinfo.h" +#include "core/gimpviewable.h" #include "display/gimpdisplayshell-render.h" -#include "gimpbrushpreview.h" -#include "gimpbufferpreview.h" #include "gimpdnd.h" -#include "gimpdrawablepreview.h" -#include "gimpgradientpreview.h" -#include "gimpimagepreview.h" -#include "gimpimagefilepreview.h" -#include "gimppalettepreview.h" -#include "gimppatternpreview.h" #include "gimppreview.h" -#include "gimptoolinfopreview.h" +#include "gimppreview-utils.h" #define PREVIEW_BYTES 3 @@ -350,7 +334,7 @@ gimp_preview_expose_event (GtkWidget *widget, extern gboolean gimp_debug_memsize; #endif -static gint +static gboolean gimp_preview_button_press_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -413,7 +397,7 @@ gimp_preview_button_press_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_button_release_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -461,7 +445,7 @@ gimp_preview_button_release_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -480,7 +464,7 @@ gimp_preview_enter_notify_event (GtkWidget *widget, return FALSE; } -static gint +static gboolean gimp_preview_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -499,51 +483,6 @@ gimp_preview_leave_notify_event (GtkWidget *widget, return FALSE; } -static GimpPreview * -gimp_preview_new_by_type (GimpViewable *viewable) -{ - GType type = GIMP_TYPE_PREVIEW; - - if (GIMP_IS_BRUSH (viewable)) - { - type = GIMP_TYPE_BRUSH_PREVIEW; - } - else if (GIMP_IS_DRAWABLE (viewable)) - { - type = GIMP_TYPE_DRAWABLE_PREVIEW; - } - else if (GIMP_IS_IMAGE (viewable)) - { - type = GIMP_TYPE_IMAGE_PREVIEW; - } - else if (GIMP_IS_PATTERN (viewable)) - { - type = GIMP_TYPE_PATTERN_PREVIEW; - } - else if (GIMP_IS_GRADIENT (viewable)) - { - type = GIMP_TYPE_GRADIENT_PREVIEW; - } - else if (GIMP_IS_PALETTE (viewable)) - { - type = GIMP_TYPE_PALETTE_PREVIEW; - } - else if (GIMP_IS_BUFFER (viewable)) - { - type = GIMP_TYPE_BUFFER_PREVIEW; - } - else if (GIMP_IS_TOOL_INFO (viewable)) - { - type = GIMP_TYPE_TOOL_INFO_PREVIEW; - } - else if (GIMP_IS_IMAGEFILE (viewable)) - { - type = GIMP_TYPE_IMAGEFILE_PREVIEW; - } - - return g_object_new (type, NULL); -} - /* public functions */ @@ -559,7 +498,7 @@ gimp_preview_new (GimpViewable *viewable, g_return_val_if_fail (size > 0 && size <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; @@ -586,7 +525,7 @@ gimp_preview_new_full (GimpViewable *viewable, g_return_val_if_fail (height > 0 && height <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; preview->clickable = clickable; @@ -605,16 +544,11 @@ gimp_preview_set_viewable (GimpPreview *preview, { g_return_if_fail (GIMP_IS_PREVIEW (preview)); g_return_if_fail (! viewable || GIMP_IS_VIEWABLE (viewable)); + g_return_if_fail (! viewable || (gimp_preview_type_from_viewable (viewable) == + G_TYPE_FROM_INSTANCE (preview))); if (preview->viewable) { - if (! preview->is_popup) - { - gtk_drag_source_unset (GTK_WIDGET (preview)); - gimp_dnd_viewable_source_unset (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable)); - } - g_object_remove_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); @@ -627,23 +561,22 @@ gimp_preview_set_viewable (GimpPreview *preview, preview); } + else if (viewable && ! preview->is_popup) + { + gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), + GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, + G_TYPE_FROM_INSTANCE (viewable), + GDK_ACTION_COPY); + gimp_dnd_viewable_source_set (GTK_WIDGET (preview), + G_TYPE_FROM_INSTANCE (viewable), + gimp_preview_drag_viewable, + NULL); + } preview->viewable = viewable; if (preview->viewable) { - if (! preview->is_popup) - { - gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), - GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, - G_TYPE_FROM_INSTANCE (preview->viewable), - GDK_ACTION_COPY); - gimp_dnd_viewable_source_set (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable), - gimp_preview_drag_viewable, - NULL); - } - g_object_add_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c index 9f89c44ba0..539e8fd0ac 100644 --- a/app/widgets/gimpviewrenderer.c +++ b/app/widgets/gimpviewrenderer.c @@ -34,30 +34,14 @@ #include "base/temp-buf.h" -#include "core/gimpbrush.h" -#include "core/gimpbuffer.h" -#include "core/gimpdrawable.h" -#include "core/gimpgradient.h" -#include "core/gimpimage.h" -#include "core/gimpimagefile.h" #include "core/gimpmarshal.h" -#include "core/gimppalette.h" -#include "core/gimppattern.h" -#include "core/gimptoolinfo.h" +#include "core/gimpviewable.h" #include "display/gimpdisplayshell-render.h" -#include "gimpbrushpreview.h" -#include "gimpbufferpreview.h" #include "gimpdnd.h" -#include "gimpdrawablepreview.h" -#include "gimpgradientpreview.h" -#include "gimpimagepreview.h" -#include "gimpimagefilepreview.h" -#include "gimppalettepreview.h" -#include "gimppatternpreview.h" #include "gimppreview.h" -#include "gimptoolinfopreview.h" +#include "gimppreview-utils.h" #define PREVIEW_BYTES 3 @@ -350,7 +334,7 @@ gimp_preview_expose_event (GtkWidget *widget, extern gboolean gimp_debug_memsize; #endif -static gint +static gboolean gimp_preview_button_press_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -413,7 +397,7 @@ gimp_preview_button_press_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_button_release_event (GtkWidget *widget, GdkEventButton *bevent) { @@ -461,7 +445,7 @@ gimp_preview_button_release_event (GtkWidget *widget, return TRUE; } -static gint +static gboolean gimp_preview_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -480,7 +464,7 @@ gimp_preview_enter_notify_event (GtkWidget *widget, return FALSE; } -static gint +static gboolean gimp_preview_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { @@ -499,51 +483,6 @@ gimp_preview_leave_notify_event (GtkWidget *widget, return FALSE; } -static GimpPreview * -gimp_preview_new_by_type (GimpViewable *viewable) -{ - GType type = GIMP_TYPE_PREVIEW; - - if (GIMP_IS_BRUSH (viewable)) - { - type = GIMP_TYPE_BRUSH_PREVIEW; - } - else if (GIMP_IS_DRAWABLE (viewable)) - { - type = GIMP_TYPE_DRAWABLE_PREVIEW; - } - else if (GIMP_IS_IMAGE (viewable)) - { - type = GIMP_TYPE_IMAGE_PREVIEW; - } - else if (GIMP_IS_PATTERN (viewable)) - { - type = GIMP_TYPE_PATTERN_PREVIEW; - } - else if (GIMP_IS_GRADIENT (viewable)) - { - type = GIMP_TYPE_GRADIENT_PREVIEW; - } - else if (GIMP_IS_PALETTE (viewable)) - { - type = GIMP_TYPE_PALETTE_PREVIEW; - } - else if (GIMP_IS_BUFFER (viewable)) - { - type = GIMP_TYPE_BUFFER_PREVIEW; - } - else if (GIMP_IS_TOOL_INFO (viewable)) - { - type = GIMP_TYPE_TOOL_INFO_PREVIEW; - } - else if (GIMP_IS_IMAGEFILE (viewable)) - { - type = GIMP_TYPE_IMAGEFILE_PREVIEW; - } - - return g_object_new (type, NULL); -} - /* public functions */ @@ -559,7 +498,7 @@ gimp_preview_new (GimpViewable *viewable, g_return_val_if_fail (size > 0 && size <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; @@ -586,7 +525,7 @@ gimp_preview_new_full (GimpViewable *viewable, g_return_val_if_fail (height > 0 && height <= 256, NULL); g_return_val_if_fail (border_width >= 0 && border_width <= 16, NULL); - preview = gimp_preview_new_by_type (viewable); + preview = g_object_new (gimp_preview_type_from_viewable (viewable), NULL); preview->is_popup = is_popup; preview->clickable = clickable; @@ -605,16 +544,11 @@ gimp_preview_set_viewable (GimpPreview *preview, { g_return_if_fail (GIMP_IS_PREVIEW (preview)); g_return_if_fail (! viewable || GIMP_IS_VIEWABLE (viewable)); + g_return_if_fail (! viewable || (gimp_preview_type_from_viewable (viewable) == + G_TYPE_FROM_INSTANCE (preview))); if (preview->viewable) { - if (! preview->is_popup) - { - gtk_drag_source_unset (GTK_WIDGET (preview)); - gimp_dnd_viewable_source_unset (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable)); - } - g_object_remove_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); @@ -627,23 +561,22 @@ gimp_preview_set_viewable (GimpPreview *preview, preview); } + else if (viewable && ! preview->is_popup) + { + gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), + GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, + G_TYPE_FROM_INSTANCE (viewable), + GDK_ACTION_COPY); + gimp_dnd_viewable_source_set (GTK_WIDGET (preview), + G_TYPE_FROM_INSTANCE (viewable), + gimp_preview_drag_viewable, + NULL); + } preview->viewable = viewable; if (preview->viewable) { - if (! preview->is_popup) - { - gimp_gtk_drag_source_set_by_type (GTK_WIDGET (preview), - GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, - G_TYPE_FROM_INSTANCE (preview->viewable), - GDK_ACTION_COPY); - gimp_dnd_viewable_source_set (GTK_WIDGET (preview), - G_TYPE_FROM_INSTANCE (preview->viewable), - gimp_preview_drag_viewable, - NULL); - } - g_object_add_weak_pointer (G_OBJECT (preview->viewable), (gpointer *) &preview->viewable); diff --git a/etc/gtkrc_user b/etc/gtkrc_user index 5c73dcbc54..789197b983 100644 --- a/etc/gtkrc_user +++ b/etc/gtkrc_user @@ -17,7 +17,12 @@ style "gimp-small-style" { - GimpDock::separator_height = 6 + GtkWidget::focus_padding = 0 + GtkOptionMenu::indicator_size = { 4, 7 } + GtkOptionMenu::indicator_spacing = { 4, 3, 1, 1 } + + GtkPaned::handle_size = 5 + GimpDock::separator_height = 5 GimpImageDock::minimal_width = 200 GimpToolbox::tool_icon_size = menu GimpDockbook::tab_border = 0 diff --git a/themes/Default/gtkrc b/themes/Default/gtkrc index 399ce74d59..a22198f228 100644 --- a/themes/Default/gtkrc +++ b/themes/Default/gtkrc @@ -67,6 +67,7 @@ style "gimp-default-style" { "images/gimp-dialog-warning.png", *, *, "gtk-dialog" } } + GtkPaned::handle_size = 6 GimpDock::separator_height = 6 GimpImageDock::minimal_width = 250 GimpToolbox::tool_icon_size = button