r370: Heroine Virutal's official release 1.2.1
[cinelerra_cv/mob.git] / hvirtual / cinelerra / maincursor.C
blobbe1d01bf60f41c2323b6931609017f73576c5dcb
1 #include "bcsignals.h"
2 #include "edl.h"
3 #include "edlsession.h"
4 #include "localsession.h"
5 #include "maincursor.h"
6 #include "mwindow.h"
7 #include "mwindowgui.h"
8 #include "trackcanvas.h"
11 MainCursor::MainCursor(MWindow *mwindow, MWindowGUI *gui)
13         this->mwindow = mwindow;
14         this->gui = gui;
15         visible = 0;
16         active = 0;
17         playing_back = 0;
20 MainCursor::~MainCursor()
24 void MainCursor::create_objects()
26 //      draw();
29 void MainCursor::focus_in_event()
33 void MainCursor::focus_out_event()
35         show();
36         flash();
39 void MainCursor::activate()
41 //printf("MainCursor::activate 1 %d\n", BC_WindowBase::get_resources()->blink_rate);
42         if(!active)
43         {
44                 active = 1;
45                 gui->set_repeat(BC_WindowBase::get_resources()->blink_rate);
46         }
49 void MainCursor::deactivate()
51         if(active)
52         {
53                 active = 0;
54                 gui->unset_repeat(BC_WindowBase::get_resources()->blink_rate);
55                 show();
56                 flash();
57         }
60 int MainCursor::repeat_event(int64_t duration)
62         if(!active || !gui->get_has_focus()) return 0;
63         if(duration != BC_WindowBase::get_resources()->blink_rate) return 0;
65 // Only flash a single sample selection
66         if(selectionstart == selectionend)
67         {
68                 if(!playing_back || (playing_back && !visible))
69                 {
70                         draw();
71                         flash();
72                 }
73         }
74         return 1;
77 void MainCursor::draw()
79         if(!visible)
80         {
81 //printf("MainCursor::draw 1\n");
82                 selectionstart = mwindow->edl->local_session->selectionstart;
83                 selectionend = mwindow->edl->local_session->selectionend;
84                 view_start = mwindow->edl->local_session->view_start;
85                 zoom_sample = mwindow->edl->local_session->zoom_sample;
87                 pixel1 = Units::to_int64((selectionstart * 
88                         mwindow->edl->session->sample_rate / 
89                         zoom_sample - 
90                         view_start));
91                 pixel2 = Units::to_int64((selectionend *
92                         mwindow->edl->session->sample_rate / 
93                         zoom_sample - 
94                         view_start));
95                 if(pixel1 < -10) pixel1 = -10;
96                 if(pixel2 > gui->canvas->get_w() + 10) pixel2 = gui->canvas->get_w() + 10;
97                 if(pixel2 < pixel1) pixel2 = pixel1;
98 //printf("MainCursor::draw 2\n");
99         }
101         gui->canvas->set_color(WHITE);
102         gui->canvas->set_inverse();
103         gui->canvas->draw_box(pixel1, 0, pixel2 - pixel1 + 1, gui->canvas->get_h());
104         gui->canvas->set_opaque();
105         visible = !visible;
108 // Draw the cursor in a new location
109 void MainCursor::update()
111         if(visible)
112         {
113                 hide();
114                 flash();
115         }
116         show();
117         flash();
121 void MainCursor::flash()
123         gui->canvas->flash(pixel1, 0, pixel2 - pixel1 + 1, gui->canvas->get_h());
124         gui->flush();
127 void MainCursor::hide()
129         if(visible) draw();
132 void MainCursor::show()
134         if(!visible) draw();
137 // Constitutively redraw the cursor after it is overwritten by a draw
138 void MainCursor::restore()
140         if(visible)
141         {
142                 draw();
143                 visible = 1;
144         }