rework keyframe hide popup, keyframe auto render, textbox set_selection wide text
[goodguy/history.git] / cinelerra-5.1 / cinelerra / recordscopes.C
1 /*
2  * CINELERRA
3  * Copyright (C) 1997-2011 Adam Williams <broadcast at earthling dot net>
4  * 
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * 
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  * 
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  * 
19  */
20
21
22
23 #include "cicolors.h"
24 #include "language.h"
25 #include "mainsession.h"
26 #include "mutex.h"
27 #include "preferences.h"
28 #include "recordmonitor.h"
29 #include "recordscopes.h"
30
31 RecordScopeThread::RecordScopeThread(MWindow *mwindow, RecordMonitor *record_monitor)
32  : BC_DialogThread()
33 {
34         this->mwindow = mwindow;
35         this->record_monitor = record_monitor;
36         scope_gui = 0;
37         gui_lock = new Mutex("RecordScopeThread::gui_lock");
38 }
39
40 RecordScopeThread::~RecordScopeThread()
41 {
42         close_window();
43         delete gui_lock;
44 }
45
46 void RecordScopeThread::handle_done_event(int result)
47 {
48         gui_lock->lock("RecordScopeThread::handle_done_event");
49         scope_gui = 0;
50         gui_lock->unlock();
51         
52         record_monitor->window->lock_window("RecordScopeThread::handle_done_event");
53         record_monitor->window->scope_toggle->update(0);
54         record_monitor->window->unlock_window();
55 }
56
57 BC_Window* RecordScopeThread::new_gui()
58 {
59         RecordScopeGUI *gui = new RecordScopeGUI(mwindow, record_monitor);
60         gui->create_objects();
61         scope_gui = gui;
62         return gui;
63 }
64
65 void RecordScopeThread::process(VFrame *output_frame)
66 {
67         if(record_monitor->scope_thread)
68         {
69                 record_monitor->scope_thread->gui_lock->lock("RecordScopeThread::process");
70                 if(record_monitor->scope_thread->scope_gui)
71                 {
72                         RecordScopeGUI *gui = record_monitor->scope_thread->scope_gui;
73                         gui->process(output_frame);
74                 }
75
76
77
78                 record_monitor->scope_thread->gui_lock->unlock();
79         }
80 }
81
82
83
84
85
86
87
88
89
90 RecordScopeGUI::RecordScopeGUI(MWindow *mwindow, 
91         RecordMonitor *record_monitor)
92  : ScopeGUI(mwindow->theme, 
93         mwindow->session->scope_x, 
94         mwindow->session->scope_y, 
95         mwindow->session->scope_w, 
96         mwindow->session->scope_h,
97         mwindow->preferences->processors)
98 {
99         this->mwindow = mwindow;
100         this->record_monitor = record_monitor;
101 }
102
103 RecordScopeGUI::~RecordScopeGUI()
104 {
105 }
106
107 void RecordScopeGUI::create_objects()
108 {
109         use_hist = mwindow->session->use_hist;
110         use_wave = mwindow->session->use_wave;
111         use_vector = mwindow->session->use_vector;
112         use_hist_parade = mwindow->session->use_hist_parade;
113         use_wave_parade = mwindow->session->use_wave_parade;
114         ScopeGUI::create_objects();
115 }
116
117
118 void RecordScopeGUI::toggle_event()
119 {
120         mwindow->session->use_hist = use_hist;
121         mwindow->session->use_wave = use_wave;
122         mwindow->session->use_vector = use_vector;
123         mwindow->session->use_hist_parade = use_hist_parade;
124         mwindow->session->use_wave_parade = use_wave_parade;
125 }
126
127 int RecordScopeGUI::translation_event()
128 {
129         ScopeGUI::translation_event();
130         mwindow->session->scope_x = get_x();
131         mwindow->session->scope_y = get_y();
132         return 0;
133 }
134
135 int RecordScopeGUI::resize_event(int w, int h)
136 {
137         ScopeGUI::resize_event(w, h);
138         mwindow->session->scope_w = w;
139         mwindow->session->scope_h = h;
140         return 0;
141 }
142
143
144
145
146
147 ScopeEnable::ScopeEnable(MWindow *mwindow, RecordMonitor *record_monitor, int x, int y)
148  : BC_Toggle(x, 
149         y, 
150         mwindow->theme ? mwindow->theme->get_image_set("scope_toggle") : 0,
151         mwindow->session->record_scope)
152 {
153         this->record_monitor = record_monitor;
154         this->mwindow = mwindow;
155         set_tooltip(_("View scope"));
156 }
157
158 ScopeEnable::~ScopeEnable()
159 {
160 }
161
162
163 int ScopeEnable::handle_event()
164 {
165         unlock_window();
166         mwindow->session->record_scope = get_value();
167
168         if(mwindow->session->record_scope)
169         {
170                 record_monitor->scope_thread->start();
171         }
172         else
173         {
174                 record_monitor->scope_thread->close_window();
175         }
176
177         lock_window("ScopeEnable::handle_event");
178         return 1;
179 }
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195