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
}