2006-12-10 05:33:38 +08:00
|
|
|
/* GIMP - The GNU Image Manipulation Program
|
2001-04-07 22:44:12 +08:00
|
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
|
|
*
|
|
|
|
* gimpdockable.h
|
2003-10-11 05:24:12 +08:00
|
|
|
* Copyright (C) 2001-2003 Michael Natterer <mitch@gimp.org>
|
2001-04-07 22:44:12 +08:00
|
|
|
*
|
2009-01-18 06:28:01 +08:00
|
|
|
* This program is free software: you can redistribute it and/or modify
|
2001-04-07 22:44:12 +08:00
|
|
|
* it under the terms of the GNU General Public License as published by
|
2009-01-18 06:28:01 +08:00
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
2001-04-07 22:44:12 +08:00
|
|
|
* (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
|
2009-01-18 06:28:01 +08:00
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2001-04-07 22:44:12 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __GIMP_DOCKABLE_H__
|
|
|
|
#define __GIMP_DOCKABLE_H__
|
|
|
|
|
|
|
|
|
2005-12-30 09:37:35 +08:00
|
|
|
#define GIMP_DOCKABLE_DRAG_OFFSET (-6)
|
|
|
|
|
|
|
|
|
2001-04-07 22:44:12 +08:00
|
|
|
#define GIMP_TYPE_DOCKABLE (gimp_dockable_get_type ())
|
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
2001-07-24 Michael Natterer <mitch@gimp.org>
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
* configure.in: require glib/gtk+ >= 1.3.7, commented out the
gtkxmhtml stuff.
From now on, you will need glib, pango, atk and gtk+ HEAD from CVS
to hack or use GIMP HEAD.
Beware, it crashes randomly :)
* app/core/Makefile.am
* app/core/gimpmarshal.list: new file plus rules to generate
gimpmarshal.[ch] from it.
* app/core/*
* app/tools/*
* app/widgets/*
* libgimpwidgets/*: started to use the glib object system. All
core/ objects are still gtk objects however. All signals are
created using g_signal_new(). There are many gtk+ artefacts left.
Finally, we will _not_ use the gtk_signal_foo() wrappers and
friends any more.
* app/colormaps.c
* app/devices.[ch]
* app/disp_callbacks.c
* app/errorconsole.c
* app/file-save.[ch]
* app/interface.c
* app/module_db.c
* app/nav_window.c
* app/ops_buttons.c
* app/scroll.c
* app/user_install.c
* app/gui/about-dialog.c
* app/gui/brush-editor.c
* app/gui/brushes-commands.c
* app/gui/color-notebook.c
* app/gui/colormap-dialog.c
* app/gui/dialogs-commands.c
* app/gui/dialogs-constructors.c
* app/gui/file-commands.c
* app/gui/file-dialog-utils.c
* app/gui/file-new-dialog.c
* app/gui/file-open-dialog.[ch]
* app/gui/file-save-dialog.c
* app/gui/gradient-editor.c
* app/gui/gradients-commands.c
* app/gui/image-commands.c
* app/gui/info-dialog.[ch]
* app/gui/layer-select.c
* app/gui/layers-commands.c
* app/gui/menus.c
* app/gui/offset-dialog.c
* app/gui/palette-editor.c
* app/gui/palettes-commands.c
* app/gui/patterns-commands.c
* app/gui/preferences-dialog.c
* app/gui/resize-dialog.[ch]
* app/gui/splash.c
* app/gui/tips-dialog.c
* app/gui/tool-options-dialog.c
* app/gui/toolbox.c
* app/gui/tools-commands.c
* libgimp/gimpbrushmenu.c
* libgimp/gimpmenu.c
* libgimp/gimppatternmenu.c
* libgimp/gimpui.c
* libgimpbase/gimpenv.c: tons and tons of changes like "const
gchar*", switch from GdkDeviceInfo to GdkDevice (very incomplete
and currently disables), lots of s/gtk_signal/g_signal/,
removal/replacement of deprecated stuff,
s/GtkSignalFunc/GCallback/ and lots of small changes and fixes
while I was on it, zillions of warnings left...
* modules/Makefile.am: disabled the water color selector
temporarily (XInput issues).
* plug-ins/Makefile.am
* plug-ins/common/.cvsignore
* plug-ins/common/Makefile.am
* plug-ins/common/plugin-defs.pl: simply excluded all plug-ins
which did not build (including Script-Fu). They are trivial to
fix.
2001-07-25 05:27:11 +08:00
|
|
|
#define GIMP_DOCKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DOCKABLE, GimpDockable))
|
|
|
|
#define GIMP_DOCKABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DOCKABLE, GimpDockableClass))
|
|
|
|
#define GIMP_IS_DOCKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DOCKABLE))
|
|
|
|
#define GIMP_IS_DOCKABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DOCKABLE))
|
|
|
|
#define GIMP_DOCKABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_DOCKABLE, GimpDockableClass))
|
2001-04-07 22:44:12 +08:00
|
|
|
|
|
|
|
|
2001-04-16 00:16:13 +08:00
|
|
|
typedef struct _GimpDockableClass GimpDockableClass;
|
2001-04-07 22:44:12 +08:00
|
|
|
|
2009-09-06 05:50:01 +08:00
|
|
|
/**
|
2009-10-11 04:00:20 +08:00
|
|
|
* GimpDockable:
|
|
|
|
*
|
2009-09-06 05:50:01 +08:00
|
|
|
* A kind of adpater to make other widgets dockable. The widget to
|
|
|
|
* dock is put inside the GimpDockable, which is put in a
|
|
|
|
* GimpDockbook.
|
|
|
|
*/
|
2001-04-07 22:44:12 +08:00
|
|
|
struct _GimpDockable
|
|
|
|
{
|
2003-04-12 00:51:49 +08:00
|
|
|
GtkBin parent_instance;
|
2001-04-11 00:03:40 +08:00
|
|
|
|
|
|
|
gchar *name;
|
2003-07-08 23:07:56 +08:00
|
|
|
gchar *blurb;
|
2002-05-10 22:50:27 +08:00
|
|
|
gchar *stock_id;
|
2003-08-25 22:18:33 +08:00
|
|
|
gchar *help_id;
|
2003-07-08 23:07:56 +08:00
|
|
|
GimpTabStyle tab_style;
|
2008-05-20 05:11:03 +08:00
|
|
|
gboolean locked;
|
2001-04-07 22:44:12 +08:00
|
|
|
|
2001-04-11 00:03:40 +08:00
|
|
|
GimpDockbook *dockbook;
|
|
|
|
|
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
2001-07-24 Michael Natterer <mitch@gimp.org>
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
* configure.in: require glib/gtk+ >= 1.3.7, commented out the
gtkxmhtml stuff.
From now on, you will need glib, pango, atk and gtk+ HEAD from CVS
to hack or use GIMP HEAD.
Beware, it crashes randomly :)
* app/core/Makefile.am
* app/core/gimpmarshal.list: new file plus rules to generate
gimpmarshal.[ch] from it.
* app/core/*
* app/tools/*
* app/widgets/*
* libgimpwidgets/*: started to use the glib object system. All
core/ objects are still gtk objects however. All signals are
created using g_signal_new(). There are many gtk+ artefacts left.
Finally, we will _not_ use the gtk_signal_foo() wrappers and
friends any more.
* app/colormaps.c
* app/devices.[ch]
* app/disp_callbacks.c
* app/errorconsole.c
* app/file-save.[ch]
* app/interface.c
* app/module_db.c
* app/nav_window.c
* app/ops_buttons.c
* app/scroll.c
* app/user_install.c
* app/gui/about-dialog.c
* app/gui/brush-editor.c
* app/gui/brushes-commands.c
* app/gui/color-notebook.c
* app/gui/colormap-dialog.c
* app/gui/dialogs-commands.c
* app/gui/dialogs-constructors.c
* app/gui/file-commands.c
* app/gui/file-dialog-utils.c
* app/gui/file-new-dialog.c
* app/gui/file-open-dialog.[ch]
* app/gui/file-save-dialog.c
* app/gui/gradient-editor.c
* app/gui/gradients-commands.c
* app/gui/image-commands.c
* app/gui/info-dialog.[ch]
* app/gui/layer-select.c
* app/gui/layers-commands.c
* app/gui/menus.c
* app/gui/offset-dialog.c
* app/gui/palette-editor.c
* app/gui/palettes-commands.c
* app/gui/patterns-commands.c
* app/gui/preferences-dialog.c
* app/gui/resize-dialog.[ch]
* app/gui/splash.c
* app/gui/tips-dialog.c
* app/gui/tool-options-dialog.c
* app/gui/toolbox.c
* app/gui/tools-commands.c
* libgimp/gimpbrushmenu.c
* libgimp/gimpmenu.c
* libgimp/gimppatternmenu.c
* libgimp/gimpui.c
* libgimpbase/gimpenv.c: tons and tons of changes like "const
gchar*", switch from GdkDeviceInfo to GdkDevice (very incomplete
and currently disables), lots of s/gtk_signal/g_signal/,
removal/replacement of deprecated stuff,
s/GtkSignalFunc/GCallback/ and lots of small changes and fixes
while I was on it, zillions of warnings left...
* modules/Makefile.am: disabled the water color selector
temporarily (XInput issues).
* plug-ins/Makefile.am
* plug-ins/common/.cvsignore
* plug-ins/common/Makefile.am
* plug-ins/common/plugin-defs.pl: simply excluded all plug-ins
which did not build (including Script-Fu). They are trivial to
fix.
2001-07-25 05:27:11 +08:00
|
|
|
GimpContext *context;
|
|
|
|
|
2003-09-24 02:11:09 +08:00
|
|
|
PangoLayout *title_layout;
|
2003-10-06 01:26:21 +08:00
|
|
|
GdkWindow *title_window;
|
2003-09-22 03:35:54 +08:00
|
|
|
GtkWidget *menu_button;
|
2005-01-18 23:18:35 +08:00
|
|
|
|
|
|
|
guint blink_timeout_id;
|
|
|
|
gint blink_counter;
|
2005-12-29 11:12:26 +08:00
|
|
|
|
app: Use a GdkWindow instead of GimpDockSeparators for dockable DND
Make drag-and-drop rearrangement of dockables happen directly in the
existing widget hierarchy so we don't have to use special, ugly
widgets (read GimpDockSeparator:s) for that.
More specifically, make edges of dockables and dockbooks have the same
semantics as the GimpDockSeparators had. We put a highlight colored
GdkWindow on top of the widget in question to highlight these special
drop areas. This GdkWindow is not taken into consideration in the GTK+
drag-and-drop code, so it does not interupt the DND interaction.
To achive this, there is a problem we must solve: Drag events in GTK+
are propagated inwards and out, but we sometimes want ancenstor
widgets to take care of drop events. We solve this by introducing the
concept of "drag handlers". A drag handler is asked if it will handle
a given drag event, and if it will, a client will let the drag event
be propagated upwards in the widget hierarchy. Right now, the
GimpPanedBox is the only "drag handler". The code could be generalized
more but it doesn't feel worth it at this point.
The size of the special drop area is 5px, the same size as the default
GtkPaned handles. This is because the plan is to later use these
handles as drop areas too.
Other changes of interest are:
* We need to take care of "drag-motion", "drag-drop" and widget
highlightning ourselves. We can not use the GtkDestDefaults
conveniences with gtk_drag_dest_set() any longer since we need more
control.
* Make the drop callback pass the insert index directly instead of a
GimpDockSeparator
* Add some GIMP_LOG() debug output for DND
* Disable the GimpDockSeparator code in GimpToolbox
2009-11-30 01:22:12 +08:00
|
|
|
GimpPanedBox *drag_handler;
|
|
|
|
|
2005-12-29 12:45:41 +08:00
|
|
|
/* drag icon hotspot */
|
|
|
|
gint drag_x;
|
|
|
|
gint drag_y;
|
2001-04-07 22:44:12 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _GimpDockableClass
|
|
|
|
{
|
2003-04-12 00:51:49 +08:00
|
|
|
GtkBinClass parent_class;
|
2001-04-07 22:44:12 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
app: Use a GdkWindow instead of GimpDockSeparators for dockable DND
Make drag-and-drop rearrangement of dockables happen directly in the
existing widget hierarchy so we don't have to use special, ugly
widgets (read GimpDockSeparator:s) for that.
More specifically, make edges of dockables and dockbooks have the same
semantics as the GimpDockSeparators had. We put a highlight colored
GdkWindow on top of the widget in question to highlight these special
drop areas. This GdkWindow is not taken into consideration in the GTK+
drag-and-drop code, so it does not interupt the DND interaction.
To achive this, there is a problem we must solve: Drag events in GTK+
are propagated inwards and out, but we sometimes want ancenstor
widgets to take care of drop events. We solve this by introducing the
concept of "drag handlers". A drag handler is asked if it will handle
a given drag event, and if it will, a client will let the drag event
be propagated upwards in the widget hierarchy. Right now, the
GimpPanedBox is the only "drag handler". The code could be generalized
more but it doesn't feel worth it at this point.
The size of the special drop area is 5px, the same size as the default
GtkPaned handles. This is because the plan is to later use these
handles as drop areas too.
Other changes of interest are:
* We need to take care of "drag-motion", "drag-drop" and widget
highlightning ourselves. We can not use the GtkDestDefaults
conveniences with gtk_drag_dest_set() any longer since we need more
control.
* Make the drop callback pass the insert index directly instead of a
GimpDockSeparator
* Add some GIMP_LOG() debug output for DND
* Disable the GimpDockSeparator code in GimpToolbox
2009-11-30 01:22:12 +08:00
|
|
|
GType gimp_dockable_get_type (void) G_GNUC_CONST;
|
|
|
|
|
|
|
|
GtkWidget * gimp_dockable_new (const gchar *name,
|
|
|
|
const gchar *blurb,
|
|
|
|
const gchar *stock_id,
|
|
|
|
const gchar *help_id);
|
|
|
|
|
|
|
|
void gimp_dockable_set_aux_info (GimpDockable *dockable,
|
|
|
|
GList *aux_info);
|
|
|
|
GList * gimp_dockable_get_aux_info (GimpDockable *dockable);
|
|
|
|
|
|
|
|
void gimp_dockable_set_locked (GimpDockable *dockable,
|
|
|
|
gboolean lock);
|
|
|
|
gboolean gimp_dockable_is_locked (GimpDockable *dockable);
|
|
|
|
|
|
|
|
void gimp_dockable_set_tab_style (GimpDockable *dockable,
|
|
|
|
GimpTabStyle tab_style);
|
|
|
|
GtkWidget * gimp_dockable_get_tab_widget (GimpDockable *dockable,
|
|
|
|
GimpContext *context,
|
|
|
|
GimpTabStyle tab_style,
|
|
|
|
GtkIconSize size);
|
|
|
|
GtkWidget * gimp_dockable_get_drag_widget (GimpDockable *dockable);
|
|
|
|
void gimp_dockable_set_context (GimpDockable *dockable,
|
|
|
|
GimpContext *context);
|
|
|
|
GimpUIManager * gimp_dockable_get_menu (GimpDockable *dockable,
|
|
|
|
const gchar **ui_path,
|
|
|
|
gpointer *popup_data);
|
|
|
|
void gimp_dockable_set_drag_handler (GimpDockable *dockable,
|
|
|
|
GimpPanedBox *drag_handler);
|
|
|
|
|
|
|
|
void gimp_dockable_detach (GimpDockable *dockable);
|
|
|
|
|
|
|
|
void gimp_dockable_blink (GimpDockable *dockable);
|
|
|
|
void gimp_dockable_blink_cancel (GimpDockable *dockable);
|
2005-01-18 23:18:35 +08:00
|
|
|
|
2001-04-07 22:44:12 +08:00
|
|
|
|
|
|
|
#endif /* __GIMP_DOCKABLE_H__ */
|