gimptool.h 16.1 KB
Newer Older
1
/* GIMP - The GNU Image Manipulation Program
Nate Summers's avatar
Nate Summers committed
2
 * Copyright (C) 1995-2002 Spencer Kimball, Peter Mattis, and others
Elliot Lee's avatar
Elliot Lee committed
3
 *
4
 * This program is free software: you can redistribute it and/or modify
Elliot Lee's avatar
Elliot Lee committed
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 3 of the License, or
Elliot Lee's avatar
Elliot Lee committed
7 8 9 10 11 12 13 14
 * (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
15
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Elliot Lee's avatar
Elliot Lee committed
16
 */
Sven Neumann's avatar
Sven Neumann committed
17

18 19
#ifndef __GIMP_TOOL_H__
#define __GIMP_TOOL_H__
Elliot Lee's avatar
Elliot Lee committed
20

21

22
#include "core/gimpobject.h"
23 24


25
#define GIMP_TYPE_TOOL            (gimp_tool_get_type ())
26 27 28 29 30
#define GIMP_TOOL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_TOOL, GimpTool))
#define GIMP_TOOL_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_TOOL, GimpToolClass))
#define GIMP_IS_TOOL(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_TOOL))
#define GIMP_IS_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_TOOL))
#define GIMP_TOOL_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_TOOL, GimpToolClass))
31

32 33
#define GIMP_TOOL_GET_OPTIONS(t)  (gimp_tool_get_options (GIMP_TOOL (t)))

34 35

typedef struct _GimpToolClass GimpToolClass;
36

37
struct _GimpTool
Elliot Lee's avatar
Elliot Lee committed
38
{
39
  GimpObject       parent_instance;
40

41
  GimpToolInfo    *tool_info;
Michael Natterer's avatar
Michael Natterer committed
42

43
  gchar           *label;
44 45 46 47
  gchar           *undo_desc;
  gchar           *icon_name;
  gchar           *help_id;

48
  gint             ID;          /*  unique tool ID                         */
49

50
  GimpToolControl *control;
Nate Summers's avatar
Nate Summers committed
51

52 53
  GimpDisplay     *display;     /*  pointer to currently active display    */
  GimpDrawable    *drawable;    /*  pointer to the tool's current drawable */
Sven Neumann's avatar
Sven Neumann committed
54

55 56
  /*  private state of gimp_tool_set_focus_display() and
   *  gimp_tool_set_[active_]modifier_state()
57 58 59
   */
  GimpDisplay     *focus_display;
  GdkModifierType  modifier_state;
60 61
  GdkModifierType  button_press_state;
  GdkModifierType  active_modifier_state;
62

63 64
  /*  private state for click detection
   */
65
  gboolean         in_click_distance;
66
  gboolean         got_motion_event;
67 68
  GimpCoords       button_press_coords;
  guint32          button_press_time;
69 70 71 72

  /*  private list of displays which have a status message from this tool
   */
  GList           *status_displays;
73 74 75 76

  /*  on-canvas progress  */
  GimpCanvasItem  *progress;
  GimpDisplay     *progress_display;
77
  GtkWidget       *progress_grab_widget;
Elliot Lee's avatar
Elliot Lee committed
78 79
};

80
struct _GimpToolClass
Elliot Lee's avatar
Elliot Lee committed
81
{
82 83
  GimpObjectClass  parent_class;

84 85
  /*  virtual functions  */

86 87 88 89 90 91 92 93 94 95 96 97 98
  gboolean        (* has_display)         (GimpTool              *tool,
                                           GimpDisplay           *display);
  GimpDisplay   * (* has_image)           (GimpTool              *tool,
                                           GimpImage             *image);

  gboolean        (* initialize)          (GimpTool              *tool,
                                           GimpDisplay           *display,
                                           GError               **error);
  void            (* control)             (GimpTool              *tool,
                                           GimpToolAction         action,
                                           GimpDisplay           *display);

  void            (* button_press)        (GimpTool              *tool,
99
                                           const GimpCoords      *coords,
100 101
                                           guint32                time,
                                           GdkModifierType        state,
102
                                           GimpButtonPressType    press_type,
103 104
                                           GimpDisplay           *display);
  void            (* button_release)      (GimpTool              *tool,
105
                                           const GimpCoords      *coords,
106 107 108 109 110
                                           guint32                time,
                                           GdkModifierType        state,
                                           GimpButtonReleaseType  release_type,
                                           GimpDisplay           *display);
  void            (* motion)              (GimpTool              *tool,
111
                                           const GimpCoords      *coords,
112 113 114 115 116 117 118
                                           guint32                time,
                                           GdkModifierType        state,
                                           GimpDisplay           *display);

  gboolean        (* key_press)           (GimpTool              *tool,
                                           GdkEventKey           *kevent,
                                           GimpDisplay           *display);
119 120 121
  gboolean        (* key_release)         (GimpTool              *tool,
                                           GdkEventKey           *kevent,
                                           GimpDisplay           *display);
122 123 124 125 126 127 128 129 130 131 132 133
  void            (* modifier_key)        (GimpTool              *tool,
                                           GdkModifierType        key,
                                           gboolean               press,
                                           GdkModifierType        state,
                                           GimpDisplay           *display);
  void            (* active_modifier_key) (GimpTool              *tool,
                                           GdkModifierType        key,
                                           gboolean               press,
                                           GdkModifierType        state,
                                           GimpDisplay           *display);

  void            (* oper_update)         (GimpTool              *tool,
134
                                           const GimpCoords      *coords,
135 136 137 138
                                           GdkModifierType        state,
                                           gboolean               proximity,
                                           GimpDisplay           *display);
  void            (* cursor_update)       (GimpTool              *tool,
139
                                           const GimpCoords      *coords,
140 141 142
                                           GdkModifierType        state,
                                           GimpDisplay           *display);

143
  const gchar   * (* can_undo)            (GimpTool              *tool,
144
                                           GimpDisplay           *display);
145
  const gchar   * (* can_redo)            (GimpTool              *tool,
146 147 148 149 150 151
                                           GimpDisplay           *display);
  gboolean        (* undo)                (GimpTool              *tool,
                                           GimpDisplay           *display);
  gboolean        (* redo)                (GimpTool              *tool,
                                           GimpDisplay           *display);

152
  GimpUIManager * (* get_popup)           (GimpTool              *tool,
153
                                           const GimpCoords      *coords,
154 155 156
                                           GdkModifierType        state,
                                           GimpDisplay           *display,
                                           const gchar          **ui_path);
157 158 159 160

  void            (* options_notify)      (GimpTool              *tool,
                                           GimpToolOptions       *options,
                                           const GParamSpec      *pspec);
161
};
162 163


164 165 166 167
GType             gimp_tool_get_type            (void) G_GNUC_CONST;

GimpToolOptions * gimp_tool_get_options         (GimpTool            *tool);

168 169 170 171
void              gimp_tool_set_label           (GimpTool            *tool,
                                                 const gchar         *label);
const gchar     * gimp_tool_get_label           (GimpTool            *tool);

172 173 174 175 176 177 178 179 180 181 182 183
void              gimp_tool_set_undo_desc       (GimpTool            *tool,
                                                 const gchar         *undo_desc);
const gchar     * gimp_tool_get_undo_desc       (GimpTool            *tool);

void              gimp_tool_set_icon_name       (GimpTool            *tool,
                                                 const gchar         *icon_name);
const gchar     * gimp_tool_get_icon_name       (GimpTool            *tool);

void              gimp_tool_set_help_id         (GimpTool            *tool,
                                                 const gchar         *help_id);
const gchar     * gimp_tool_get_help_id         (GimpTool            *tool);

184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
gboolean          gimp_tool_has_display         (GimpTool            *tool,
                                                 GimpDisplay         *display);
GimpDisplay     * gimp_tool_has_image           (GimpTool            *tool,
                                                 GimpImage           *image);

gboolean          gimp_tool_initialize          (GimpTool            *tool,
                                                 GimpDisplay         *display);
void              gimp_tool_control             (GimpTool            *tool,
                                                 GimpToolAction       action,
                                                 GimpDisplay         *display);

void              gimp_tool_button_press        (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 guint32              time,
                                                 GdkModifierType      state,
                                                 GimpButtonPressType  press_type,
                                                 GimpDisplay         *display);
void              gimp_tool_button_release      (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 guint32              time,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display);
void              gimp_tool_motion              (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 guint32              time,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display);

gboolean          gimp_tool_key_press           (GimpTool            *tool,
                                                 GdkEventKey         *kevent,
                                                 GimpDisplay         *display);
gboolean          gimp_tool_key_release         (GimpTool            *tool,
                                                 GdkEventKey         *kevent,
                                                 GimpDisplay         *display);

void              gimp_tool_set_focus_display   (GimpTool            *tool,
                                                 GimpDisplay         *display);
void              gimp_tool_set_modifier_state  (GimpTool            *tool,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display);
void        gimp_tool_set_active_modifier_state (GimpTool            *tool,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display);

void              gimp_tool_oper_update         (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 GdkModifierType      state,
                                                 gboolean             proximity,
                                                 GimpDisplay         *display);
void              gimp_tool_cursor_update       (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display);

238
const gchar     * gimp_tool_can_undo            (GimpTool            *tool,
239
                                                 GimpDisplay         *display);
240
const gchar     * gimp_tool_can_redo            (GimpTool            *tool,
241 242 243 244 245 246
                                                 GimpDisplay         *display);
gboolean          gimp_tool_undo                (GimpTool            *tool,
                                                 GimpDisplay         *display);
gboolean          gimp_tool_redo                (GimpTool            *tool,
                                                 GimpDisplay         *display);

247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
GimpUIManager   * gimp_tool_get_popup           (GimpTool            *tool,
                                                 const GimpCoords    *coords,
                                                 GdkModifierType      state,
                                                 GimpDisplay         *display,
                                                 const gchar        **ui_path);

void              gimp_tool_push_status         (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 const gchar         *format,
                                                 ...) G_GNUC_PRINTF(3,4);
void              gimp_tool_push_status_coords  (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 GimpCursorPrecision  precision,
                                                 const gchar         *title,
                                                 gdouble              x,
                                                 const gchar         *separator,
                                                 gdouble              y,
                                                 const gchar         *help);
void              gimp_tool_push_status_length  (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 const gchar         *title,
                                                 GimpOrientationType  axis,
                                                 gdouble              value,
                                                 const gchar         *help);
void              gimp_tool_replace_status      (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 const gchar         *format,
                                                 ...) G_GNUC_PRINTF(3,4);
void              gimp_tool_pop_status          (GimpTool            *tool,
                                                 GimpDisplay         *display);

void              gimp_tool_message             (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 const gchar         *format,
                                                 ...) G_GNUC_PRINTF(3,4);
void              gimp_tool_message_literal     (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 const gchar         *message);

void              gimp_tool_set_cursor          (GimpTool            *tool,
                                                 GimpDisplay         *display,
                                                 GimpCursorType       cursor,
                                                 GimpToolCursorType   tool_cursor,
                                                 GimpCursorModifier   modifier);
291 292 293


#endif  /*  __GIMP_TOOL_H__  */