add ffmpeg filters as plugins
[goodguy/history.git] / cinelerra-5.0 / cinelerra / transitionhandles.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * 
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  * 
20  */
21
22 #include "cursors.h"
23 #include "edit.h"
24 #include "edits.h"
25 #include "edl.h"
26 #include "mwindow.h"
27 #include "theme.h"
28 #include "track.h"
29 #include "trackcanvas.h"
30 #include "tracks.h"
31 #include "transitionhandles.h"
32
33 TransitionHandle::TransitionHandle(MWindow *mwindow, 
34         TrackCanvas *trackcanvas,
35         Edit *edit,
36         int x,
37         int y)
38  : CanvasTool(mwindow, 
39                 trackcanvas,
40                 edit,
41                 x,
42                 y,
43                 0)
44 //              mwindow->theme->transitionhandle_data)
45 {
46 }
47
48 TransitionHandle::~TransitionHandle()
49 {
50 }
51
52 int TransitionHandle::handle_event()
53 {
54         return 0;
55 }
56
57
58
59
60 TransitionHandles::TransitionHandles(MWindow *mwindow,
61                 TrackCanvas *trackcanvas)
62  : CanvasTools(mwindow, trackcanvas)
63 {
64 }
65
66 TransitionHandles::~TransitionHandles()
67 {
68 }
69
70
71 void TransitionHandles::update()
72 {
73         decrease_visible();
74
75         for(Track *current = mwindow->edl->tracks->first;
76                 current;
77                 current = NEXT)
78         {
79                 for(Edit *edit = current->edits->first; edit; edit = edit->next)
80                 {
81                         if(edit->transition)
82                         {
83                                 int64_t edit_x, edit_y, edit_w, edit_h;
84                                 trackcanvas->edit_dimensions(edit, edit_x, edit_y, edit_w, edit_h);
85                                 trackcanvas->get_transition_coords(edit_x, edit_y, edit_w, edit_h);
86                                 
87                                 if(visible(edit_x, edit_w, edit_y, edit_h))
88                                 {
89                                         int exists = 0;
90
91                                         for(int i = 0; i < total; i++)
92                                         {
93                                                 TransitionHandle *handle = (TransitionHandle*)values[i];
94                                                 if(handle->edit->id == edit->id)
95                                                 {
96                                                         handle->reposition_window(edit_x, edit_y);
97                                                         handle->visible = 1;
98                                                         exists = 1;
99                                                         break;
100                                                 }
101                                         }
102
103                                         if(!exists)
104                                         {
105                                                 TransitionHandle *handle = new TransitionHandle(mwindow,
106                                                         trackcanvas,
107                                                         edit,
108                                                         edit_x,
109                                                         edit_y);
110                                                 trackcanvas->add_subwindow(handle);
111                                                 handle->set_cursor(ARROW_CURSOR, 0, 0);
112                                                 append(handle);
113                                         }
114                                 }
115                         }
116                 }
117         }
118
119         delete_invisible();
120 }