~ubuntu-branches/ubuntu/jaunty/gimp/jaunty-security

« back to all changes in this revision

Viewing changes to plug-ins/imagemap/imap_preview.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2007-05-02 16:33:03 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070502163303-bvzhjzbpw8qglc4y
Tags: 2.3.16-1ubuntu1
* Resynchronized with Debian, remaining Ubuntu changes:
  - debian/rules: i18n magic.
* debian/control.in:
  - Maintainer: Ubuntu Core Developers <ubuntu-devel@lists.ubuntu.com>
* debian/patches/02_help-message.patch,
  debian/patches/03_gimp.desktop.in.in.patch,
  debian/patches/10_dont_show_wizard.patch: updated.
* debian/patches/04_composite-signedness.patch,
  debian/patches/05_add-letter-spacing.patch: dropped, used upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 *
4
4
 * Generates clickable image maps.
5
5
 *
6
 
 * Copyright (C) 1998-2003 Maurits Rijk  lpeek.mrijk@consunet.nl
 
6
 * Copyright (C) 1998-2005 Maurits Rijk  m.rijk@chello.nl
7
7
 *
8
8
 * This program is free software; you can redistribute it and/or modify
9
9
 * it under the terms of the GNU General Public License as published by
32
32
#include "imap_commands.h"
33
33
#include "imap_grid.h"
34
34
#include "imap_main.h"
35
 
#include "imap_popup.h"
 
35
#include "imap_menu.h"
36
36
#include "imap_preview.h"
37
37
 
38
38
#define PREVIEW_MASK  (GDK_EXPOSURE_MASK       | \
302
302
void
303
303
add_preview_motion_event(Preview_t *preview, GCallback func)
304
304
{
305
 
   g_signal_connect(preview->preview, "motion_notify_event",
 
305
   g_return_if_fail (func != NULL);
 
306
 
 
307
   g_signal_connect(preview->preview, "motion-notify-event",
306
308
                    func, NULL);
307
309
}
308
310
 
309
311
void
310
312
add_enter_notify_event(Preview_t *preview, GCallback func)
311
313
{
312
 
   g_signal_connect(preview->preview, "enter_notify_event",
 
314
   g_return_if_fail (func != NULL);
 
315
 
 
316
   g_signal_connect(preview->preview, "enter-notify-event",
313
317
                    func, NULL);
314
318
}
315
319
 
316
320
void
317
321
add_leave_notify_event(Preview_t *preview, GCallback func)
318
322
{
319
 
   g_signal_connect(preview->preview, "leave_notify_event",
 
323
   g_return_if_fail (func != NULL);
 
324
 
 
325
   g_signal_connect(preview->preview, "leave-notify-event",
320
326
                    func, NULL);
321
327
}
322
328
 
323
329
void
324
330
add_preview_button_press_event(Preview_t *preview, GCallback func)
325
331
{
326
 
   g_signal_connect(preview->preview, "button_press_event",
 
332
   g_return_if_fail (func != NULL);
 
333
 
 
334
   g_signal_connect(preview->preview, "button-press-event",
327
335
                    func, NULL);
328
336
}
329
337
 
361
369
   return prev_cursor;
362
370
}
363
371
 
364
 
static GtkTargetEntry target_table[] = {
 
372
static const GtkTargetEntry target_table[] = {
365
373
   {"STRING", 0, 1 },
366
374
   {"text/plain", 0, 2 }
367
375
};
380
388
      obj = object_list_find(list, x, y);
381
389
      if (obj && !obj->locked) {
382
390
         command_list_add(edit_object_command_new(obj));
383
 
         object_set_url(obj, data->data);
 
391
         object_set_url(obj, (const gchar *) data->data);
384
392
         object_emit_update_signal(obj);
385
393
         success = TRUE;
386
394
      }
393
401
                       GtkAllocation *allocation,
394
402
                       gpointer preview_void)
395
403
{
396
 
  Preview_t * preview;
397
 
 
398
 
  preview = (Preview_t *)preview_void;
 
404
  Preview_t * preview = preview_void;
399
405
 
400
406
  render_preview(preview, &preview->src_rgn);
401
407
}
402
408
 
 
409
static void
 
410
scroll_adj_changed (GtkAdjustment *adj,
 
411
                    GtkRuler      *ruler)
 
412
{
 
413
  gtk_ruler_set_range (ruler,
 
414
                       adj->value, adj->value + adj->page_size,
 
415
                       G_MAXDOUBLE, adj->page_size);
 
416
}
 
417
 
403
418
Preview_t*
404
419
make_preview(GimpDrawable *drawable)
405
420
{
406
421
   Preview_t *data = g_new(Preview_t, 1);
 
422
   GtkAdjustment *hadj;
 
423
   GtkAdjustment *vadj;
407
424
   GtkWidget *preview;
408
425
   GtkWidget *window;
409
426
   GtkWidget *button, *arrow;
410
427
   GtkWidget *ruler;
411
 
   GtkWidget *frame;
412
428
   GtkWidget *table;
 
429
   GtkWidget *scrollbar;
413
430
   gint width, height;
414
431
 
415
432
   data->drawable = drawable;
417
434
 
418
435
   g_object_set_data (G_OBJECT (preview), "preview", data);
419
436
   gtk_widget_set_events(GTK_WIDGET(preview), PREVIEW_MASK);
420
 
   g_signal_connect_after(preview, "expose_event",
 
437
   g_signal_connect_after(preview, "expose-event",
421
438
                          G_CALLBACK(preview_expose), data);
422
439
   g_signal_connect (preview, "size-allocate",
423
440
                     G_CALLBACK (preview_size_allocate), (gpointer)data);
425
442
   /* Handle drop of links in preview widget */
426
443
   gtk_drag_dest_set(preview, GTK_DEST_DEFAULT_ALL, target_table,
427
444
                     2, GDK_ACTION_COPY);
428
 
   g_signal_connect(preview, "drag_data_received",
 
445
   g_signal_connect(preview, "drag-data-received",
429
446
                    G_CALLBACK(handle_drop), NULL);
430
447
 
431
448
   data->widget_width = data->width =
435
452
   gtk_widget_set_size_request (preview, data->widget_width,
436
453
                                data->widget_height);
437
454
 
438
 
   data->window = window = gtk_scrolled_window_new(NULL, NULL);
439
 
   width = (data->width > 600) ? 600 : data->width;
440
 
   height = (data->height > 400) ? 400 : data->height;
441
 
   gtk_widget_set_size_request(window, width, height);
442
 
   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
443
 
                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
444
 
   gtk_widget_show(window);
445
 
 
446
 
   data->frame = frame = gtk_frame_new(NULL);
447
 
   gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(window), frame);
448
 
   gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
449
 
 
450
455
   /* The main table */
451
 
   table = gtk_table_new(3, 3, FALSE);
452
 
   gtk_table_attach(GTK_TABLE(table), preview, 1, 2, 1, 2, GTK_FILL, GTK_FILL,
453
 
                    0, 0);
454
 
   gtk_container_add(GTK_CONTAINER(frame), table);
 
456
   data->window = table = gtk_table_new(3, 3, FALSE);
 
457
   gtk_table_set_col_spacings (GTK_TABLE (table), 1);
 
458
   gtk_table_set_row_spacings (GTK_TABLE (table), 1);
455
459
 
456
460
   /* Create button with arrow */
457
461
   button = gtk_button_new();
460
464
                    0, 0);
461
465
   gtk_widget_set_events(button,
462
466
                         GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
463
 
   g_signal_connect(button, "button_press_event",
 
467
   g_signal_connect(button, "button-press-event",
464
468
                    G_CALLBACK(arrow_cb), NULL);
465
469
   gtk_widget_show(button);
466
470
 
470
474
 
471
475
   /* Create horizontal ruler */
472
476
   data->hruler = ruler = gtk_hruler_new();
473
 
   gtk_ruler_set_range(GTK_RULER(ruler), 0, data->width, 0, PREVIEW_SIZE);
474
 
   g_signal_connect_swapped(preview, "motion_notify_event",
 
477
   g_signal_connect_swapped(preview, "motion-notify-event",
475
478
                            G_CALLBACK(GTK_WIDGET_GET_CLASS(ruler)->motion_notify_event),
476
479
                            ruler);
477
480
 
478
 
   gtk_table_attach(GTK_TABLE(table), ruler, 1, 2, 0, 1, GTK_FILL, GTK_FILL,
479
 
                    0, 0);
 
481
   gtk_table_attach(GTK_TABLE(table), ruler, 1, 2, 0, 1,
 
482
                    GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
480
483
   gtk_widget_show(ruler);
481
484
 
482
485
   /* Create vertical ruler */
483
486
   data->vruler = ruler = gtk_vruler_new();
484
 
   gtk_ruler_set_range(GTK_RULER(ruler), 0, data->height, 0, PREVIEW_SIZE);
485
 
   g_signal_connect_swapped(preview, "motion_notify_event",
 
487
   g_signal_connect_swapped(preview, "motion-notify-event",
486
488
                            G_CALLBACK(GTK_WIDGET_GET_CLASS(ruler)->motion_notify_event),
487
489
                            ruler);
488
 
   gtk_table_attach(GTK_TABLE(table), ruler, 0, 1, 1, 2, GTK_FILL, GTK_FILL,
 
490
   gtk_table_attach(GTK_TABLE(table), ruler, 0, 1, 1, 2,
 
491
                    GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
 
492
   gtk_widget_show(ruler);
 
493
 
 
494
   window = gtk_scrolled_window_new (NULL, NULL);
 
495
   gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
 
496
                                  GTK_POLICY_NEVER, GTK_POLICY_NEVER);
 
497
   width = (data->width > 600) ? 600 : data->width;
 
498
   height = (data->height > 400) ? 400 : data->height;
 
499
   gtk_widget_set_size_request(window, width, height);
 
500
   gtk_table_attach(GTK_TABLE(table), window, 1, 2, 1, 2, GTK_FILL, GTK_FILL,
489
501
                    0, 0);
490
 
   gtk_widget_show(ruler);
 
502
   gtk_widget_show(window);
 
503
 
 
504
   hadj = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (window));
 
505
 
 
506
   g_signal_connect (hadj, "changed",
 
507
                     G_CALLBACK (scroll_adj_changed),
 
508
                     data->hruler);
 
509
   g_signal_connect (hadj, "value-changed",
 
510
                     G_CALLBACK (scroll_adj_changed),
 
511
                     data->hruler);
 
512
 
 
513
   vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (window));
 
514
 
 
515
   g_signal_connect (vadj, "changed",
 
516
                     G_CALLBACK (scroll_adj_changed),
 
517
                     data->vruler);
 
518
   g_signal_connect (vadj, "value-changed",
 
519
                     G_CALLBACK (scroll_adj_changed),
 
520
                     data->vruler);
 
521
 
 
522
   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(window), preview);
 
523
 
 
524
   scrollbar = gtk_hscrollbar_new (hadj);
 
525
   gtk_table_attach(GTK_TABLE(table), scrollbar, 1, 2, 2, 3,
 
526
                    GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 0, 0);
 
527
   gtk_widget_show (scrollbar);
 
528
 
 
529
   scrollbar = gtk_vscrollbar_new (vadj);
 
530
   gtk_table_attach(GTK_TABLE(table), scrollbar,  2, 3, 1, 2,
 
531
                    GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 0, 0);
 
532
   gtk_widget_show (scrollbar);
 
533
 
 
534
   gtk_widget_show (preview);
491
535
 
492
536
   gimp_pixel_rgn_init(&data->src_rgn, drawable, 0, 0, data->width,
493
537
                       data->height, FALSE, FALSE);
494
538
   render_preview(data, &data->src_rgn);
495
539
 
496
 
   gtk_widget_show(preview);
497
 
 
498
 
   gtk_widget_show(frame);
499
540
   gtk_widget_show(table);
500
541
 
501
542
   return data;