352
352
for (l = reg->bindings; l != NULL; l = l->next)
354
354
GropeGestureBinding *binding = (GropeGestureBinding *)l->data;
355
GropeEventGestureDrag drag;
356
GropeEventGesturePinch pinch;
357
GropeEventGestureRotate rotate;
359
if (type == GEIS_TYPE_DRAG)
356
if (binding->type == type)
362
gint fingers = drag_gesture_handle_properties (&drag,
369
drag.type = GROPE_GESTURE_DRAG1;
373
drag.type = GROPE_GESTURE_DRAG2;
377
drag.type = GROPE_GESTURE_DRAG3;
381
drag.type = GROPE_GESTURE_DRAG4;
385
drag.type = GROPE_GESTURE_DRAG5;
392
if (fingers == binding->touches)
394
binding->start (reg->window,
396
((GropeGestureEvent*)&drag));
401
else if (type == GEIS_TYPE_PINCH)
405
gint fingers = pinch_gesture_handle_properties (&pinch,
412
pinch.type = GROPE_GESTURE_PINCH1;
416
pinch.type = GROPE_GESTURE_PINCH2;
420
pinch.type = GROPE_GESTURE_PINCH3;
424
pinch.type = GROPE_GESTURE_PINCH4;
428
pinch.type = GROPE_GESTURE_PINCH5;
435
if (fingers == binding->touches)
437
binding->start (reg->window,
439
((GropeGestureEvent*)&pinch));
443
else if (type == GEIS_TYPE_ROTATE)
447
gint fingers = rotate_gesture_handle_properties (&rotate,
454
rotate.type = GROPE_GESTURE_ROTATE1;
458
rotate.type = GROPE_GESTURE_ROTATE2;
462
rotate.type = GROPE_GESTURE_ROTATE3;
466
rotate.type = GROPE_GESTURE_ROTATE4;
470
rotate.type = GROPE_GESTURE_ROTATE5;
477
if (fingers == binding->touches)
479
binding->start (reg->window,
481
((GropeGestureEvent*)&rotate));
358
if (type == GROPE_GESTURE_DRAG)
360
GropeEventGestureDrag drag;
364
drag.fingers = drag_gesture_handle_properties (&drag,
368
if (drag.fingers == binding->touches)
370
binding->start (reg->window,
371
((GropeGestureEvent*)&drag),
375
else if (type == GROPE_GESTURE_PINCH)
377
GropeEventGesturePinch pinch;
381
pinch.fingers = pinch_gesture_handle_properties (&pinch,
385
if (pinch.fingers == binding->touches)
387
binding->start (reg->window,
388
((GropeGestureEvent*)&pinch),
392
else if (type == GROPE_GESTURE_ROTATE)
394
GropeEventGestureRotate rotate;
398
rotate.fingers = rotate_gesture_handle_properties (&rotate,
402
if (rotate.fingers == binding->touches)
404
binding->start (reg->window,
405
((GropeGestureEvent*)&rotate),
497
425
for (l = reg->bindings; l != NULL; l = l->next)
499
427
GropeGestureBinding *binding = (GropeGestureBinding *)l->data;
500
GropeEventGestureDrag drag;
501
GropeEventGesturePinch pinch;
502
GropeEventGestureRotate rotate;
504
if (type == GEIS_TYPE_DRAG)
429
if (binding->type == type)
507
gint fingers = drag_gesture_handle_properties (&drag,
514
drag.type = GROPE_GESTURE_DRAG1;
518
drag.type = GROPE_GESTURE_DRAG2;
522
drag.type = GROPE_GESTURE_DRAG3;
526
drag.type = GROPE_GESTURE_DRAG4;
530
drag.type = GROPE_GESTURE_DRAG5;
537
if (fingers == binding->touches)
539
binding->update (reg->window,
541
((GropeGestureEvent*)&drag));
544
else if (type == GEIS_TYPE_PINCH)
547
gint fingers = pinch_gesture_handle_properties (&pinch,
554
pinch.type = GROPE_GESTURE_PINCH1;
558
pinch.type = GROPE_GESTURE_PINCH2;
562
pinch.type = GROPE_GESTURE_PINCH3;
566
pinch.type = GROPE_GESTURE_PINCH4;
570
pinch.type = GROPE_GESTURE_PINCH5;
577
if (fingers == binding->touches)
579
binding->update (reg->window,
581
((GropeGestureEvent*)&pinch));
584
else if (type == GRAIL_TYPE_ROTATE1)
587
gint fingers = rotate_gesture_handle_properties (&rotate,
594
rotate.type = GROPE_GESTURE_ROTATE1;
598
rotate.type = GROPE_GESTURE_ROTATE2;
602
rotate.type = GROPE_GESTURE_ROTATE3;
606
rotate.type = GROPE_GESTURE_ROTATE4;
610
rotate.type = GROPE_GESTURE_ROTATE5;
617
if (fingers == binding->touches)
619
binding->update (reg->window,
621
((GropeGestureEvent*)&rotate));
431
if (type == GROPE_GESTURE_DRAG)
433
GropeEventGestureDrag drag;
437
drag.fingers = drag_gesture_handle_properties (&drag,
441
if (drag.fingers == binding->touches)
443
binding->update (reg->window,
444
((GropeGestureEvent*)&drag),
448
else if (type == GROPE_GESTURE_PINCH)
450
GropeEventGesturePinch pinch;
454
pinch.fingers = pinch_gesture_handle_properties (&pinch,
458
if (pinch.fingers == binding->touches)
460
binding->update (reg->window,
461
((GropeGestureEvent*)&pinch),
465
else if (type == GROPE_GESTURE_ROTATE)
467
GropeEventGestureRotate rotate;
471
rotate.fingers = rotate_gesture_handle_properties (&rotate,
475
if (rotate.fingers == binding->touches)
477
binding->update (reg->window,
478
((GropeGestureEvent*)&rotate),
637
496
for (l = reg->bindings; l != NULL; l = l->next)
639
498
GropeGestureBinding *binding = (GropeGestureBinding *)l->data;
640
GropeEventGestureDrag drag;
641
GropeEventGesturePinch pinch;
642
GropeEventGestureRotate rotate;
644
if (type == GEIS_TYPE_DRAG)
500
if (binding->type == type)
648
drag.fingers = drag_gesture_handle_properties (&drag, attr_count, attrs);
650
if (drag.fingers == binding->touches)
652
binding->end (reg->window,
654
((GropeGestureEvent*)&drag));
657
else if (type == GEIS_TYPE_PINCH)
661
pinch.fingers = pinch_gesture_handle_properties (&pinch,
665
if (pinch.fingers == binding->touches)
667
binding->end (reg->window,
669
((GropeGestureEvent*)&pinch));
672
else if (type == GEIS_TYPE_ROTATE)
676
rotate.fingers = rotate_gesture_handle_properties (&rotate,
680
if (rotate.fingers == binding->touches)
682
binding->end (reg->window,
684
((GropeGestureEvent*)&rotate));
502
if (type == GROPE_GESTURE_DRAG)
504
GropeEventGestureDrag drag;
508
drag.fingers = drag_gesture_handle_properties (&drag,
512
if (drag.fingers == binding->touches)
514
binding->end (reg->window,
515
((GropeGestureEvent*)&drag),
519
else if (type == GROPE_GESTURE_PINCH)
521
GropeEventGesturePinch pinch;
525
pinch.fingers = pinch_gesture_handle_properties (&pinch,
529
if (pinch.fingers == binding->touches)
531
binding->end (reg->window,
532
((GropeGestureEvent*)&pinch),
536
else if (type == GROPE_GESTURE_ROTATE)
538
GropeEventGestureRotate rotate;
542
rotate.fingers = rotate_gesture_handle_properties (&rotate,
546
if (rotate.fingers == binding->touches)
548
binding->end (reg->window,
549
((GropeGestureEvent*)&rotate),
771
637
grope_gesture_manager_register_window (GropeGestureManager *manager,
772
638
GtkWindow *window,
773
639
GropeGestureType gesture_type,
774
641
GropeGestureCallback start,
775
642
GropeGestureCallback update,
776
GropeGestureCallback end)
643
GropeGestureCallback end,
645
GDestroyNotify destroy)
778
647
GropeGestureManagerPrivate *priv;
779
648
GropeGestureRegistration *reg;
780
649
GropeGestureBinding *binding;
783
651
g_return_if_fail (GROPE_IS_GESTURE_MANAGER (manager));
784
652
g_return_if_fail (GTK_IS_WINDOW (window));
847
715
reg->iochannel = iochannel;
850
for (i = 0; i < bit_count (gesture_type); i++)
852
binding = g_new0 (GropeGestureBinding, 1);
854
binding->start = start;
855
binding->update = update;
858
if (gesture_type & GROPE_GESTURE_DRAG1)
860
binding->type = GEIS_TYPE_DRAG;
861
binding->touches = 1;
863
else if (gesture_type & GROPE_GESTURE_DRAG2)
865
gesture_type ^= GROPE_GESTURE_DRAG2;
866
binding->type = GEIS_TYPE_DRAG;
867
binding->touches = 2;
869
else if (gesture_type & GROPE_GESTURE_DRAG3)
871
binding->type = GEIS_TYPE_DRAG;
872
binding->touches = 3;
874
else if (gesture_type & GROPE_GESTURE_DRAG4)
876
binding->type = GEIS_TYPE_DRAG;
877
binding->touches = 4;
879
else if (gesture_type & GROPE_GESTURE_DRAG5)
881
binding->type = GEIS_TYPE_DRAG;
882
binding->touches = 5;
884
else if (gesture_type & GROPE_GESTURE_PINCH1)
886
binding->type = GEIS_TYPE_PINCH;
887
binding->touches = 1;
889
else if (gesture_type & GROPE_GESTURE_PINCH2)
891
gesture_type ^= GROPE_GESTURE_PINCH2;
892
binding->type = GEIS_TYPE_PINCH;
893
binding->touches = 2;
895
else if (gesture_type & GROPE_GESTURE_PINCH3)
897
binding->type = GEIS_TYPE_PINCH;
898
binding->touches = 3;
900
else if (gesture_type & GROPE_GESTURE_PINCH4)
902
binding->type = GEIS_TYPE_PINCH;
903
binding->touches = 4;
905
else if (gesture_type & GROPE_GESTURE_PINCH5)
907
binding->type = GEIS_TYPE_PINCH;
908
binding->touches = 5;
910
else if (gesture_type & GROPE_GESTURE_ROTATE1)
912
binding->type = GEIS_TYPE_ROTATE;
913
binding->touches = 1;
915
else if (gesture_type & GROPE_GESTURE_ROTATE2)
917
gesture_type ^= GROPE_GESTURE_ROTATE2;
918
binding->type = GEIS_TYPE_ROTATE;
919
binding->touches = 2;
921
else if (gesture_type & GROPE_GESTURE_ROTATE3)
923
binding->type = GEIS_TYPE_ROTATE;
924
binding->touches = 3;
926
else if (gesture_type & GROPE_GESTURE_ROTATE4)
928
binding->type = GEIS_TYPE_ROTATE;
929
binding->touches = 4;
931
else if (gesture_type & GROPE_GESTURE_ROTATE5)
933
binding->type = GEIS_TYPE_ROTATE;
934
binding->touches = 5;
937
/* XXX - check for duplicates in reg->bindings first */
939
reg->bindings = g_list_append (reg->bindings, binding);
941
g_hash_table_insert (priv->hash,
718
/* XXX - check for duplicates in reg->bindings first */
719
binding = g_new0 (GropeGestureBinding, 1);
721
binding->type = gesture_type;
722
binding->touches = touch_points;
723
binding->start = start;
724
binding->update = update;
726
binding->data = user_data;
727
binding->destroy = destroy;
729
reg->bindings = g_list_append (reg->bindings, binding);
731
g_hash_table_insert (priv->hash,