| @@ -18,6 +18,7 @@ | |||
| /*******************************************************************************/ | |||
| #include "Engine.H" | |||
| #include "Transport.H" | |||
| #include "Timeline.H" // for process() | |||
| @@ -69,7 +70,7 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
| cycle */ | |||
| request_locate( pos->frame ); | |||
| return 1; | |||
| case JackTransportStarting: /* this means JACK is polling slow-sync clients */ | |||
| case JackTransportStarting: /* this means JACK is polling slow-sync clients */ | |||
| { | |||
| if ( ! seeking ) | |||
| { | |||
| @@ -101,12 +102,9 @@ Engine::sync ( jack_transport_state_t state, jack_position_t *pos ) | |||
| int | |||
| Engine::process ( nframes_t nframes ) | |||
| { | |||
| jack_position_t pos; | |||
| jack_transport_state_t ts; | |||
| transport.poll(); | |||
| ts = jack_transport_query( _client, &pos ); | |||
| if ( ts != JackTransportRolling ) | |||
| if ( ! transport.rolling ) | |||
| return 0; | |||
| if ( ! trylock() ) | |||
| @@ -50,6 +50,7 @@ class Engine : public Mutex | |||
| private: | |||
| friend class Port; | |||
| friend class Transport; | |||
| jack_client_t * client ( void ) { return _client; } | |||
| public: | |||
| @@ -14,6 +14,7 @@ SRCS= \ | |||
| Port.C \ | |||
| Disk_Stream.C \ | |||
| Engine.C \ | |||
| Transport.C \ | |||
| Loggable.C \ | |||
| OBJS=$(SRCS:.C=.o) | |||
| @@ -29,9 +29,13 @@ | |||
| #include "Track_Header.H" | |||
| const float UPDATE_FREQ = 0.02f; | |||
| #include "Disk_Stream.H" | |||
| #include "Transport.H" | |||
| void | |||
| Timeline::cb_scroll ( Fl_Widget *w, void *v ) | |||
| { | |||
| @@ -178,6 +182,7 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||
| } | |||
| /* make sure scrollbars are on top */ | |||
| add( vscroll ); | |||
| add( hscroll ); | |||
| @@ -187,6 +192,9 @@ Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : Fl_Overlay_Wi | |||
| redraw(); | |||
| end(); | |||
| Fl::add_timeout( UPDATE_FREQ, update_cb, this ); | |||
| } | |||
| @@ -446,9 +454,43 @@ Timeline::draw ( void ) | |||
| } | |||
| void | |||
| Timeline::draw_playhead ( void ) | |||
| { | |||
| int x = ( ts_to_x( transport.frame ) - ts_to_x( xoffset ) ) + tracks->x() + Track_Header::width(); | |||
| if ( x < 0 || x > tracks->w() ) | |||
| return; | |||
| fl_color( FL_RED ); | |||
| fl_line( x, rulers->y() + rulers->h(), x, rulers->y() + rulers->h() + tracks->h() ); | |||
| } | |||
| void | |||
| Timeline::redraw_playhead ( void ) | |||
| { | |||
| redraw_overlay(); | |||
| } | |||
| /** called so many times a second to redraw the playhead etc. */ | |||
| void | |||
| Timeline::update_cb ( void *arg ) | |||
| { | |||
| Fl::repeat_timeout( UPDATE_FREQ, update_cb, arg ); | |||
| Timeline *tl = (Timeline *)arg; | |||
| tl->redraw_playhead(); | |||
| } | |||
| void | |||
| Timeline::draw_overlay ( void ) | |||
| { | |||
| draw_playhead(); | |||
| if ( ! ( _selection.w && _selection.h ) ) | |||
| return; | |||
| @@ -138,9 +138,12 @@ public: | |||
| void draw_measure_lines ( int X, int Y, int W, int H, Fl_Color color ); | |||
| void xposition ( int X ); | |||
| void yposition ( int Y ); | |||
| void draw_playhead ( void ); | |||
| void redraw_playhead ( void ); | |||
| void draw ( void ); | |||
| void draw_overlay ( void ); | |||
| int handle ( int m ); | |||
| static void update_cb ( void *arg ); | |||
| void select( const Rectangle &r ); | |||
| @@ -0,0 +1,33 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #include "Transport.H" | |||
| #include "Engine.H" | |||
| Transport transport; | |||
| void | |||
| Transport::poll ( void ) | |||
| { | |||
| jack_transport_state_t ts; | |||
| ts = jack_transport_query( engine->client(), this ); | |||
| rolling = ts == JackTransportRolling; | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #pragma once | |||
| #include <jack/transport.h> | |||
| #include "types.h" | |||
| struct Transport : public jack_position_t | |||
| { | |||
| bool rolling; | |||
| void poll ( void ); | |||
| }; | |||
| extern Transport transport; | |||