view-commands.c 7.42 KB
Newer Older
Michael Natterer's avatar
Michael Natterer committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* The GIMP -- an 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 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 <gtk/gtk.h>

#include "libgimpwidgets/gimpwidgets.h"

25
#include "gui-types.h"
Michael Natterer's avatar
Michael Natterer committed
26

27
28
#include "core/gimp.h"
#include "core/gimpcontext.h"
Michael Natterer's avatar
Michael Natterer committed
29
30
#include "core/gimpimage.h"

31
#include "display/gimpdisplay.h"
32
#include "display/gimpdisplay-foreach.h"
Michael Natterer's avatar
Michael Natterer committed
33
#include "display/gimpdisplayshell.h"
34
#include "display/gimpdisplayshell-scale.h"
35
#include "display/gimpdisplayshell-selection.h"
36

37
38
39
#include "widgets/gimpdialogfactory.h"

#include "dialogs.h"
Michael Natterer's avatar
Michael Natterer committed
40
41
42
43
44
45
46
47
#include "info-dialog.h"
#include "info-window.h"
#include "view-commands.h"

#include "gimprc.h"
#include "nav_window.h"


Michael Natterer's avatar
Michael Natterer committed
48
49
50
51
#define return_if_no_display(gdisp, data) \
  gdisp = gimp_context_get_display (gimp_get_user_context (GIMP (data))); \
  if (! gdisp) \
    return
Michael Natterer's avatar
Michael Natterer committed
52
53
54


void
55
56
view_zoom_in_cmd_callback (GtkWidget *widget,
                           gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
57
{
58
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
59
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
60

Michael Natterer's avatar
Michael Natterer committed
61
  gimp_display_shell_scale (GIMP_DISPLAY_SHELL (gdisp->shell), GIMP_ZOOM_IN);
Michael Natterer's avatar
Michael Natterer committed
62
63
64
}

void
65
66
view_zoom_out_cmd_callback (GtkWidget *widget,
                            gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
67
{
68
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
69
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
70

Michael Natterer's avatar
Michael Natterer committed
71
  gimp_display_shell_scale (GIMP_DISPLAY_SHELL (gdisp->shell), GIMP_ZOOM_OUT);
Michael Natterer's avatar
Michael Natterer committed
72
73
}

74
75
76
77
78
79
80
81
82
83
void
view_zoom_fit_cmd_callback (GtkWidget *widget,
                            gpointer   data)
{
  GimpDisplay *gdisp;
  return_if_no_display (gdisp, data);

  gimp_display_shell_scale_fit (GIMP_DISPLAY_SHELL (gdisp->shell));
}

Michael Natterer's avatar
Michael Natterer committed
84
85
86
87
88
void
view_zoom_cmd_callback (GtkWidget *widget,
			gpointer   data,
			guint      action)
{
89
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
90
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
91

Michael Natterer's avatar
Michael Natterer committed
92
  gimp_display_shell_scale (GIMP_DISPLAY_SHELL (gdisp->shell), action);
Michael Natterer's avatar
Michael Natterer committed
93
94
95
96
97
98
}

void
view_dot_for_dot_cmd_callback (GtkWidget *widget,
			       gpointer   data)
{
99
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
100
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
101

Michael Natterer's avatar
Michael Natterer committed
102
103
  gimp_display_shell_scale_set_dot_for_dot (GIMP_DISPLAY_SHELL (gdisp->shell),
                                            GTK_CHECK_MENU_ITEM (widget)->active);
Michael Natterer's avatar
Michael Natterer committed
104
105
106
107
108
109
}

void
view_info_window_cmd_callback (GtkWidget *widget,
			       gpointer   data)
{
Michael Natterer's avatar
Michael Natterer committed
110
111
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
112
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
113

Michael Natterer's avatar
Michael Natterer committed
114
115
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
116
117
  if (! gimprc.info_window_follows_mouse)
    {
Michael Natterer's avatar
Michael Natterer committed
118
119
      if (! shell->info_dialog)
	shell->info_dialog = info_window_create (gdisp);
Michael Natterer's avatar
Michael Natterer committed
120

Michael Natterer's avatar
Michael Natterer committed
121
      info_dialog_popup (shell->info_dialog);
Michael Natterer's avatar
Michael Natterer committed
122
123
124
    }
  else
    {
Michael Natterer's avatar
Michael Natterer committed
125
      info_window_follow_auto (gdisp->gimage->gimp);
Michael Natterer's avatar
Michael Natterer committed
126
127
128
129
    }
}

void
130
131
view_navigation_window_cmd_callback (GtkWidget *widget,
                                     gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
132
{
Michael Natterer's avatar
Michael Natterer committed
133
134
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
135
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
136

Michael Natterer's avatar
Michael Natterer committed
137
138
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
139
140
  if (gimprc.nav_window_per_display)
    {
Michael Natterer's avatar
Michael Natterer committed
141
      if (! shell->nav_dialog)
Michael Natterer's avatar
Michael Natterer committed
142
	shell->nav_dialog = nav_dialog_create (shell);
Michael Natterer's avatar
Michael Natterer committed
143

Michael Natterer's avatar
Michael Natterer committed
144
      nav_dialog_show (shell->nav_dialog);
Michael Natterer's avatar
Michael Natterer committed
145
146
147
    }
  else
    {
Michael Natterer's avatar
Michael Natterer committed
148
      nav_dialog_show_auto (gdisp->gimage->gimp);
Michael Natterer's avatar
Michael Natterer committed
149
150
151
    }
}

152
153
154
155
156
157
158
159
160
161
162
void
view_display_filters_cmd_callback (GtkWidget *widget,
                                   gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  gimp_dialog_factory_dialog_new (global_dialog_factory,
163
                                  "gimp-display-filters-dialog", -1);
164
165
}

Michael Natterer's avatar
Michael Natterer committed
166
167
168
169
void
view_toggle_selection_cmd_callback (GtkWidget *widget,
				    gpointer   data)
{
170
171
172
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gint              new_val;
Michael Natterer's avatar
Michael Natterer committed
173
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
174

175
176
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
177
178
179
  new_val = GTK_CHECK_MENU_ITEM (widget)->active;

  /*  hidden == TRUE corresponds to the menu toggle being FALSE  */
180
  if (new_val == shell->select->hidden)
Michael Natterer's avatar
Michael Natterer committed
181
    {
182
      gimp_display_shell_selection_toggle (shell->select);
Michael Natterer's avatar
Michael Natterer committed
183

Michael Natterer's avatar
Michael Natterer committed
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
      gimp_display_shell_flush (shell);
    }
}

void
view_toggle_layer_boundary_cmd_callback (GtkWidget *widget,
                                         gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gint              new_val;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  new_val = GTK_CHECK_MENU_ITEM (widget)->active;

  /*  hidden == TRUE corresponds to the menu toggle being FALSE  */
  if (new_val == shell->select->layer_hidden)
    {
      gimp_display_shell_selection_toggle_layer (shell->select);

      gimp_display_shell_flush (shell);
Michael Natterer's avatar
Michael Natterer committed
207
208
209
210
211
212
213
    }
}

void
view_toggle_rulers_cmd_callback (GtkWidget *widget,
				 gpointer   data)
{
Michael Natterer's avatar
Michael Natterer committed
214
215
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
216
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
217

Michael Natterer's avatar
Michael Natterer committed
218
219
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
220
221
  if (! GTK_CHECK_MENU_ITEM (widget)->active)
    {
Michael Natterer's avatar
Michael Natterer committed
222
      if (GTK_WIDGET_VISIBLE (shell->origin))
Michael Natterer's avatar
Michael Natterer committed
223
	{
Michael Natterer's avatar
Michael Natterer committed
224
225
226
	  gtk_widget_hide (shell->origin);
	  gtk_widget_hide (shell->hrule);
	  gtk_widget_hide (shell->vrule);
Michael Natterer's avatar
Michael Natterer committed
227

Michael Natterer's avatar
Michael Natterer committed
228
	  gtk_widget_queue_resize (GTK_WIDGET (shell->origin->parent));
Michael Natterer's avatar
Michael Natterer committed
229
230
231
232
	}
    }
  else
    {
Michael Natterer's avatar
Michael Natterer committed
233
      if (! GTK_WIDGET_VISIBLE (shell->origin))
Michael Natterer's avatar
Michael Natterer committed
234
	{
Michael Natterer's avatar
Michael Natterer committed
235
236
237
	  gtk_widget_show (shell->origin);
	  gtk_widget_show (shell->hrule);
	  gtk_widget_show (shell->vrule);
Michael Natterer's avatar
Michael Natterer committed
238

Michael Natterer's avatar
Michael Natterer committed
239
	  gtk_widget_queue_resize (GTK_WIDGET (shell->origin->parent));
Michael Natterer's avatar
Michael Natterer committed
240
241
242
243
244
245
246
247
	}
    }
}

void
view_toggle_statusbar_cmd_callback (GtkWidget *widget,
				    gpointer   data)
{
Michael Natterer's avatar
Michael Natterer committed
248
249
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
250
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
251

Michael Natterer's avatar
Michael Natterer committed
252
253
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
254
255
  if (! GTK_CHECK_MENU_ITEM (widget)->active)
    {
256
257
      if (GTK_WIDGET_VISIBLE (shell->statusbar))
	gtk_widget_hide (shell->statusbar);
Michael Natterer's avatar
Michael Natterer committed
258
259
260
    }
  else
    {
261
262
      if (! GTK_WIDGET_VISIBLE (shell->statusbar))
	gtk_widget_show (shell->statusbar);
Michael Natterer's avatar
Michael Natterer committed
263
264
265
266
267
268
269
    }
}

void
view_toggle_guides_cmd_callback (GtkWidget *widget,
				 gpointer   data)
{
270
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
271
272
  gboolean     old_val;
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
273
274
275
276
277
278

  old_val = gdisp->draw_guides;
  gdisp->draw_guides = GTK_CHECK_MENU_ITEM (widget)->active;

  if ((old_val != gdisp->draw_guides) && gdisp->gimage->guides)
    {
Michael Natterer's avatar
Michael Natterer committed
279
      gimp_display_shell_expose_full (GIMP_DISPLAY_SHELL (gdisp->shell));
280
      gimp_display_flush (gdisp);
Michael Natterer's avatar
Michael Natterer committed
281
282
283
284
285
286
287
    }
}

void
view_snap_to_guides_cmd_callback (GtkWidget *widget,
				  gpointer   data)
{
288
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
289
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
290
291
292
293
294
295
296
297

  gdisp->snap_to_guides = GTK_CHECK_MENU_ITEM (widget)->active;
}

void
view_new_view_cmd_callback (GtkWidget *widget,
			    gpointer   data)
{
298
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
299
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
300

Michael Natterer's avatar
Michael Natterer committed
301
  gimp_create_display (gdisp->gimage->gimp, gdisp->gimage, gdisp->scale);
Michael Natterer's avatar
Michael Natterer committed
302
303
304
305
306
307
}

void
view_shrink_wrap_cmd_callback (GtkWidget *widget,
			       gpointer   data)
{
308
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
309
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
310

Michael Natterer's avatar
Michael Natterer committed
311
  gimp_display_shell_scale_shrink_wrap (GIMP_DISPLAY_SHELL (gdisp->shell));
Michael Natterer's avatar
Michael Natterer committed
312
}