~ella-animation/ella/trunk

« back to all changes in this revision

Viewing changes to lib/libellawidgets/timeline/ella-timeline.vala

  • Committer: xapantu
  • Date: 2011-06-06 16:55:22 UTC
  • Revision ID: xapantu@gmail.com-20110606165522-x3qwmjtalm9lqai7
Bezier curves

Show diffs side-by-side

added added

removed removed

Lines of Context:
383
383
        top3.height = height_request + layer_height;
384
384
    }
385
385
 
 
386
    double menu_x_root;
 
387
    double menu_y_root;
 
388
    int saved_x;
 
389
    Gtk.Menu menu;
 
390
 
386
391
    public override bool button_press_event(Gdk.EventButton event)
387
392
    {
388
393
        int layer_to_select = (int) event.y / layer_height;
412
417
                }
413
418
                break;
414
419
            case 3:
415
 
                var layer = layers[layer_to_select];
416
 
                layer.set_keyframe_type((int) event.x/5, KeyframeType.SMOOTH);
 
420
                //var layer = layers[layer_to_select];
 
421
                //layer.set_keyframe_type((int) event.x/5, KeyframeType.SMOOTH);
 
422
                menu = new Gtk.Menu();
 
423
                var menuitem = new Gtk.MenuItem.with_label("Normal");
 
424
                menuitem.activate.connect( () => { layers[layer_to_select].set_keyframe_type(saved_x, KeyframeType.NORMAL); queue_draw();  } );
 
425
                menu.append(menuitem);
 
426
                menuitem = new Gtk.MenuItem.with_label("Smooth");
 
427
                menuitem.activate.connect( () => { layers[layer_to_select].set_keyframe_type(saved_x, KeyframeType.SMOOTH); queue_draw(); } );
 
428
                menu.append(menuitem);
 
429
                menu_x_root = event.x_root;
 
430
                saved_x = (int)event.x/5;
 
431
                menu_y_root = event.y_root;
 
432
                menu.show_all();
 
433
                menu.popup (null,
 
434
                        null,
 
435
                        get_menu_position,
 
436
                        0,
 
437
                        Gtk.get_current_event_time());
 
438
 
417
439
                break;
418
440
            }
419
441
        }
421
443
        return true;
422
444
    }
423
445
 
 
446
    private void get_menu_position(Gtk.Menu menu, out int x, out int y, out bool push_in)
 
447
    {
 
448
        x = (int)menu_x_root;
 
449
        y = (int)menu_y_root;
 
450
    }
 
451
 
424
452
    public override bool button_release_event(Gdk.EventButton event)
425
453
    {
426
454
        kf_selected = null;
487
515
            double old_fps_x = 0.0;
488
516
            foreach(var j in kfs)
489
517
            {
 
518
                cr.set_source_rgba(0,0,0, 0.4);
 
519
                cr.set_line_width(1);
490
520
                switch(j.type)
491
521
                {
492
522
                case KeyframeType.NORMAL:
493
 
                    cr.rectangle(old_fps_x, layer_height*i + layer_height/2 - 2, j.time*5 - old_fps_x, 4);
494
 
                    cr.set_source_rgb(0,0,0);
495
 
                    cr.fill();
 
523
                    cr.move_to(old_fps_x, layer_height*i + layer_height/2);
 
524
                    cr.line_to(j.time*5, layer_height*i + layer_height/2);
 
525
                    cr.stroke();
496
526
                    break;
497
527
                case KeyframeType.SMOOTH:
498
 
                    cr.move_to(old_fps_x, layer_height*(i+1));
499
528
                    double offset = (j.time*5 - old_fps_x)/3;
500
529
                    double x1 = j.time*5 - (j.time*5 - old_fps_x)/2 - offset;
501
530
                    double x2 = x1 + 2*offset;
502
531
                    double y1 = layer_height*i;
503
532
                    double y2 = y1;
 
533
                    cr.move_to(old_fps_x, layer_height*(i+1));
504
534
                    cr.curve_to(x1, y1, x2, y2, j.time*5, layer_height*(i+1));
505
 
                    cr.set_line_width(2);
506
 
                    cr.set_source_rgb(0,0,0);
507
535
                    cr.stroke();
508
536
                    break;
509
537
                }