diff --git a/src/gui/panels/timeline-panel.cpp b/src/gui/panels/timeline-panel.cpp index 7d5b4fa6c..0036be478 100644 --- a/src/gui/panels/timeline-panel.cpp +++ b/src/gui/panels/timeline-panel.cpp @@ -138,12 +138,13 @@ TimelinePanel::TimelinePanel (workspace::PanelManager &panel_manager, // wire the zoom slider to react on timeline state changes zoomScale.wireTimelineState (timelineWidget->get_state(), timelineWidget->state_changed_signal()); - + // Set the initial UI state update_sequence_chooser(); update_tool_buttons(); update_zoom_buttons(); show_time (Time::ZERO); + std::cout << timelineWidget->get_state()->get_view_window().get_time_scale() << "\n"; } const char* @@ -335,17 +336,17 @@ TimelinePanel::update_zoom_buttons() { REQUIRE(timelineWidget); - const shared_ptr state = - timelineWidget->get_state(); - if(state) - { - timeline::TimelineViewWindow &viewWindow = - state->get_view_window(); - - zoomIn.set_sensitive(viewWindow.get_time_scale() != 1); - zoomOut.set_sensitive(viewWindow.get_time_scale() - != TimelineWidget::MaxScale); - } + int64_t current_scale = + timelineWidget->get_state()->get_view_window().get_time_scale(); + + double linear_scale = + (double) current_scale / (double) TimelineWidget::MaxScale; + + /* We have to Revese the Smoothing */ + double new_relative_scale = + pow(linear_scale,(1.0/9.0)); + + timelineWidget->zoom_view (new_relative_scale); } void diff --git a/src/gui/widgets/timeline/timeline-ibeam-tool.cpp b/src/gui/widgets/timeline/timeline-ibeam-tool.cpp index 6f20997e7..67da78ecd 100644 --- a/src/gui/widgets/timeline/timeline-ibeam-tool.cpp +++ b/src/gui/widgets/timeline/timeline-ibeam-tool.cpp @@ -180,8 +180,8 @@ IBeamTool::on_motion_notify_event(GdkEventMotion *event) bool IBeamTool::on_scroll_slide_timer() { - const Gdk::Rectangle body_rect(get_body_rectangle()); - view_window().shift_view(body_rect.get_width(), scrollSlideRate); + const Gdk::Rectangle body_rect (get_body_rectangle()); + view_window().shift_view (body_rect.get_width(), scrollSlideRate); // Return true to keep the timer going return true; diff --git a/src/gui/widgets/timeline/timeline-state.cpp b/src/gui/widgets/timeline/timeline-state.cpp index 3e512cc1e..a38911ff5 100644 --- a/src/gui/widgets/timeline/timeline-state.cpp +++ b/src/gui/widgets/timeline/timeline-state.cpp @@ -52,19 +52,18 @@ TimelineState::TimelineState (shared_ptr source_sequence) { REQUIRE(sequence); - // Initialize the listener + // Initialize the selection listener selectionListener (TimeSpan (Time::ZERO, Duration::NIL)); - - ////////////////////////////////////////////////////////////TICKET #798: how to handle GUI default state - const int64_t DEFAULT_TIMELINE_SCALE =21000000; - - viewWindow.set_time_scale(DEFAULT_TIMELINE_SCALE); - selectionListener.connect( mem_fun(*this, &TimelineState::on_selection_changed)); + ////////////////////////////////////////////////////////////TICKET #798: how to handle GUI default state + const int64_t DEFAULT_TIMELINE_SCALE =6400; + + viewWindow.set_time_scale(DEFAULT_TIMELINE_SCALE); + setSelection (Mutation::changeTime (Time(FSecs(2)))); - setSelection (Mutation::changeDuration(Duration(FSecs(2)))); + setSelection (Mutation::changeDuration (Duration(FSecs(2)))); //////////////////////////////////////////////////////TICKET #797 : this is cheesy. Should provide a single Mutation to change all } diff --git a/src/gui/widgets/timeline/timeline-state.hpp b/src/gui/widgets/timeline/timeline-state.hpp index f4bc57e75..45ef48d13 100644 --- a/src/gui/widgets/timeline/timeline-state.hpp +++ b/src/gui/widgets/timeline/timeline-state.hpp @@ -49,7 +49,9 @@ typedef Control SelectionControl; * SelectionListener is a template class which emits a signal when * the value is changed by it's associated time::Control object. * SelectionListener wraps a sigc::signal that emits every time - * the selection is changed + * the selection is changed by the time::Control object. + * SelectionListener does NOT emit the signal if a change to the + * selection is made outside of the Control/Listener partnership. */ template @@ -66,7 +68,7 @@ class SelectionListener void operator() (TI const& changeValue) const { - valueChangedSignal.emit(changeValue); + valueChangedSignal.emit (changeValue); } diff --git a/src/gui/widgets/timeline/timeline-view-window.hpp b/src/gui/widgets/timeline/timeline-view-window.hpp index b9536deac..d52f84406 100644 --- a/src/gui/widgets/timeline/timeline-view-window.hpp +++ b/src/gui/widgets/timeline/timeline-view-window.hpp @@ -138,6 +138,13 @@ public: private: TimeVar timeOffset; + + /** + * The scale of the Timline Body. + * @remarks This value represents the time span that is visible in + * the TimelineBodyWidget. Smaller numbers here will "zoom in" + * while larger numbers will "zoom out" + */ int64_t timeScale; sigc::signal changedSignal; diff --git a/src/gui/widgets/timeline/timeline-zoom-scale.cpp b/src/gui/widgets/timeline/timeline-zoom-scale.cpp index 7452d20cd..2ee413c71 100644 --- a/src/gui/widgets/timeline/timeline-zoom-scale.cpp +++ b/src/gui/widgets/timeline/timeline-zoom-scale.cpp @@ -65,26 +65,27 @@ TimelineZoomScale::TimelineZoomScale() , button_step_size(0.03) { /* Setup the Slider Control */ - slider.set_adjustment(adjustment); - slider.set_size_request(123,10); - slider.set_digits(6); - slider.set_inverted(true); - slider.set_draw_value(false); + slider.set_adjustment (adjustment); + slider.set_size_request (123,10); + slider.set_digits (6); + + /* Inverted because smaller values "zoom in" */ + slider.set_inverted (true); + + slider.set_draw_value (false); /* Make our connections */ zoomIn.signal_clicked(). - connect(sigc::mem_fun(this, &TimelineZoomScale::on_zoom_in_clicked)); - + connect (sigc::mem_fun(this, &TimelineZoomScale::on_zoom_in_clicked)); zoomOut.signal_clicked(). - connect(sigc::mem_fun(this, &TimelineZoomScale::on_zoom_out_clicked)); - + connect (sigc::mem_fun(this, &TimelineZoomScale::on_zoom_out_clicked)); adjustment.signal_value_changed(). - connect(sigc::mem_fun(this, &TimelineZoomScale::on_zoom)); + connect (sigc::mem_fun(this, &TimelineZoomScale::on_zoom)); /* Add Our Widgets and show them */ - pack_start(zoomOut,PACK_SHRINK); - pack_start(slider,PACK_SHRINK); - pack_start(zoomIn,PACK_SHRINK); + pack_start (zoomOut,PACK_SHRINK); + pack_start (slider,PACK_SHRINK); + pack_start (zoomIn,PACK_SHRINK); show_all(); } @@ -94,7 +95,8 @@ TimelineZoomScale::wireTimelineState (shared_ptr currentState, TimelineWidget::TimelineStateChangeSignal stateChangeSignal) { on_timeline_state_changed (currentState); - stateChangeSignal.connect (sigc::mem_fun(this, &TimelineZoomScale::on_timeline_state_changed)); + stateChangeSignal.connect ( + sigc::mem_fun(this, &TimelineZoomScale::on_timeline_state_changed)); } void @@ -110,7 +112,6 @@ TimelineZoomScale::on_timeline_state_changed (shared_ptr newState (double) current_scale / (double) TimelineWidget::MaxScale; /* We have to Revese the Smoothing */ - TODO("Find a central place for ZoomSmoothingFactor Variable. right now it is 9.0"); double new_relative_scale = pow(linear_scale,(1.0/9.0)); @@ -134,7 +135,7 @@ TimelineZoomScale::on_zoom_out_clicked() void TimelineZoomScale::on_zoom() { - zoomSignal.emit(adjustment.get_value()) ; + zoomSignal.emit (adjustment.get_value()) ; } sigc::signal diff --git a/src/gui/widgets/timeline/timeline-zoom-scale.hpp b/src/gui/widgets/timeline/timeline-zoom-scale.hpp index a57fdd6df..694252319 100644 --- a/src/gui/widgets/timeline/timeline-zoom-scale.hpp +++ b/src/gui/widgets/timeline/timeline-zoom-scale.hpp @@ -51,6 +51,8 @@ public: */ sigc::signal signal_zoom(); + void set_value(double val) { adjustment.set_value(val); } + void wireTimelineState (shared_ptr currentState, TimelineWidget::TimelineStateChangeSignal);