Merge branch 'ardour'
This commit is contained in:
commit
64cc01b0b1
@ -1323,10 +1323,6 @@
|
||||
RelativePath="..\gtk2_ardour\tempo_dialog.cc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\tempo_lines.cc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\time_axis_view.cc"
|
||||
>
|
||||
@ -1606,7 +1602,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\canvas_vars.h"
|
||||
RelativePath="..\gtk2_ardour\canvas_vars.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -1645,10 +1641,6 @@
|
||||
RelativePath="..\gtk2_ardour\crossfade_edit.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\crossfade_view.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\cursor_context.h"
|
||||
>
|
||||
@ -1682,7 +1674,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\editing_syms.h"
|
||||
RelativePath="..\gtk2_ardour\editing_syms.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -1942,7 +1934,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\luasignal_syms.h"
|
||||
RelativePath="..\gtk2_ardour\luasignal_syms.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -2537,10 +2529,6 @@
|
||||
RelativePath="..\gtk2_ardour\tempo_dialog.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\tempo_lines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\time_axis_view.h"
|
||||
>
|
||||
@ -2610,7 +2598,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\gtk2_ardour\ui_config_vars.h"
|
||||
RelativePath="..\gtk2_ardour\ui_config_vars.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
|
@ -2,7 +2,7 @@
|
||||
# This is the GTK style file for Ardour
|
||||
#
|
||||
|
||||
style "very_small_text"
|
||||
style "smaller_text"
|
||||
{
|
||||
font_name = "%FONT_SMALLER%"
|
||||
}
|
||||
@ -431,7 +431,7 @@ style "transport_rec_button_alternate"
|
||||
bg[ACTIVE] = { 0.91, 0.68, 0.68 }
|
||||
}
|
||||
|
||||
style "shuttle_control" = "very_small_text"
|
||||
style "shuttle_control" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = { 0.85, 0.92, 0.98 }
|
||||
fg[ACTIVE] = { 0.85, 0.92, 0.98 }
|
||||
@ -1060,7 +1060,7 @@ style "selected_strip_frame"
|
||||
bg[NORMAL] = { 0.79, 0.28, 0.18 }
|
||||
}
|
||||
|
||||
style "flashing_alert" = "very_small_text"
|
||||
style "flashing_alert" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||
bg[NORMAL] = { 0.26, 0.26, 0.31 }
|
||||
|
@ -434,7 +434,7 @@ style "transport_rec_button_alternate"
|
||||
bg[ACTIVE] = { 0.91, 0.68, 0.68 }
|
||||
}
|
||||
|
||||
style "shuttle_control" = "very_small_text"
|
||||
style "shuttle_control" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = { 0.85, 0.92, 0.98 }
|
||||
fg[ACTIVE] = { 0.85, 0.92, 0.98 }
|
||||
@ -1064,7 +1064,7 @@ style "selected_strip_frame"
|
||||
bg[NORMAL] = { 0.79, 0.28, 0.18 }
|
||||
}
|
||||
|
||||
style "flashing_alert" = "very_small_text"
|
||||
style "flashing_alert" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = { 0, 0, 0 }
|
||||
bg[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||
|
@ -2393,7 +2393,10 @@ AudioClock::dpi_reset ()
|
||||
*/
|
||||
first_width = 0;
|
||||
first_height = 0;
|
||||
queue_resize ();
|
||||
|
||||
if (get_realized ()) {
|
||||
queue_resize ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/label.h>
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include <gtkmm/table.h>
|
||||
|
||||
#include "ardour/ardour.h"
|
||||
|
@ -225,6 +225,19 @@ AutomationLine::hide ()
|
||||
set_visibility (AutomationLine::VisibleAspects (_visible & ~Line));
|
||||
}
|
||||
|
||||
void
|
||||
AutomationLine::hide_all ()
|
||||
{
|
||||
set_visibility (AutomationLine::VisibleAspects (0));
|
||||
}
|
||||
|
||||
void
|
||||
AutomationLine::show ()
|
||||
{
|
||||
/* hide everything */
|
||||
set_visibility (AutomationLine::VisibleAspects (~0));
|
||||
}
|
||||
|
||||
double
|
||||
AutomationLine::control_point_box_size ()
|
||||
{
|
||||
|
@ -118,6 +118,8 @@ public:
|
||||
void remove_visibility (VisibleAspects);
|
||||
|
||||
void hide ();
|
||||
void hide_all ();
|
||||
void show ();
|
||||
void set_height (guint32);
|
||||
|
||||
bool get_uses_gain_mapping () const;
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "pbd/xml++.h"
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "ardour/automation_control.h"
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
#include "gui_object.h"
|
||||
|
@ -802,7 +802,7 @@ StepView::set_timing_text ()
|
||||
if (_step.offset() == Temporal::Beats()) {
|
||||
text->set (X_("0"));
|
||||
} else {
|
||||
const int64_t gcd = boost::integer::gcd (_step.offset().to_ticks(), int64_t (1920));
|
||||
const int64_t gcd = std::gcd (_step.offset().to_ticks(), int64_t (1920));
|
||||
const int64_t n = _step.offset().to_ticks() / gcd;
|
||||
const int64_t d = 1920 / gcd;
|
||||
text->set (string_compose ("%1/%2", n, d));
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
#include <gtkmm/entry.h>
|
||||
#include <gtkmm/liststore.h>
|
||||
#include <gtkmm/treeview.h>
|
||||
|
@ -22,8 +22,9 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
CANVAS_FONT_VARIABLE(SmallFont, "small font")
|
||||
CANVAS_FONT_VARIABLE(VerySmallFont, "very small font")
|
||||
CANVAS_FONT_VARIABLE(SmallerFont, "smaller font")
|
||||
CANVAS_FONT_VARIABLE(SmallFont, "small font")
|
||||
CANVAS_FONT_VARIABLE(NormalFont, "normal font")
|
||||
CANVAS_FONT_VARIABLE(BigFont, "big font")
|
||||
CANVAS_FONT_VARIABLE(LargeFont, "large font")
|
@ -290,7 +290,12 @@ style "status_bar_box"
|
||||
bg[NORMAL] = @background
|
||||
}
|
||||
|
||||
style "very_small_text"
|
||||
style "smaller_text"
|
||||
{
|
||||
font_name = "@FONTFAMILY@ @FONT_VERYSMALL@"
|
||||
}
|
||||
|
||||
style "smaller_text"
|
||||
{
|
||||
font_name = "@FONTFAMILY@ @FONT_SMALLER@"
|
||||
}
|
||||
@ -386,7 +391,7 @@ style "verbose_canvas_cursor" = "big_bold_text"
|
||||
{
|
||||
}
|
||||
|
||||
style "marker_text" = "small text"
|
||||
style "marker_text" = "small_text"
|
||||
{
|
||||
}
|
||||
|
||||
@ -400,7 +405,7 @@ style "midi_tracer_textview" = "medium_monospace_text"
|
||||
|
||||
}
|
||||
|
||||
style "time_axis_view_item_name" = "very small text"
|
||||
style "time_axis_view_item_name" = "smaller_text"
|
||||
{
|
||||
}
|
||||
|
||||
@ -409,7 +414,7 @@ style "midi_tracer_textview" = "medium_monospace_text"
|
||||
|
||||
}
|
||||
|
||||
style "time_axis_view_item_name" = "very small text"
|
||||
style "time_axis_view_item_name" = "smaller_text"
|
||||
{
|
||||
}
|
||||
style "contrasting_popup" = "medium_monospace_text"
|
||||
@ -506,15 +511,15 @@ style "meterbridge_label" = "small_text"
|
||||
{
|
||||
}
|
||||
|
||||
style "midi_device" = "very_small_text"
|
||||
style "midi_device" = "smaller_text"
|
||||
{
|
||||
}
|
||||
|
||||
style "solo_isolate" = "very_small_text"
|
||||
style "solo_isolate" = "smaller_text"
|
||||
{
|
||||
}
|
||||
|
||||
style "solo_safe" = "very_small_text"
|
||||
style "solo_safe" = "smaller_text"
|
||||
{
|
||||
}
|
||||
|
||||
@ -547,7 +552,7 @@ style "midi_channel_selector_button"
|
||||
fg[ACTIVE] = @light_text_on_dark
|
||||
}
|
||||
|
||||
style "shuttle_control" = "very_small_text"
|
||||
style "shuttle_control" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = @control_text2
|
||||
fg[ACTIVE] = @control_text2
|
||||
@ -606,7 +611,7 @@ style "font_scale_slider" = "default"
|
||||
bg[NORMAL] = shade(1.4, @background)
|
||||
}
|
||||
|
||||
style "very_small_bright_when_active" = "very_small_text"
|
||||
style "very_small_bright_when_active" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = @foreground
|
||||
bg[NORMAL] = @background
|
||||
@ -761,14 +766,14 @@ style "small_red_on_black_entry" = "small_bold_text"
|
||||
bg[ACTIVE] = @bases
|
||||
}
|
||||
|
||||
style "audio_bus_base" = "very_small_text"
|
||||
style "audio_bus_base" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = @foreground
|
||||
bg[NORMAL] = @audio_bus
|
||||
bg[ACTIVE] = @background
|
||||
}
|
||||
|
||||
style "foldback_bus_base" = "very_small_text"
|
||||
style "foldback_bus_base" = "smaller_text"
|
||||
{
|
||||
fg[NORMAL] = @foreground
|
||||
bg[NORMAL] = @foldback_bg
|
||||
@ -933,7 +938,7 @@ style "plugin_slider"
|
||||
text[PRELIGHT] = @texts
|
||||
}
|
||||
|
||||
style "processor_control_button" = "very_small_text"
|
||||
style "processor_control_button" = "smaller_text"
|
||||
{
|
||||
}
|
||||
|
||||
@ -961,7 +966,7 @@ style "inspector_track_list_display" = "track_list_display"
|
||||
|
||||
}
|
||||
|
||||
style "processor_list" = "very_small_text"
|
||||
style "processor_list" = "smaller_text"
|
||||
{
|
||||
bg[NORMAL] = @bases
|
||||
bg[ACTIVE] = shade (1.8, @fg_selected)
|
||||
@ -1002,7 +1007,7 @@ style "selected_strip_frame"
|
||||
bg[NORMAL] = darker(@bright_indicator)
|
||||
}
|
||||
|
||||
style "flashing_alert" = "very_small_text"
|
||||
style "flashing_alert" = "smaller_text"
|
||||
{
|
||||
GtkButton::child-displacement-x = 0
|
||||
GtkButton::child-displacement-y = 0
|
||||
|
@ -28,12 +28,17 @@
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/button.h>
|
||||
#include <gtkmm/radiobutton.h>
|
||||
#include <gtkmm/table.h>
|
||||
|
||||
#include "canvas/canvas.h"
|
||||
#include "canvas/poly_line.h"
|
||||
|
||||
#include "evoral/Curve.h"
|
||||
#include "ardour/automation_list.h"
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
#include "waveview/wave_view.h"
|
||||
|
||||
#include "ardour_dialog.h"
|
||||
|
||||
namespace ARDOUR
|
||||
|
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2014 Paul Davis <paul@linuxaudiosystems.com>
|
||||
* Copyright (C) 2005 Nick Mainsbridge <mainsbridge@gmail.com>
|
||||
* Copyright (C) 2005 Taybin Rutkin <taybin@taybin.com>
|
||||
* Copyright (C) 2006-2011 David Robillard <d@drobilla.net>
|
||||
* Copyright (C) 2007-2011 Carl Hetherington <carl@carlh.net>
|
||||
*
|
||||
* 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; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "pbd/signals.h"
|
||||
#include "ardour/crossfade.h"
|
||||
|
||||
#include "time_axis_view_item.h"
|
||||
|
||||
class RouteTimeAxisView;
|
||||
class AudioRegionView;
|
||||
|
||||
namespace ArdourCanvas {
|
||||
class PolyLine;
|
||||
}
|
||||
|
||||
class CrossfadeView : public TimeAxisViewItem
|
||||
{
|
||||
public:
|
||||
CrossfadeView (ArdourCanvas::Container*,
|
||||
RouteTimeAxisView&,
|
||||
std::shared_ptr<ARDOUR::Crossfade>,
|
||||
double initial_samples_per_pixel,
|
||||
Gdk::Color& basic_color,
|
||||
AudioRegionView& leftview,
|
||||
AudioRegionView& rightview);
|
||||
|
||||
~CrossfadeView ();
|
||||
|
||||
std::shared_ptr<ARDOUR::Crossfade> crossfade; // ok, let 'em have it
|
||||
|
||||
AudioRegionView& left_view; // and these too
|
||||
AudioRegionView& right_view;
|
||||
|
||||
void set_heights (double, double);
|
||||
|
||||
bool valid() const { return _valid; }
|
||||
bool visible() const { return _visible; }
|
||||
void set_valid (bool yn);
|
||||
|
||||
static PBD::Signal<void(CrossfadeView*)> CatchDeletion;
|
||||
|
||||
void fake_hide ();
|
||||
void hide ();
|
||||
void show ();
|
||||
void horizontal_position_changed ();
|
||||
|
||||
protected:
|
||||
void reset_width_dependent_items (double pixel_width);
|
||||
|
||||
private:
|
||||
bool _valid;
|
||||
bool _visible;
|
||||
bool _all_in_view;
|
||||
double _child_height;
|
||||
|
||||
ArdourCanvas::PolyLine *fade_in;
|
||||
ArdourCanvas::PolyLine *fade_out;
|
||||
|
||||
void crossfade_changed (const PBD::PropertyChange&);
|
||||
void crossfade_fades_changed ();
|
||||
void active_changed ();
|
||||
void redraw_curves ();
|
||||
void color_handler ();
|
||||
};
|
||||
|
@ -89,7 +89,7 @@ class CueEditor : public EditingContext, public PBD::HistoryOwner, public sigc::
|
||||
*/
|
||||
void step_mouse_mode (bool next);
|
||||
/** @return The current mouse mode (gain, object, range, timefx etc.)
|
||||
* (defined in editing_syms.h)
|
||||
* (defined in editing_syms.inc.h)
|
||||
*/
|
||||
Editing::MouseMode current_mouse_mode () const;
|
||||
/** cue editors are *always* used for internal editing */
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <gtkmm/window.h>
|
||||
#include <gtkmm/colorselection.h>
|
||||
#include <gtkmm/menu.h>
|
||||
|
||||
#include "pbd/properties.h"
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
<Option name="font-scale" value="102400"/>
|
||||
</UI>
|
||||
<Canvas>
|
||||
<Option name="very small font" value="@FONT_VERYSMALL@"/>
|
||||
<Option name="small font" value="@FONT_SMALL@"/>
|
||||
<Option name="smaller font" value="@FONT_SMALLER@"/>
|
||||
<Option name="normal font" value="@FONT_NORMAL@"/>
|
||||
|
@ -44,14 +44,14 @@ namespace Editing {
|
||||
GridType
|
||||
str2gridtype (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return GridTypeBar;
|
||||
}
|
||||
|
||||
#undef GRIDTYPE
|
||||
#define GRIDTYPE(s) N_(#s),
|
||||
const char *gridtypestrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef GRIDTYPE
|
||||
@ -63,14 +63,14 @@ const char *gridtypestrs[] = {
|
||||
SnapMode
|
||||
str2snapmode (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return SnapMagnetic;
|
||||
}
|
||||
|
||||
#undef SNAPMODE
|
||||
#define SNAPMODE(s) N_(#s),
|
||||
const char *snapmodestrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef SNAPMODE
|
||||
@ -83,14 +83,14 @@ const char *snapmodestrs[] = {
|
||||
RegionListSortType
|
||||
str2regionlistsorttype (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return ByName;
|
||||
}
|
||||
|
||||
#undef REGIONLISTSORTTYPE
|
||||
#define REGIONLISTSORTTYPE(s) N_(#s),
|
||||
const char *regionlistsorttypestrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef REGIONLISTSORTTYPE
|
||||
@ -102,14 +102,14 @@ const char *regionlistsorttypestrs[] = {
|
||||
MouseMode
|
||||
str2mousemode (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return MouseObject;
|
||||
}
|
||||
|
||||
#undef MOUSEMODE
|
||||
#define MOUSEMODE(s) N_(#s),
|
||||
const char *mousemodestrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef MOUSEMODE
|
||||
@ -121,14 +121,14 @@ const char *mousemodestrs[] = {
|
||||
ZoomFocus
|
||||
str2zoomfocus (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return ZoomFocusPlayhead;
|
||||
}
|
||||
|
||||
#undef ZOOMFOCUS
|
||||
#define ZOOMFOCUS(s) N_(#s),
|
||||
const char *zoomfocusstrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef ZOOMFOCUS
|
||||
@ -140,14 +140,14 @@ const char *zoomfocusstrs[] = {
|
||||
DisplayControl
|
||||
str2displaycontrol (const string & str) {
|
||||
const char* type = str.c_str();
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
return FollowPlayhead;
|
||||
}
|
||||
|
||||
#undef DISPLAYCONTROL
|
||||
#define DISPLAYCONTROL(s) N_(#s),
|
||||
const char *displaycontrolstrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef DISPLAYCONTROL
|
||||
@ -157,7 +157,7 @@ const char *displaycontrolstrs[] = {
|
||||
#undef IMPORTMODE
|
||||
#define IMPORTMODE(s) N_(#s),
|
||||
const char *importmodestrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef IMPORTMODE
|
||||
@ -167,7 +167,7 @@ const char *importmodestrs[] = {
|
||||
#undef TEMPOEDITBEHAVIOR
|
||||
#define TEMPOEDITBEHAVIOR(s) N_(#s),
|
||||
const char *tempoeditbehaviorstrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef TEMPOEDITBEHAVIOR
|
||||
@ -176,7 +176,7 @@ const char *tempoeditbehaviorstrs[] = {
|
||||
#undef NOTENAMEDISPLAY
|
||||
#define NOTENAMEDISPLAY(s) N_(#s),
|
||||
const char *notenamedisplaystrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef NOTENAMEDISPLAY
|
||||
@ -185,7 +185,7 @@ const char *notenamedisplaystrs[] = {
|
||||
#undef MARKERCLICKBEHAVIOR
|
||||
#define MARKERCLICKBEHAVIOR(s) N_(#s),
|
||||
const char *markerclickbehaviorstrs[] = {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
0
|
||||
};
|
||||
#undef MARKERCLICKBEHAVIOR
|
||||
|
@ -50,7 +50,7 @@ namespace Editing {
|
||||
#undef GRIDTYPE
|
||||
#define GRIDTYPE(a) a,
|
||||
enum GridType {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
static const int DRAW_VEL_AUTO = -1;
|
||||
@ -68,7 +68,7 @@ GridType str2gridtype(const std::string &);
|
||||
#undef SNAPMODE
|
||||
#define SNAPMODE(a) a,
|
||||
enum SnapMode {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *snapmodestrs[];
|
||||
@ -82,7 +82,7 @@ SnapMode str2snapmode(const std::string &);
|
||||
#undef REGIONLISTSORTTYPE
|
||||
#define REGIONLISTSORTTYPE(a) a,
|
||||
enum RegionListSortType {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *regionlistsorttypestrs[];
|
||||
@ -96,7 +96,7 @@ RegionListSortType str2regionlistsorttype(const std::string &);
|
||||
#undef MOUSEMODE
|
||||
#define MOUSEMODE(a) a,
|
||||
enum MouseMode {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *mousemodestrs[];
|
||||
@ -110,7 +110,7 @@ MouseMode str2mousemode(const std::string &);
|
||||
#undef MIDIEDITMODE
|
||||
#define MIDIEDITMODE(a) a,
|
||||
enum MidiEditMode {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *midieditmodestrs[];
|
||||
@ -124,7 +124,7 @@ MidiEditMode str2midieditmode(const std::string &);
|
||||
#undef ZOOMFOCUS
|
||||
#define ZOOMFOCUS(a) a,
|
||||
enum ZoomFocus {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *zoomfocusstrs[];
|
||||
@ -138,7 +138,7 @@ ZoomFocus str2zoomfocus(const std::string &);
|
||||
#undef DISPLAYCONTROL
|
||||
#define DISPLAYCONTROL(a) a,
|
||||
enum DisplayControl {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *displaycontrolstrs[];
|
||||
@ -153,7 +153,7 @@ DisplayControl str2displaycontrol (const std::string &);
|
||||
#undef IMPORTMODE
|
||||
#define IMPORTMODE(a) a,
|
||||
enum ImportMode {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
#undef IMPORTMODE
|
||||
@ -163,7 +163,7 @@ enum ImportMode {
|
||||
#undef IMPORTPOSITION
|
||||
#define IMPORTPOSITION(a) a,
|
||||
enum ImportPosition {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
#undef IMPORTPOSITION
|
||||
@ -173,7 +173,7 @@ enum ImportPosition {
|
||||
#undef IMPORTDISPOSITION
|
||||
#define IMPORTDISPOSITION(a) a,
|
||||
enum ImportDisposition {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
#undef IMPORTDISPOSITION
|
||||
@ -183,7 +183,7 @@ enum ImportDisposition {
|
||||
#undef EDITPOINT
|
||||
#define EDITPOINT(a) a,
|
||||
enum EditPoint {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
#undef EDITPOINT
|
||||
@ -193,7 +193,7 @@ enum EditPoint {
|
||||
#undef INSERTTIMEOPT
|
||||
#define INSERTTIMEOPT(a) a,
|
||||
enum InsertTimeOption {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
#undef INSERTTIMEOPT
|
||||
@ -202,7 +202,7 @@ enum InsertTimeOption {
|
||||
#undef NOTENAMEDISPLAY
|
||||
#define NOTENAMEDISPLAY(a) a,
|
||||
enum NoteNameDisplay {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
|
||||
extern const char *notenamedisplaystrs[];
|
||||
@ -214,7 +214,7 @@ inline const char* enum2str(NoteNameDisplay m) {return notenamedisplaystrs[m];}
|
||||
#undef MARKERCLICKBEHAVIOR
|
||||
#define MARKERCLICKBEHAVIOR(a) a,
|
||||
enum MarkerClickBehavior {
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
};
|
||||
#undef MARKERCLICKBEHAVIOR
|
||||
#define MARKERCLICKBEHAVIOR(a) /*empty*/
|
||||
|
@ -2469,6 +2469,9 @@ EditingContext::reset_zoom (samplecnt_t spp)
|
||||
|
||||
pending_visual_change.add (VisualChange::ZoomLevel);
|
||||
pending_visual_change.samples_per_pixel = spp;
|
||||
if (spp == 0.0) {
|
||||
PBD::stacktrace (std::cerr, 12);
|
||||
}
|
||||
ensure_visual_change_idle_handler ();
|
||||
}
|
||||
|
||||
|
@ -315,7 +315,7 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
|
||||
void reset_point_selection ();
|
||||
|
||||
/** Set the mouse mode (gain, object, range, timefx etc.)
|
||||
* @param m Mouse mode (defined in editing_syms.h)
|
||||
* @param m Mouse mode (defined in editing_syms.inc.h)
|
||||
* @param force Perform the effects of the change even if no change is required
|
||||
* (ie even if the current mouse mode is equal to @p m)
|
||||
*/
|
||||
@ -325,7 +325,7 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
|
||||
*/
|
||||
virtual void step_mouse_mode (bool next) = 0;
|
||||
/** @return The current mouse mode (gain, object, range, timefx etc.)
|
||||
* (defined in editing_syms.h)
|
||||
* (defined in editing_syms.inc.h)
|
||||
*/
|
||||
Editing::MouseMode current_mouse_mode () const { return mouse_mode; }
|
||||
virtual Editing::MouseMode effective_mouse_mode () const { return mouse_mode; }
|
||||
@ -571,7 +571,7 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
|
||||
|
||||
QuantizeDialog* quantize_dialog;
|
||||
|
||||
friend class TempoMapScope;
|
||||
friend struct TempoMapScope;
|
||||
virtual std::shared_ptr<Temporal::TempoMap const> start_local_tempo_map (std::shared_ptr<Temporal::TempoMap>);
|
||||
virtual void end_local_tempo_map (std::shared_ptr<Temporal::TempoMap const>) { /* no-op by default */ }
|
||||
|
||||
|
@ -20,6 +20,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/colorselection.h>
|
||||
#include <gtkmm/liststore.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
#include <gtkmm/treemodel.h>
|
||||
@ -27,6 +29,9 @@
|
||||
|
||||
#include "editor_component.h"
|
||||
|
||||
#include "ardour/route_group.h"
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
class EditorRouteGroups : public EditorComponent, public ARDOUR::SessionHandlePtr
|
||||
{
|
||||
public:
|
||||
|
@ -134,7 +134,11 @@ Editor::initialize_rulers ()
|
||||
{
|
||||
ruler_grabbed_widget = 0;
|
||||
|
||||
Pango::FontDescription font (UIConfiguration::instance().get_SmallerFont());
|
||||
#ifdef __APPLE__
|
||||
Pango::FontDescription font (UIConfiguration::instance().get_VerySmallFont());
|
||||
#else
|
||||
Pango::FontDescription font (UIConfiguration::instance().get_SmallFont());
|
||||
#endif
|
||||
Pango::FontDescription larger_font (UIConfiguration::instance().get_SmallBoldFont());
|
||||
|
||||
_timecode_metric = new TimecodeMetric (this);
|
||||
|
@ -284,13 +284,13 @@ EditorSections::selection_changed ()
|
||||
/* OK */
|
||||
break;
|
||||
case Editing::MouseObject:
|
||||
if (ActionManager::get_toggle_action ("MouseMode", "set-mouse-mode-object-range")->get_active ()) {
|
||||
if (ActionManager::get_toggle_action (PublicEditor::instance().editor_name().c_str(), "set-mouse-mode-object-range")->get_active ()) {
|
||||
/* smart mode; OK */
|
||||
break;
|
||||
}
|
||||
/*fallthrough*/
|
||||
default:
|
||||
Glib::RefPtr<RadioAction> ract = ActionManager::get_radio_action (X_("MouseMode"), X_("set-mouse-mode-range"));
|
||||
Glib::RefPtr<RadioAction> ract = ActionManager::get_radio_action (PublicEditor::instance().editor_name().c_str(), X_("set-mouse-mode-range"));
|
||||
ract->set_active (true);
|
||||
break;
|
||||
}
|
||||
|
@ -21,7 +21,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ardour/session_handle.h"
|
||||
#include "ardour/types.h"
|
||||
#include "gtkmm2ext/cairo_widget.h"
|
||||
#include "pbd/property_basics.h"
|
||||
|
||||
#include "editor_component.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
@ -29,6 +33,8 @@ namespace ARDOUR {
|
||||
}
|
||||
|
||||
class Editor;
|
||||
class RegionView;
|
||||
class RouteTimeAxisView;
|
||||
|
||||
/** Class to provide a visual summary of the contents of an editor window; represents
|
||||
* the whole session as a set of lines, one per region view.
|
||||
|
@ -303,6 +303,7 @@ Editor::tempo_map_changed ()
|
||||
|
||||
reset_metric_marks ();
|
||||
update_tempo_based_rulers ();
|
||||
update_section_rects();
|
||||
update_all_marker_lanes ();
|
||||
maybe_draw_grid_lines ();
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef __gtk2_ardour_ghost_event_h__
|
||||
#define __gtk2_ardour_ghost_event_h__
|
||||
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <sigc++/trackable.h>
|
||||
|
||||
|
@ -192,7 +192,6 @@ MidiGhostRegion::MidiGhostRegion(MidiRegionView& rv,
|
||||
: GhostRegion(rv, tv.ghost_group(), tv, source_tv, initial_unit_pos)
|
||||
, _note_group (new ArdourCanvas::Container (group))
|
||||
, parent_mrv (rv)
|
||||
, _optimization_iterator(events.end())
|
||||
{
|
||||
_outline = UIConfiguration::instance().color ("ghost track midi outline");
|
||||
|
||||
@ -298,7 +297,6 @@ MidiGhostRegion::add_note (NoteBase* n)
|
||||
{
|
||||
GhostEvent* event = new GhostEvent (n, _note_group);
|
||||
events.insert (make_pair (n->note(), event));
|
||||
_optimization_iterator = events.end();
|
||||
|
||||
event->item->set_fill_color (UIConfiguration::instance().color_mod(n->base_color(), "ghost track midi fill"));
|
||||
event->item->set_outline_color (_outline);
|
||||
@ -332,7 +330,6 @@ MidiGhostRegion::clear_events()
|
||||
{
|
||||
_note_group->clear (true);
|
||||
events.clear ();
|
||||
_optimization_iterator = events.end();
|
||||
}
|
||||
|
||||
/** Update the positions of our representation of a note.
|
||||
@ -393,8 +390,6 @@ MidiGhostRegion::remove_note (NoteBase* note)
|
||||
|
||||
delete f->second;
|
||||
events.erase (f);
|
||||
|
||||
_optimization_iterator = events.end ();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -133,6 +133,5 @@ public:
|
||||
GhostEvent* find_event (std::shared_ptr<GhostEvent::NoteType>);
|
||||
|
||||
GhostEvent::EventList events;
|
||||
GhostEvent::EventList::iterator _optimization_iterator;
|
||||
};
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "canvas/container.h"
|
||||
#include "canvas/line_set.h"
|
||||
#include "canvas/ruler.h"
|
||||
#include "ardour/tempo.h"
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <gtkmm/menu.h>
|
||||
|
||||
#include "ardour/data_type.h"
|
||||
#include "ardour/types.h"
|
||||
|
||||
#include "widgets/ardour_button.h"
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <gtkmm/action.h>
|
||||
#include <gtkmm/buttonbox.h>
|
||||
#include <gtkmm/notebook.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
|
@ -19,6 +19,11 @@
|
||||
#ifndef _gtkardour_loudness_settings_h_
|
||||
#define _gtkardour_loudness_settings_h_
|
||||
|
||||
#include <cstddef>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class XMLNode;
|
||||
|
||||
struct CLoudnessPreset
|
||||
|
@ -591,6 +591,35 @@ protected:
|
||||
Gtk::FileChooserWidget _fc;
|
||||
};
|
||||
|
||||
class LuaDialogText : public LuaDialogWidget
|
||||
{
|
||||
public:
|
||||
LuaDialogText (std::string const& key, std::string const& title, std::string const& dflt)
|
||||
: LuaDialogWidget (key, title)
|
||||
{
|
||||
_text_view.set_wrap_mode (Gtk::WRAP_WORD);
|
||||
_text_view.get_buffer()->set_text (dflt);
|
||||
|
||||
_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
|
||||
|
||||
_scrolled_window.add(_text_view);
|
||||
}
|
||||
|
||||
Gtk::Widget* widget ()
|
||||
{
|
||||
return &_scrolled_window;
|
||||
}
|
||||
|
||||
void assign (luabridge::LuaRef* rv) const
|
||||
{
|
||||
(*rv)[_key] = std::string (_text_view.get_buffer()->get_text());
|
||||
}
|
||||
|
||||
protected:
|
||||
Gtk::TextView _text_view;
|
||||
Gtk::ScrolledWindow _scrolled_window;
|
||||
};
|
||||
|
||||
/* *****************************************************************************
|
||||
* Lua Parameter Dialog
|
||||
*/
|
||||
@ -659,6 +688,12 @@ Dialog::Dialog (std::string const& title, luabridge::LuaRef lr)
|
||||
dflt = i.value ()["default"].cast<std::string> ();
|
||||
}
|
||||
w = new LuaDialogEntry (key, title, dflt);
|
||||
} else if (type == "textarea") {
|
||||
std::string dflt;
|
||||
if (i.value ()["default"].isString ()) {
|
||||
dflt = i.value ()["default"].cast<std::string> ();
|
||||
}
|
||||
w = new LuaDialogText (key, title, dflt);
|
||||
} else if (type == "radio") {
|
||||
std::string dflt;
|
||||
if (!i.value ()["values"].isTable ()) {
|
||||
|
@ -365,7 +365,7 @@ LuaSignal
|
||||
str2luasignal (const std::string &str) {
|
||||
const char* type = str.c_str();
|
||||
if (0) { }
|
||||
# include "luasignal_syms.h"
|
||||
# include "luasignal_syms.inc.h"
|
||||
else {
|
||||
PBD::fatal << string_compose (_("programming error: %1: %2"), "Impossible LuaSignal type", str) << endmsg;
|
||||
abort(); /*NOTREACHED*/
|
||||
@ -379,7 +379,7 @@ str2luasignal (const std::string &str) {
|
||||
#define SESSION(name,c) N_(#name),
|
||||
#define ENGINE(name,c) N_(#name),
|
||||
const char *luasignalstr[] = {
|
||||
# include "luasignal_syms.h"
|
||||
# include "luasignal_syms.inc.h"
|
||||
0
|
||||
};
|
||||
|
||||
@ -551,7 +551,7 @@ LuaInstance::register_hooks (lua_State* L)
|
||||
#define SESSION(name,c) .addConst (stringify(name), (LuaSignal::LuaSignal)LuaSignal::name)
|
||||
luabridge::getGlobalNamespace (L)
|
||||
.beginNamespace ("LuaSignal")
|
||||
# include "luasignal_syms.h"
|
||||
# include "luasignal_syms.inc.h"
|
||||
.endNamespace ();
|
||||
#undef ENGINE
|
||||
#undef SESSION
|
||||
@ -1115,7 +1115,7 @@ LuaInstance::register_classes (lua_State* L, bool sandbox)
|
||||
.addFunction ("set_" # var, &UIConfiguration::set_##var) \
|
||||
.addProperty (#var, &UIConfiguration::get_##var, &UIConfiguration::set_##var)
|
||||
|
||||
#include "ui_config_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
.endClass()
|
||||
@ -1147,7 +1147,7 @@ LuaInstance::register_classes (lua_State* L, bool sandbox)
|
||||
#define NOTENAMEDISPLAY(NAME) .addConst (stringify(NAME), (Editing::NoteNameDisplay)Editing::NAME)
|
||||
luabridge::getGlobalNamespace (L)
|
||||
.beginNamespace ("Editing")
|
||||
# include "editing_syms.h"
|
||||
# include "editing_syms.inc.h"
|
||||
.endNamespace ();
|
||||
|
||||
if (!sandbox) {
|
||||
@ -2380,7 +2380,7 @@ LuaCallback::reconnect_object (T obj)
|
||||
#define SESSION(n,c) else if (i == LuaSignal::n) { if (_session) { connect (LuaSignal::n, _session, &(_session->c)); } }
|
||||
#define STATIC(n,c) else if (i == LuaSignal::n) { connect (LuaSignal::n, obj, c); }
|
||||
if (0) {}
|
||||
# include "luasignal_syms.h"
|
||||
# include "luasignal_syms.inc.h"
|
||||
else {
|
||||
PBD::fatal << string_compose (_("programming error: %1: %2"), "Impossible LuaSignal type", i) << endmsg;
|
||||
abort(); /*NOTREACHED*/
|
||||
|
@ -17,6 +17,9 @@
|
||||
*/
|
||||
#ifndef _luasignal_h_
|
||||
#define _luasignal_h_
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace LuaSignal {
|
||||
|
||||
#define ENGINE(name,c) name,
|
||||
@ -24,7 +27,7 @@ namespace LuaSignal {
|
||||
#define SESSION(name,c) name,
|
||||
|
||||
enum LuaSignal {
|
||||
# include "luasignal_syms.h"
|
||||
# include "luasignal_syms.inc.h"
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
@ -40,6 +40,8 @@
|
||||
#include "widgets/ardour_button.h"
|
||||
#include "widgets/ardour_dropdown.h"
|
||||
|
||||
#include "ardour_window.h"
|
||||
|
||||
class LuaWindow :
|
||||
public ArdourWindow,
|
||||
public PBD::ScopedConnectionList
|
||||
|
@ -466,7 +466,7 @@ MidiCueEditor::toolbox ()
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::data_captured (timecnt_t total_duration)
|
||||
MidiCueEditor::data_captured (samplecnt_t total_duration)
|
||||
{
|
||||
data_capture_duration = total_duration;
|
||||
|
||||
@ -474,14 +474,13 @@ MidiCueEditor::data_captured (timecnt_t total_duration)
|
||||
Glib::signal_idle().connect (sigc::mem_fun (*this, &MidiCueEditor::idle_data_captured));
|
||||
}
|
||||
|
||||
samplepos_t pos = data_capture_duration.end().samples();
|
||||
_playhead_cursor->set_position (pos);
|
||||
_playhead_cursor->set_position (data_capture_duration);
|
||||
}
|
||||
|
||||
bool
|
||||
MidiCueEditor::idle_data_captured ()
|
||||
{
|
||||
double where = duration_to_pixels (data_capture_duration);
|
||||
double where = sample_to_pixel_unrounded (data_capture_duration);
|
||||
|
||||
if (where > _visible_canvas_width * 0.80) {
|
||||
set_samples_per_pixel (samples_per_pixel * 1.5);
|
||||
@ -494,95 +493,19 @@ MidiCueEditor::idle_data_captured ()
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::set_box (std::shared_ptr<ARDOUR::TriggerBox> b)
|
||||
{
|
||||
capture_connections.drop_connections ();
|
||||
idle_update_queued.store (0);
|
||||
|
||||
if (b) {
|
||||
b->Captured.connect (capture_connections, invalidator (*this), std::bind (&MidiCueEditor::data_captured, this, _1), gui_context());
|
||||
/* Don't bind a shared_ptr<TriggerBox> within the lambda */
|
||||
TriggerBox* tb (b.get());
|
||||
b->RecEnableChanged.connect (capture_connections, invalidator (*this), [&, tb]() { box_rec_enable_change (*tb); }, gui_context());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::box_rec_enable_change (ARDOUR::TriggerBox const & b)
|
||||
{
|
||||
if (b.record_enabled()) {
|
||||
view->begin_write();
|
||||
} else {
|
||||
view->end_write ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::trigger_rec_enable_change (ARDOUR::Trigger const & t)
|
||||
{
|
||||
if (t.armed()) {
|
||||
view->begin_write();
|
||||
} else {
|
||||
if (!t.armed()) {
|
||||
view->end_write ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::set_track (std::shared_ptr<ARDOUR::MidiTrack> t)
|
||||
{
|
||||
_track = t;
|
||||
|
||||
view->set_track (t);
|
||||
|
||||
_update_connection.disconnect ();
|
||||
capture_connections.drop_connections ();
|
||||
|
||||
if (t) {
|
||||
set_box (t->triggerbox());
|
||||
_update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &MidiCueEditor::maybe_update));
|
||||
_track->DropReferences.connect (track_connection, invalidator (*this), std::bind (&MidiCueEditor::set_track, this, nullptr), gui_context());
|
||||
} else {
|
||||
set_box (nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiRegion> r)
|
||||
{
|
||||
if (!r) {
|
||||
view->set_region (nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
view->set_region (r);
|
||||
|
||||
/* Compute zoom level to show entire source plus some margin if possible */
|
||||
|
||||
Temporal::timecnt_t duration = Temporal::timecnt_t (r->midi_source()->length().beats());
|
||||
|
||||
bool provided = false;
|
||||
std::shared_ptr<Temporal::TempoMap> map;
|
||||
std::shared_ptr<SMFSource> smf (std::dynamic_pointer_cast<SMFSource> (r->midi_source()));
|
||||
|
||||
if (smf) {
|
||||
map = smf->tempo_map (provided);
|
||||
}
|
||||
|
||||
if (!provided) {
|
||||
map.reset (new Temporal::TempoMap (Temporal::Tempo (120, 4), Temporal::Meter (4, 4)));
|
||||
}
|
||||
|
||||
{
|
||||
EditingContext::TempoMapScope tms (*this, map);
|
||||
double width = bg->width();
|
||||
samplecnt_t samples = duration.samples();
|
||||
|
||||
samplecnt_t spp = floor (samples / width);
|
||||
reset_zoom (spp);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
MidiCueEditor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
|
||||
{
|
||||
@ -1697,8 +1620,9 @@ MidiCueEditor::enter_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType i
|
||||
switch (item_type) {
|
||||
case AutomationTrackItem:
|
||||
/* item is the base rectangle */
|
||||
al = reinterpret_cast<EditorAutomationLine*> (item->get_data ("line"));
|
||||
al->track_entered ();
|
||||
if (view) {
|
||||
view->automation_entry ();
|
||||
}
|
||||
break;
|
||||
|
||||
case EditorAutomationLineItem:
|
||||
@ -1740,7 +1664,7 @@ MidiCueEditor::leave_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType i
|
||||
}
|
||||
}
|
||||
if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) {
|
||||
al->track_exited ();
|
||||
view->automation_leave ();
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1761,3 +1685,98 @@ MidiCueEditor::selectable_owners()
|
||||
|
||||
return std::list<SelectableOwner*> ();
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::trigger_prop_change (PBD::PropertyChange const & what_changed)
|
||||
{
|
||||
if (what_changed.contains (Properties::region)) {
|
||||
std::shared_ptr<MidiRegion> mr = std::dynamic_pointer_cast<MidiRegion> (ref.trigger()->the_region());
|
||||
if (mr) {
|
||||
set_region (mr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::set (TriggerReference & tref)
|
||||
{
|
||||
_update_connection.disconnect ();
|
||||
object_connections.drop_connections ();
|
||||
|
||||
ref = tref;
|
||||
|
||||
idle_update_queued.store (0);
|
||||
|
||||
ref.box()->Captured.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::data_captured, this, _1), gui_context());
|
||||
/* Don't bind a shared_ptr<TriggerBox> within the lambda */
|
||||
TriggerBox* tb (ref.box().get());
|
||||
tb->RecEnableChanged.connect (object_connections, invalidator (*this), [&, tb]() { box_rec_enable_change (*tb); }, gui_context());
|
||||
|
||||
Stripable* st = dynamic_cast<Stripable*> (ref.box()->owner());
|
||||
assert (st);
|
||||
_track = std::dynamic_pointer_cast<MidiTrack> (st->shared_from_this());
|
||||
assert (_track);
|
||||
|
||||
view->set_track (_track);
|
||||
|
||||
_update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &MidiCueEditor::maybe_update));
|
||||
_track->DropReferences.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::unset, this), gui_context());
|
||||
ref.trigger()->PropertyChanged.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::trigger_prop_change, this, _1), gui_context());
|
||||
|
||||
if (ref.trigger()->the_region()) {
|
||||
|
||||
std::shared_ptr<MidiRegion> mr = std::dynamic_pointer_cast<MidiRegion> (ref.trigger()->the_region());
|
||||
|
||||
if (mr) {
|
||||
set_region (mr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::unset ()
|
||||
{
|
||||
_update_connection.disconnect();
|
||||
object_connections.drop_connections ();
|
||||
_track.reset ();
|
||||
view->set_region (nullptr);
|
||||
ref = TriggerReference ();
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiRegion> r)
|
||||
{
|
||||
if (!r) {
|
||||
view->set_region (nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
view->set_region (r);
|
||||
|
||||
/* Compute zoom level to show entire source plus some margin if possible */
|
||||
|
||||
Temporal::timecnt_t duration = Temporal::timecnt_t (r->midi_source()->length().beats());
|
||||
|
||||
std::cerr << "new region: " << duration << std::endl;
|
||||
|
||||
bool provided = false;
|
||||
std::shared_ptr<Temporal::TempoMap> map;
|
||||
std::shared_ptr<SMFSource> smf (std::dynamic_pointer_cast<SMFSource> (r->midi_source()));
|
||||
|
||||
if (smf) {
|
||||
map = smf->tempo_map (provided);
|
||||
}
|
||||
|
||||
if (!provided) {
|
||||
map.reset (new Temporal::TempoMap (Temporal::Tempo (120, 4), Temporal::Meter (4, 4)));
|
||||
}
|
||||
|
||||
{
|
||||
EditingContext::TempoMapScope tms (*this, map);
|
||||
double width = bg->width();
|
||||
samplecnt_t samples = duration.samples();
|
||||
std::cerr << "new spp from " << samples << " / " << width << std::endl;
|
||||
samplecnt_t spp = floor (samples / width);
|
||||
reset_zoom (spp);
|
||||
}
|
||||
}
|
||||
|
@ -72,9 +72,8 @@ class MidiCueEditor : public CueEditor
|
||||
int32_t get_grid_beat_divisions (Editing::GridType gt) const { return 1; }
|
||||
int32_t get_grid_music_divisions (Editing::GridType gt, uint32_t event_state) const { return 1; }
|
||||
|
||||
void set (ARDOUR::TriggerReference&);
|
||||
void set_region (std::shared_ptr<ARDOUR::MidiRegion>);
|
||||
void set_box (std::shared_ptr<ARDOUR::TriggerBox>);
|
||||
void set_track (std::shared_ptr<ARDOUR::MidiTrack>);
|
||||
|
||||
ArdourCanvas::ScrollGroup* get_hscroll_group () const { return h_scroll_group; }
|
||||
ArdourCanvas::ScrollGroup* get_cursor_scroll_group () const { return cursor_scroll_group; }
|
||||
@ -140,6 +139,7 @@ class MidiCueEditor : public CueEditor
|
||||
void on_samples_per_pixel_changed ();
|
||||
|
||||
private:
|
||||
ARDOUR::TriggerReference ref;
|
||||
std::shared_ptr<ARDOUR::MidiTrack> _track;
|
||||
ArdourCanvas::GtkCanvasViewport* _canvas_viewport;
|
||||
ArdourCanvas::GtkCanvas* _canvas;
|
||||
@ -208,17 +208,20 @@ class MidiCueEditor : public CueEditor
|
||||
void stop_canvas_autoscroll ();
|
||||
|
||||
sigc::connection _update_connection;
|
||||
PBD::ScopedConnection track_connection;
|
||||
PBD::ScopedConnectionList object_connections;
|
||||
void maybe_update ();
|
||||
void trigger_prop_change (PBD::PropertyChange const &);
|
||||
|
||||
void unset ();
|
||||
|
||||
void visual_changer (const VisualChange&);
|
||||
void bindings_changed ();
|
||||
|
||||
void data_captured (Temporal::timecnt_t);
|
||||
void data_captured (samplecnt_t);
|
||||
bool idle_data_captured ();
|
||||
std::atomic<int> idle_update_queued;
|
||||
PBD::ScopedConnectionList capture_connections;
|
||||
Temporal::timecnt_t data_capture_duration;
|
||||
samplecnt_t data_capture_duration;
|
||||
};
|
||||
|
||||
|
||||
|
@ -20,9 +20,12 @@
|
||||
#include "ardour/midi_source.h"
|
||||
#include "ardour/midi_track.h"
|
||||
#include "ardour/triggerbox.h"
|
||||
#include "ardour/types.h"
|
||||
|
||||
#include "gtkmm2ext/utils.h"
|
||||
|
||||
#include "canvas/box.h"
|
||||
#include "canvas/button.h"
|
||||
#include "canvas/debug.h"
|
||||
|
||||
#include "editing_context.h"
|
||||
@ -39,6 +42,7 @@
|
||||
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
MidiCueView::MidiCueView (std::shared_ptr<ARDOUR::MidiTrack> mt,
|
||||
@ -48,12 +52,14 @@ MidiCueView::MidiCueView (std::shared_ptr<ARDOUR::MidiTrack> mt,
|
||||
MidiViewBackground& bg,
|
||||
uint32_t basic_color)
|
||||
: MidiView (mt, parent, ec, bg, basic_color)
|
||||
, velocity_base (nullptr)
|
||||
, active_automation (nullptr)
|
||||
, velocity_display (nullptr)
|
||||
, _slot_index (slot_index)
|
||||
{
|
||||
CANVAS_DEBUG_NAME (_note_group, X_("note group for MIDI cue"));
|
||||
|
||||
_needs_active_notes_for_rec_enabled_track = true;
|
||||
|
||||
/* Containers don't get canvas events, so we need an invisible rect
|
||||
* that will. It will be resized as needed sothat it always covers the
|
||||
* entire canvas/view.
|
||||
@ -73,38 +79,72 @@ MidiCueView::MidiCueView (std::shared_ptr<ARDOUR::MidiTrack> mt,
|
||||
automation_group->set_fill_color (UIConfiguration::instance().color ("midi automation track fill"));
|
||||
automation_group->set_data ("linemerger", this);
|
||||
|
||||
velocity_base = new ArdourCanvas::Rectangle (&parent);
|
||||
CANVAS_DEBUG_NAME (velocity_base, "cue velocity base");
|
||||
velocity_display = new MidiCueVelocityDisplay (editing_context(), midi_context(), *this, *velocity_base, 0x312244ff);
|
||||
button_bar = new ArdourCanvas::Box (&parent, ArdourCanvas::Box::Horizontal);
|
||||
CANVAS_DEBUG_NAME (button_bar, "button bar");
|
||||
button_bar->set_spacing (12.);
|
||||
/* Right-side padding only */
|
||||
button_bar->set_padding (0., 0., 0., 24.);
|
||||
button_bar->set_margin (5., 5., 5., 5.);
|
||||
|
||||
for (auto & ev : _events) {
|
||||
velocity_display->add_note (ev.second);
|
||||
}
|
||||
Pango::FontDescription button_font = UIConfiguration::instance().get_NormalFont();
|
||||
|
||||
velocity_button = new ArdourCanvas::Button (button_bar, _("Velocity"), button_font);
|
||||
velocity_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
||||
CANVAS_DEBUG_NAME (velocity_button, "velocity button");
|
||||
|
||||
bender_button = new ArdourCanvas::Button (button_bar, _("Bender"), button_font);
|
||||
bender_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
||||
CANVAS_DEBUG_NAME (bender_button, "bender button");
|
||||
|
||||
pressure_button = new ArdourCanvas::Button (button_bar, _("Pressure"), button_font);
|
||||
pressure_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
||||
CANVAS_DEBUG_NAME (pressure_button, "pressure button");
|
||||
|
||||
expression_button = new ArdourCanvas::Button (button_bar, _("Expression"), button_font);
|
||||
expression_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
||||
CANVAS_DEBUG_NAME (expression_button, "expression button");
|
||||
|
||||
modulation_button = new ArdourCanvas::Button (button_bar, _("Modulation"), button_font);
|
||||
modulation_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
||||
CANVAS_DEBUG_NAME (modulation_button, "modulation button");
|
||||
|
||||
velocity_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiVelocityAutomation, 0));
|
||||
pressure_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiChannelPressureAutomation, 0));
|
||||
bender_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiPitchBenderAutomation, 0));
|
||||
modulation_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL));
|
||||
expression_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION));
|
||||
|
||||
set_extensible (true);
|
||||
|
||||
Evoral::Parameter fully_qualified_param (ARDOUR::MidiCCAutomation, 0, MIDI_CTL_MSB_MODWHEEL);
|
||||
show_automation (fully_qualified_param);
|
||||
/* show velocity by default */
|
||||
|
||||
update_automation_display (Evoral::Parameter (MidiVelocityAutomation, 0, 0), SelectionSet);
|
||||
}
|
||||
|
||||
MidiCueView::~MidiCueView ()
|
||||
{
|
||||
delete velocity_display;
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::set_height (double h)
|
||||
{
|
||||
double note_area_height = ceil (h / 2.);
|
||||
double velocity_height = ceil ((h - note_area_height) / 2.);
|
||||
double automation_height = h - note_area_height - velocity_height;
|
||||
double bbw, bbh;
|
||||
button_bar->size_request (bbw, bbh);
|
||||
|
||||
double note_area_height = ceil ((h - bbh) / 2.);
|
||||
double automation_height = ceil (h - bbh - note_area_height);
|
||||
|
||||
event_rect->set (ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, note_area_height));
|
||||
midi_context().set_size (ArdourCanvas::COORD_MAX, note_area_height);
|
||||
midi_context().set_size (midi_context().width(), note_area_height);
|
||||
|
||||
velocity_base->set_position (ArdourCanvas::Duple (0., note_area_height));
|
||||
velocity_base->set (ArdourCanvas::Rect (0., 0., ArdourCanvas::COORD_MAX, velocity_height));
|
||||
|
||||
automation_group->set_position (ArdourCanvas::Duple (0., note_area_height + velocity_height));
|
||||
automation_group->set_position (ArdourCanvas::Duple (0., note_area_height));
|
||||
automation_group->set (ArdourCanvas::Rect (0., 0., ArdourCanvas::COORD_MAX, automation_height));
|
||||
|
||||
if (automation_line) {
|
||||
automation_line->set_height (automation_height);
|
||||
button_bar->size_allocate (ArdourCanvas::Rect (0., note_area_height + automation_height, ArdourCanvas::COORD_MAX, note_area_height + automation_height + bbh));
|
||||
|
||||
for (auto & ads : automation_map) {
|
||||
ads.second.set_height (automation_height);
|
||||
}
|
||||
|
||||
view_changed ();
|
||||
@ -235,8 +275,31 @@ MidiCueView::update_hit (Hit* h)
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
MidiCueView::automation_button_event (GdkEvent* ev, Evoral::ParameterType type, int id)
|
||||
{
|
||||
SelectionOperation op = ArdourKeyboard::selection_type (ev->button.state);
|
||||
|
||||
switch (ev->type) {
|
||||
case GDK_BUTTON_RELEASE:
|
||||
automation_button_click (type, id, op);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::show_automation (Evoral::Parameter const & param)
|
||||
MidiCueView::automation_button_click (Evoral::ParameterType type, int id, SelectionOperation op)
|
||||
{
|
||||
#warning paul allow channel selection (2nd param)
|
||||
update_automation_display (Evoral::Parameter (type, 0, id), op);
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::update_automation_display (Evoral::Parameter const & param, SelectionOperation op)
|
||||
{
|
||||
using namespace ARDOUR;
|
||||
|
||||
@ -244,52 +307,110 @@ MidiCueView::show_automation (Evoral::Parameter const & param)
|
||||
return;
|
||||
}
|
||||
|
||||
if (param.type() == NullAutomation) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if (automation_line && automation_line->param() == param) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
automation_line.reset ();
|
||||
automation_control.reset ();
|
||||
|
||||
std::shared_ptr<AutomationControl> control;
|
||||
|
||||
switch (param.type()) {
|
||||
|
||||
case MidiCCAutomation:
|
||||
case MidiPgmChangeAutomation:
|
||||
case MidiPitchBenderAutomation:
|
||||
case MidiChannelPressureAutomation:
|
||||
case MidiNotePressureAutomation:
|
||||
case MidiSystemExclusiveAutomation: {
|
||||
/* These controllers are region "automation" - they are owned
|
||||
* by regions (and their MidiModels), not by the track. As a
|
||||
* result there is no AutomationList/Line for the track, but we create
|
||||
* a controller for the user to write immediate events, so the editor
|
||||
* can act as a control surface for the present MIDI controllers.
|
||||
*
|
||||
* TODO: Record manipulation of the controller to regions?
|
||||
*/
|
||||
|
||||
std::shared_ptr<Evoral::Control> control = _midi_region->model()->control (param, true);
|
||||
automation_control = std::dynamic_pointer_cast<AutomationControl> (control);
|
||||
|
||||
if (automation_control) {
|
||||
automation_line.reset (new MidiCueAutomationLine ("whatevs",
|
||||
_editing_context,
|
||||
*automation_group,
|
||||
automation_group,
|
||||
automation_control->alist(),
|
||||
automation_control->desc()));
|
||||
automation_line->set_height (automation_group->get().height());
|
||||
}
|
||||
case MidiSystemExclusiveAutomation:
|
||||
case MidiVelocityAutomation:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
default:
|
||||
CueAutomationMap::iterator i = automation_map.find (param);
|
||||
AutomationDisplayState* ads = nullptr;
|
||||
|
||||
if (i != automation_map.end()) {
|
||||
|
||||
ads = &i->second;
|
||||
|
||||
} else {
|
||||
|
||||
if (op == SelectionRemove) {
|
||||
/* remove it, but it doesn't exist yet, no worries */
|
||||
return;
|
||||
}
|
||||
|
||||
if (param.type() == MidiVelocityAutomation) {
|
||||
|
||||
|
||||
if (!velocity_display) {
|
||||
|
||||
/* Create and add to automation display map */
|
||||
|
||||
velocity_display = new MidiCueVelocityDisplay (editing_context(), midi_context(), *this, *automation_group, 0x312244ff);
|
||||
auto res = automation_map.insert (std::make_pair (Evoral::Parameter (ARDOUR::MidiVelocityAutomation, 0, 0), AutomationDisplayState (*velocity_display, true)));
|
||||
|
||||
ads = &((*res.first).second);
|
||||
|
||||
for (auto & ev : _events) {
|
||||
velocity_display->add_note (ev.second);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
std::shared_ptr<Evoral::Control> control = _midi_region->model()->control (param, true);
|
||||
CueAutomationControl ac = std::dynamic_pointer_cast<AutomationControl> (control);
|
||||
|
||||
if (!ac) {
|
||||
return;
|
||||
}
|
||||
|
||||
CueAutomationLine line (new MidiCueAutomationLine (ARDOUR::EventTypeMap::instance().to_symbol (param),
|
||||
_editing_context,
|
||||
*automation_group,
|
||||
automation_group,
|
||||
ac->alist(),
|
||||
ac->desc()));
|
||||
AutomationDisplayState cad (ac, line, true);
|
||||
|
||||
auto res = automation_map.insert (std::make_pair (param, cad));
|
||||
|
||||
ads = &((*res.first).second);
|
||||
}
|
||||
}
|
||||
|
||||
std::cerr << "sad " << op << " param " << ARDOUR::EventTypeMap::instance().to_symbol (param) << std::endl;
|
||||
|
||||
switch (op) {
|
||||
case SelectionSet:
|
||||
/* hide the rest */
|
||||
for (auto & as : automation_map) {
|
||||
as.second.hide ();
|
||||
}
|
||||
/*FALLTHRU*/
|
||||
case SelectionAdd:
|
||||
ads->set_height (automation_group->get().height());
|
||||
ads->show ();
|
||||
active_automation = ads;
|
||||
break;
|
||||
|
||||
case SelectionRemove:
|
||||
ads->hide ();
|
||||
if (active_automation == ads) {
|
||||
active_automation = nullptr;
|
||||
}
|
||||
break;
|
||||
|
||||
case SelectionToggle:
|
||||
if (ads->visible) {
|
||||
ads->hide ();
|
||||
if (active_automation == ads) {
|
||||
active_automation = nullptr;
|
||||
}
|
||||
} else {
|
||||
ads->set_height (automation_group->get().height());
|
||||
ads->show ();
|
||||
active_automation = ads;
|
||||
}
|
||||
return;
|
||||
|
||||
case SelectionExtend:
|
||||
/* undefined in this context */
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -298,8 +419,8 @@ std::list<SelectableOwner*>
|
||||
MidiCueView::selectable_owners()
|
||||
{
|
||||
std::list<SelectableOwner*> sl;
|
||||
if (automation_line) {
|
||||
sl.push_back (automation_line.get());
|
||||
if (active_automation && active_automation->line) {
|
||||
sl.push_back (active_automation->line.get());
|
||||
}
|
||||
return sl;
|
||||
}
|
||||
@ -307,16 +428,24 @@ MidiCueView::selectable_owners()
|
||||
MergeableLine*
|
||||
MidiCueView::make_merger ()
|
||||
{
|
||||
return new MergeableLine (automation_line, automation_control,
|
||||
[](Temporal::timepos_t const& t) { return t; },
|
||||
nullptr, nullptr);
|
||||
if (active_automation && active_automation->line) {
|
||||
return new MergeableLine (active_automation->line, active_automation->control,
|
||||
[](Temporal::timepos_t const& t) { return t; },
|
||||
nullptr, nullptr);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool
|
||||
MidiCueView::automation_rb_click (GdkEvent* event, Temporal::timepos_t const & pos)
|
||||
{
|
||||
if (!active_automation || !active_automation->control || !active_automation->line) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool with_guard_points = Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier);
|
||||
automation_line->add (automation_control, event, pos, event->button.y, with_guard_points);
|
||||
active_automation->line->add (active_automation->control, event, pos, event->button.y, with_guard_points);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -325,4 +454,60 @@ MidiCueView::line_drag_click (GdkEvent* event, Temporal::timepos_t const & pos)
|
||||
{
|
||||
}
|
||||
|
||||
MidiCueView::AutomationDisplayState::~AutomationDisplayState()
|
||||
{
|
||||
/* We do not own the velocity_display */
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::AutomationDisplayState::hide ()
|
||||
{
|
||||
if (velocity_display) {
|
||||
std::cerr << "hide vdisp\n";
|
||||
velocity_display->hide ();
|
||||
} else if (line) {
|
||||
std::cerr << "hide line\n";
|
||||
line->hide_all ();
|
||||
}
|
||||
visible = false;
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::AutomationDisplayState::show ()
|
||||
{
|
||||
if (velocity_display) {
|
||||
std::cerr << "show vdisp\n";
|
||||
velocity_display->show ();
|
||||
} else if (line) {
|
||||
std::cerr << "show line\n";
|
||||
line->show ();
|
||||
}
|
||||
visible = true;
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::AutomationDisplayState::set_height (double h)
|
||||
{
|
||||
if (velocity_display) {
|
||||
// velocity_display->set_height (h);
|
||||
} else if (line) {
|
||||
line->set_height (h);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiCueView::automation_entry ()
|
||||
{
|
||||
if (active_automation && active_automation->line) {
|
||||
active_automation->line->track_entered ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MidiCueView::automation_leave ()
|
||||
{
|
||||
if (active_automation && active_automation->line) {
|
||||
active_automation->line->track_entered ();
|
||||
}
|
||||
}
|
||||
|
@ -24,11 +24,20 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "ardour/types.h"
|
||||
|
||||
#include "midi_view.h"
|
||||
|
||||
class VelocityDisplay;
|
||||
class MidiCueAutomationLine;
|
||||
|
||||
namespace ArdourCanvas {
|
||||
class Box;
|
||||
class Button;
|
||||
}
|
||||
|
||||
class MidiCueView : public MidiView
|
||||
{
|
||||
public:
|
||||
@ -40,6 +49,8 @@ class MidiCueView : public MidiView
|
||||
uint32_t basic_color
|
||||
);
|
||||
|
||||
~MidiCueView();
|
||||
|
||||
bool canvas_event (GdkEvent*);
|
||||
void set_samples_per_pixel (double);
|
||||
void set_height (double);
|
||||
@ -51,7 +62,7 @@ class MidiCueView : public MidiView
|
||||
void ghost_add_note (NoteBase*);
|
||||
void ghost_sync_selection (NoteBase*);
|
||||
|
||||
void show_automation (Evoral::Parameter const & param);
|
||||
void update_automation_display (Evoral::Parameter const & param, ARDOUR::SelectionOperation);
|
||||
|
||||
ArdourCanvas::Item* drag_group() const;
|
||||
|
||||
@ -61,16 +72,50 @@ class MidiCueView : public MidiView
|
||||
bool automation_rb_click (GdkEvent*, Temporal::timepos_t const &);
|
||||
void line_drag_click (GdkEvent*, Temporal::timepos_t const &);
|
||||
|
||||
void automation_entry();
|
||||
void automation_leave ();
|
||||
|
||||
protected:
|
||||
bool scroll (GdkEventScroll* ev);
|
||||
|
||||
ArdourCanvas::Rectangle* automation_group;
|
||||
std::shared_ptr<MidiCueAutomationLine> automation_line;
|
||||
std::shared_ptr<ARDOUR::AutomationControl> automation_control;
|
||||
|
||||
ArdourCanvas::Rectangle* velocity_base;
|
||||
typedef std::shared_ptr<MidiCueAutomationLine> CueAutomationLine;
|
||||
typedef std::shared_ptr<ARDOUR::AutomationControl> CueAutomationControl;
|
||||
|
||||
struct AutomationDisplayState {
|
||||
|
||||
AutomationDisplayState (CueAutomationControl ctl, CueAutomationLine ln, bool vis)
|
||||
: control (ctl), line (ln), velocity_display (nullptr), visible (vis) {}
|
||||
AutomationDisplayState (VelocityDisplay& vdisp, bool vis)
|
||||
: control (nullptr), line (nullptr), velocity_display (&vdisp), visible (vis) {}
|
||||
|
||||
~AutomationDisplayState();
|
||||
|
||||
CueAutomationControl control;
|
||||
CueAutomationLine line;
|
||||
VelocityDisplay* velocity_display;
|
||||
bool visible;
|
||||
|
||||
void hide ();
|
||||
void show ();
|
||||
void set_height (double);
|
||||
};
|
||||
|
||||
typedef std::map<Evoral::Parameter, AutomationDisplayState> CueAutomationMap;
|
||||
|
||||
CueAutomationMap automation_map;
|
||||
AutomationDisplayState* active_automation;
|
||||
|
||||
VelocityDisplay* velocity_display;
|
||||
|
||||
ArdourCanvas::Box* button_bar;
|
||||
ArdourCanvas::Button* velocity_button;
|
||||
ArdourCanvas::Button* bender_button;
|
||||
ArdourCanvas::Button* pressure_button;
|
||||
ArdourCanvas::Button* expression_button;
|
||||
ArdourCanvas::Button* modulation_button;
|
||||
|
||||
std::shared_ptr<Temporal::TempoMap const> tempo_map;
|
||||
ArdourCanvas::Rectangle* event_rect;
|
||||
uint32_t _slot_index;
|
||||
@ -78,6 +123,6 @@ class MidiCueView : public MidiView
|
||||
void update_sustained (Note *);
|
||||
void update_hit (Hit *);
|
||||
|
||||
bool automation_button_event (GdkEvent*, Evoral::ParameterType type, int id);
|
||||
void automation_button_click (Evoral::ParameterType type, int id, ARDOUR::SelectionOperation);
|
||||
};
|
||||
|
||||
|
||||
|
@ -170,6 +170,20 @@ MidiRegionView::init (bool /*wfd*/)
|
||||
connect_to_diskstream ();
|
||||
}
|
||||
|
||||
void
|
||||
MidiRegionView::set_model (std::shared_ptr<ARDOUR::MidiModel> model)
|
||||
{
|
||||
MidiView::set_model (model);
|
||||
|
||||
region_muted ();
|
||||
region_sync_changed ();
|
||||
region_resized (ARDOUR::bounds_change);
|
||||
region_locked ();
|
||||
|
||||
set_colors ();
|
||||
reset_width_dependent_items (_pixel_width);
|
||||
}
|
||||
|
||||
bool
|
||||
MidiRegionView::display_is_enabled () const
|
||||
{
|
||||
@ -642,24 +656,8 @@ MidiRegionView::~MidiRegionView ()
|
||||
void
|
||||
MidiRegionView::reset_width_dependent_items (double pixel_width)
|
||||
{
|
||||
RegionView::reset_width_dependent_items(pixel_width);
|
||||
|
||||
view_changed ();
|
||||
|
||||
bool hide_all = false;
|
||||
PatchChanges::iterator x = _patch_changes.begin();
|
||||
if (x != _patch_changes.end()) {
|
||||
hide_all = x->second->width() >= _pixel_width;
|
||||
}
|
||||
|
||||
if (hide_all) {
|
||||
for (; x != _patch_changes.end(); ++x) {
|
||||
x->second->hide();
|
||||
}
|
||||
}
|
||||
|
||||
move_step_edit_cursor (_step_edit_cursor_position);
|
||||
set_step_edit_cursor_width (_step_edit_cursor_width);
|
||||
MidiView::reset_width_dependent_items (pixel_width);
|
||||
RegionView::reset_width_dependent_items (pixel_width);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -112,6 +112,7 @@ public:
|
||||
{ return midi_view()->midi_view(); }
|
||||
|
||||
void set_height (double);
|
||||
void set_model (std::shared_ptr<ARDOUR::MidiModel>);
|
||||
|
||||
inline ARDOUR::ColorMode color_mode() const { return midi_view()->color_mode(); }
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
inline static void clamp_to_0_127(uint8_t &val)
|
||||
{
|
||||
if ((127 < val) && (val < 192)) {
|
||||
|
@ -113,13 +113,14 @@ MidiView::MidiView (std::shared_ptr<MidiTrack> mt,
|
||||
uint32_t basic_color)
|
||||
: _editing_context (ec)
|
||||
, _midi_context (bg)
|
||||
, _active_notes (0)
|
||||
, _active_notes (nullptr)
|
||||
, _note_group (new ArdourCanvas::Container (&parent))
|
||||
, _note_diff_command (nullptr)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1, 0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _needs_active_notes_for_rec_enabled_track (false)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
, _optimization_iterator (_events.end())
|
||||
@ -139,19 +140,19 @@ MidiView::MidiView (std::shared_ptr<MidiTrack> mt,
|
||||
init (mt);
|
||||
}
|
||||
|
||||
|
||||
MidiView::MidiView (MidiView const & other)
|
||||
: sigc::trackable (other)
|
||||
, _editing_context (other.editing_context())
|
||||
, _midi_context (other.midi_context())
|
||||
, _midi_region (other.midi_region())
|
||||
, _active_notes(0)
|
||||
, _active_notes (nullptr)
|
||||
, _note_group (new ArdourCanvas::Container (other._note_group->parent()))
|
||||
, _note_diff_command (0)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1, 0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _needs_active_notes_for_rec_enabled_track (false)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
, _optimization_iterator (_events.end())
|
||||
@ -192,12 +193,6 @@ MidiView::set_track (std::shared_ptr<MidiTrack> mt)
|
||||
|
||||
if (_midi_track) {
|
||||
_midi_track->DropReferences.connect (track_going_away_connection, invalidator (*this), std::bind (&MidiView::track_going_away, this), gui_context());
|
||||
|
||||
if (_midi_track->triggerbox()->record_enabled()) {
|
||||
begin_write ();
|
||||
} else {
|
||||
end_write ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -236,23 +231,20 @@ MidiView::set_model (std::shared_ptr<MidiModel> m)
|
||||
assert (_midi_track);
|
||||
assert (_midi_region);
|
||||
|
||||
clear_events ();
|
||||
connections_requiring_model.drop_connections ();
|
||||
|
||||
_model = m;
|
||||
|
||||
if (!_model) {
|
||||
std::cerr << "no model!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
std::cerr << "model set to " << _model << std::endl;
|
||||
|
||||
//set_height (trackview.current_height());
|
||||
|
||||
#warning paul pianorule needs these fixed
|
||||
/* XXXX
|
||||
region_muted ();
|
||||
region_sync_changed ();
|
||||
region_resized (ARDOUR::bounds_change);
|
||||
//region_locked ();
|
||||
|
||||
set_colors ();
|
||||
reset_width_dependent_items (_pixel_width);
|
||||
*/
|
||||
|
||||
connections_requiring_model.drop_connections ();
|
||||
|
||||
_model->ContentsChanged.connect (connections_requiring_model, invalidator (*this), std::bind (&MidiView::model_changed, this), gui_context());
|
||||
|
||||
_midi_track->playback_filter().ChannelModeChanged.connect (connections_requiring_model, invalidator (*this),
|
||||
@ -849,9 +841,8 @@ MidiView::clear_events ()
|
||||
{
|
||||
// clear selection without signaling or trying to change state of event objects
|
||||
_selection.clear ();
|
||||
|
||||
clear_ghost_events ();
|
||||
|
||||
/* This will delete all the NoteBase* in the _events map */
|
||||
_note_group->clear (true);
|
||||
_events.clear();
|
||||
_patch_changes.clear();
|
||||
@ -863,8 +854,6 @@ void
|
||||
MidiView::display_model (std::shared_ptr<MidiModel> model)
|
||||
{
|
||||
set_model (_model);
|
||||
/* Don't signal as nobody else needs to know until selection has been altered. */
|
||||
clear_events();
|
||||
model_changed ();
|
||||
}
|
||||
|
||||
@ -1099,12 +1088,14 @@ MidiView::model_changed()
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_model) {
|
||||
return;
|
||||
for (_optimization_iterator = _events.begin(); _optimization_iterator != _events.end(); ++_optimization_iterator) {
|
||||
_optimization_iterator->second->invalidate ();
|
||||
}
|
||||
|
||||
for (_optimization_iterator = _events.begin(); _optimization_iterator != _events.end(); ++_optimization_iterator) {
|
||||
_optimization_iterator->second->invalidate();
|
||||
/* note that _optimization_iterator now points to _events.end() */
|
||||
|
||||
if (!_model) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool empty_when_starting = _events.empty();
|
||||
@ -1565,6 +1556,8 @@ MidiView::begin_write()
|
||||
XXX this should not happen.
|
||||
*/
|
||||
|
||||
clear_events ();
|
||||
|
||||
if (_active_notes) {
|
||||
for (unsigned i = 0; i < 128; ++i) {
|
||||
delete _active_notes[i];
|
||||
@ -1588,6 +1581,7 @@ void
|
||||
MidiView::end_write()
|
||||
{
|
||||
if (_active_notes) {
|
||||
std::cerr << "active notes deleted in end_write\n";
|
||||
for (unsigned i = 0; i < 128; ++i) {
|
||||
delete _active_notes[i];
|
||||
}
|
||||
@ -2271,7 +2265,7 @@ MidiView::clear_selection_internal ()
|
||||
DEBUG_TRACE(DEBUG::Selection, "MRV::clear_selection_internal\n");
|
||||
|
||||
for (auto & sel : _selection) {
|
||||
sel->set_selected(false);
|
||||
sel->set_selected (false);
|
||||
sel->hide_velocity();
|
||||
ghost_sync_selection (sel);
|
||||
}
|
||||
@ -4490,15 +4484,14 @@ MidiView::set_step_edit_cursor_width (Temporal::Beats beats)
|
||||
}
|
||||
|
||||
void
|
||||
MidiView::clip_data_recorded (timecnt_t const & total_duration)
|
||||
MidiView::clip_data_recorded (samplecnt_t total_duration)
|
||||
{
|
||||
if (!_midi_track) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_active_notes) {
|
||||
/* we aren't actively being recorded to */
|
||||
return;
|
||||
begin_write ();
|
||||
}
|
||||
|
||||
if (_active_notes) {
|
||||
@ -4565,7 +4558,7 @@ MidiView::clip_data_recorded (timecnt_t const & total_duration)
|
||||
}
|
||||
}
|
||||
|
||||
active_note_end = total_duration;
|
||||
active_note_end = timecnt_t (total_duration);
|
||||
}
|
||||
|
||||
/** Called when a diskstream on our track has received some data. Update the view, if applicable.
|
||||
|
@ -118,9 +118,9 @@ class MidiView : public virtual sigc::trackable, public LineMerger
|
||||
virtual GhostRegion* add_ghost (TimeAxisView&) { return nullptr; }
|
||||
virtual std::string get_modifier_name() const;
|
||||
|
||||
void set_region (std::shared_ptr<ARDOUR::MidiRegion>);
|
||||
void set_track (std::shared_ptr<ARDOUR::MidiTrack>);
|
||||
void set_model (std::shared_ptr<ARDOUR::MidiModel>);
|
||||
virtual void set_region (std::shared_ptr<ARDOUR::MidiRegion>);
|
||||
virtual void set_track (std::shared_ptr<ARDOUR::MidiTrack>);
|
||||
virtual void set_model (std::shared_ptr<ARDOUR::MidiModel>);
|
||||
|
||||
NoteBase* add_note(const std::shared_ptr<NoteType> note, bool visible);
|
||||
|
||||
@ -341,7 +341,7 @@ class MidiView : public virtual sigc::trackable, public LineMerger
|
||||
EditingContext& editing_context() const { return _editing_context; }
|
||||
MidiViewBackground& midi_context() const { return _midi_context; }
|
||||
|
||||
void clip_data_recorded (Temporal::timecnt_t const &);
|
||||
void clip_data_recorded (samplecnt_t);
|
||||
|
||||
virtual void select_self (bool add) {}
|
||||
virtual void unselect_self () {}
|
||||
@ -503,7 +503,7 @@ class MidiView : public virtual sigc::trackable, public LineMerger
|
||||
Temporal::Beats _step_edit_cursor_width;
|
||||
Temporal::Beats _step_edit_cursor_position;
|
||||
NoteBase* _channel_selection_scoped_note;
|
||||
|
||||
bool _needs_active_notes_for_rec_enabled_track;
|
||||
MouseState _mouse_state;
|
||||
int _pressed_button;
|
||||
|
||||
|
@ -42,6 +42,7 @@ MidiViewBackground::MidiViewBackground (ArdourCanvas::Item* parent)
|
||||
, _note_lines (new ArdourCanvas::LineSet (parent, ArdourCanvas::LineSet::Horizontal))
|
||||
, _note_mode (ARDOUR::Sustained)
|
||||
, _color_mode (ARDOUR::MeterColors)
|
||||
, _visibility_note_range (ContentsRange)
|
||||
{
|
||||
_note_lines->lower_to_bottom();
|
||||
|
||||
|
@ -26,6 +26,10 @@
|
||||
* Held centrally by the Editor because some cursors are used in several places.
|
||||
*/
|
||||
|
||||
#include <gdkmm/cursor.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
class MouseCursors
|
||||
{
|
||||
public:
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "progress_reporter.h"
|
||||
|
||||
namespace Gtk {
|
||||
class CheckButton;
|
||||
class RadioButton;
|
||||
class SpinButton;
|
||||
class ProgressBar;
|
||||
|
@ -29,13 +29,13 @@
|
||||
|
||||
#include "note_base.h"
|
||||
#include "editing_context.h"
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
#include "keyboard.h"
|
||||
#include "midi_view.h"
|
||||
|
||||
/* clang-format off */
|
||||
// Include last, when GRIDTYPE has been defined by editing.h via midi_region_view.h
|
||||
#include "editing_syms.h"
|
||||
#include "editing_syms.inc.h"
|
||||
/* clang-format on */
|
||||
|
||||
using namespace std;
|
||||
|
@ -49,6 +49,7 @@ namespace ARDOUR {
|
||||
}
|
||||
|
||||
namespace Gtk {
|
||||
class CheckMenuItem;
|
||||
class Menu;
|
||||
class Menuitem;
|
||||
}
|
||||
|
@ -23,6 +23,11 @@
|
||||
|
||||
#include "canvas/flag.h"
|
||||
|
||||
#include <gtkmm/menu.h>
|
||||
|
||||
#include "midi_view.h"
|
||||
#include "patch_change_dialog.h"
|
||||
|
||||
class MidiRegionView;
|
||||
|
||||
namespace MIDI {
|
||||
|
@ -19,6 +19,9 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
|
||||
@ -27,7 +30,6 @@
|
||||
#include "audio_clock.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
class BeatsSamplesConverter;
|
||||
class Session;
|
||||
class InstrumentInfo;
|
||||
}
|
||||
|
@ -18,6 +18,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace ARDOUR {
|
||||
void pingback (const std::string& this_version,
|
||||
const std::string& announce_path);
|
||||
|
@ -28,6 +28,8 @@
|
||||
#include <gtkmm/treestore.h>
|
||||
#include <gtkmm/treeview.h>
|
||||
|
||||
#include "widgets/ardour_button.h"
|
||||
|
||||
#include "ardour/playlist.h"
|
||||
#include "ardour/session_handle.h"
|
||||
#include "ardour_dialog.h"
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/button.h>
|
||||
#include <gtkmm/frame.h>
|
||||
#include <gtkmm/label.h>
|
||||
#include <gtkmm/progressbar.h>
|
||||
#include <gtkmm/sizegroup.h>
|
||||
|
3829
gtk2_ardour/po/es.po
3829
gtk2_ardour/po/es.po
File diff suppressed because it is too large
Load Diff
@ -18,11 +18,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "port_matrix_component.h"
|
||||
#include "ardour/bundle.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
class BundleChannel;
|
||||
}
|
||||
#include "port_matrix_component.h"
|
||||
|
||||
class PortMatrixLabels : public PortMatrixComponent
|
||||
{
|
||||
|
@ -10,9 +10,6 @@
|
||||
# [never-do-that-thing]
|
||||
# thing that action prevent never stop otherthing
|
||||
#
|
||||
# The file is processed via tools/process-metadata to create build/gtk2_ardour/configuration_metadata.h which is then incorporated via an #include directive
|
||||
# within gtk2_ardour/ui_config.cc
|
||||
#
|
||||
# Whenever a new preference variable is added to the source code, its name should also be added here.
|
||||
#
|
||||
# GUIDANCE:
|
||||
@ -20,6 +17,12 @@
|
||||
# use "synchronization" rather than sync, because that will match both "sync" and "synchronization". For languages that create plurals with a suffix,
|
||||
# prefer plural forms for the same reason.
|
||||
#
|
||||
# This file is processed automatically when invoking a custom tool manually:
|
||||
#
|
||||
# tools/process-metadata gtk2_ardour/preference-metadata > gtk2_ardour/configuration_metadata.inc.h
|
||||
#
|
||||
# The generated file is incorporated via an #include directive within gtk2_ardour/ui_config.cc .
|
||||
|
||||
[SECTION:UI]
|
||||
|
||||
[action-table-columns]
|
||||
@ -623,7 +626,6 @@
|
||||
osc open sound control
|
||||
[use-plugin-own-gui]
|
||||
plugins GUI editor prefer use own
|
||||
[use-tranzport]
|
||||
[use-vst3]
|
||||
plugins vst3
|
||||
[use-windows-vst]
|
||||
|
@ -26,6 +26,8 @@
|
||||
|
||||
#include "canvas/rectangle.h"
|
||||
|
||||
#include <gtkmm/adjustment.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
class MidiTrack;
|
||||
}
|
||||
|
@ -715,7 +715,7 @@ ProcessorEntry::show_all_controls ()
|
||||
(*i)->set_visible (true);
|
||||
}
|
||||
|
||||
_parent->update_gui_object_state (this);
|
||||
_parent->update_gui_object_state (this, true);
|
||||
}
|
||||
|
||||
void
|
||||
@ -725,7 +725,7 @@ ProcessorEntry::hide_all_controls ()
|
||||
(*i)->set_visible (false);
|
||||
}
|
||||
|
||||
_parent->update_gui_object_state (this);
|
||||
_parent->update_gui_object_state (this, true);
|
||||
}
|
||||
|
||||
void
|
||||
@ -942,14 +942,14 @@ ProcessorEntry::toggle_inline_display_visibility ()
|
||||
} else {
|
||||
_plugin_display->show();
|
||||
}
|
||||
_parent->update_gui_object_state (this);
|
||||
_parent->update_gui_object_state (this, true);
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::toggle_control_visibility (Control* c)
|
||||
{
|
||||
c->set_visible (!c->visible ());
|
||||
_parent->update_gui_object_state (this);
|
||||
_parent->update_gui_object_state (this, true);
|
||||
}
|
||||
|
||||
Menu*
|
||||
@ -4691,7 +4691,7 @@ ProcessorBox::entry_gui_object_state (ProcessorEntry* entry)
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorBox::update_gui_object_state (ProcessorEntry* entry)
|
||||
ProcessorBox::update_gui_object_state (ProcessorEntry* entry, bool emit)
|
||||
{
|
||||
XMLNode* proc = entry_gui_object_state (entry);
|
||||
if (!proc) {
|
||||
@ -4701,6 +4701,12 @@ ProcessorBox::update_gui_object_state (ProcessorEntry* entry)
|
||||
/* XXX: this is a bit inefficient; we just remove all child nodes and re-add them */
|
||||
proc->remove_nodes_and_delete (X_("Object"));
|
||||
entry->add_control_state (proc);
|
||||
|
||||
/* notify other strips to update */
|
||||
if (emit && _route) {
|
||||
PBD::Unwinder<bool> uw (no_processor_redisplay, true);
|
||||
_route->processors_changed (RouteProcessorChange ());
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -461,7 +461,7 @@ public:
|
||||
void edit_processor (std::shared_ptr<ARDOUR::Processor>);
|
||||
void generic_edit_processor (std::shared_ptr<ARDOUR::Processor>);
|
||||
|
||||
void update_gui_object_state (ProcessorEntry *);
|
||||
void update_gui_object_state (ProcessorEntry *, bool emit = false);
|
||||
|
||||
sigc::signal<void,std::shared_ptr<ARDOUR::Processor> > ProcessorSelected;
|
||||
sigc::signal<void,std::shared_ptr<ARDOUR::Processor> > ProcessorUnselected;
|
||||
|
@ -116,7 +116,9 @@ DurationInfoBox::dpi_reset ()
|
||||
_layout_value->get_pixel_size (wv, hv);
|
||||
_width = 8 + wv;
|
||||
_height = 4 + hv;
|
||||
queue_resize ();
|
||||
if (get_realized ()) {
|
||||
queue_resize ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -198,7 +200,9 @@ XrunInfoBox::dpi_reset ()
|
||||
_layout_value->get_pixel_size (wv, hv);
|
||||
_width = 8 + wv;
|
||||
_height = 8 + hv;
|
||||
queue_resize ();
|
||||
if (get_realized ()) {
|
||||
queue_resize ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -291,7 +295,9 @@ RemainInfoBox::dpi_reset ()
|
||||
_width = 8 + std::max (wl, wv);
|
||||
_height = 2 + hv + 2 + hl + 2;
|
||||
|
||||
queue_resize ();
|
||||
if (get_realized ()) {
|
||||
queue_resize ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -31,6 +31,8 @@
|
||||
|
||||
#include "ardour_window.h"
|
||||
#include "audio_clock.h"
|
||||
#include "region_view.h"
|
||||
#include "time_axis_view.h"
|
||||
|
||||
class PublicEditor;
|
||||
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
RegionPeakCursor (ArdourCanvas::Item*);
|
||||
~RegionPeakCursor ();
|
||||
|
||||
void set (AudioRegionView*, samplepos_t, samplecnt_t);
|
||||
void set (AudioRegionView*, samplepos_t, ARDOUR::samplecnt_t);
|
||||
void hide ();
|
||||
bool visible () const;
|
||||
|
||||
|
@ -22,6 +22,9 @@
|
||||
#include "ardour/route_group.h"
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
#include <gtkmm/menu.h>
|
||||
#include <gtkmm/radiomenuitem.h>
|
||||
|
||||
class RouteGroupDialog;
|
||||
|
||||
class RouteGroupMenu : public ARDOUR::SessionHandlePtr
|
||||
|
@ -21,6 +21,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "pbd/property_basics.h"
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "processor_selection.h"
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include <gtkmm/liststore.h>
|
||||
#include <gtkmm/combobox.h>
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
|
||||
#include "temporal/domain_provider.h"
|
||||
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
get_vbox()->pack_start (*cancel_button, Gtk::PACK_SHRINK);
|
||||
}
|
||||
|
||||
void update_progress (samplecnt_t c, samplecnt_t t) {
|
||||
void update_progress (ARDOUR::samplecnt_t c, ARDOUR::samplecnt_t t) {
|
||||
pbar->set_fraction ((float) c / (float) t);
|
||||
// see also ARDOUR_UI::gui_idle_handler();
|
||||
int timeout = 30;
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <gtkmm/progressbar.h>
|
||||
#include <gtkmm/table.h>
|
||||
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
class SoundcloudExportSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
|
||||
{
|
||||
public:
|
||||
|
@ -25,6 +25,11 @@
|
||||
|
||||
#include "ardour/types.h"
|
||||
|
||||
namespace Gtk
|
||||
{
|
||||
class Window;
|
||||
} // namespace Gtk
|
||||
|
||||
class ArdourDialog;
|
||||
class NewUserWizard;
|
||||
class EngineControl;
|
||||
|
@ -28,10 +28,12 @@
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "temporal/beats.h"
|
||||
#include "temporal/timeline.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
class MidiTrack;
|
||||
class MidiRegion;
|
||||
class Region;
|
||||
}
|
||||
|
||||
class MidiRegionView;
|
||||
|
@ -20,9 +20,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "mixer_strip.h"
|
||||
|
||||
#include <list>
|
||||
|
||||
class MixerStrip;
|
||||
|
||||
struct MixerStripSelection : list<MixerStrip*> {};
|
||||
struct MixerStripSelection : std::list<MixerStrip*> {};
|
||||
|
||||
|
@ -19,11 +19,14 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include <glibmm/threads.h>
|
||||
#include <gtkmm/progressbar.h>
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include <glibmm/threads.h>
|
||||
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include "ardour/interthread_info.h"
|
||||
#include "ardour/types.h"
|
||||
#include "ardour_dialog.h"
|
||||
#include "progress_reporter.h"
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include "canvas/flag.h"
|
||||
|
||||
#include "ardour/midi_model.h"
|
||||
|
||||
class MidiView;
|
||||
|
||||
class SysEx
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "ardour/ardour.h"
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "canvas/container.h"
|
||||
#include "canvas/types.h"
|
||||
#include "canvas/framed_curve.h"
|
||||
#include "canvas/text.h"
|
||||
|
@ -1,188 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2007-2015 David Robillard <d@drobilla.net>
|
||||
* Copyright (C) 2010-2017 Paul Davis <paul@linuxaudiosystems.com>
|
||||
* Copyright (C) 2012 Carl Hetherington <carl@carlh.net>
|
||||
* Copyright (C) 2014-2017 Nick Mainsbridge <mainsbridge@gmail.com>
|
||||
*
|
||||
* 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; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "pbd/compose.h"
|
||||
|
||||
#include "canvas/canvas.h"
|
||||
#include "canvas/debug.h"
|
||||
|
||||
#include "tempo_lines.h"
|
||||
#include "public_editor.h"
|
||||
#include "rgb_macros.h"
|
||||
#include "ui_config.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
TempoLines::TempoLines (ArdourCanvas::Container* group, double, ARDOUR::BeatsSamplesConverter* bfc)
|
||||
: lines (group, ArdourCanvas::LineSet::Vertical)
|
||||
, _bfc (bfc)
|
||||
{
|
||||
lines.set_extent (ArdourCanvas::COORD_MAX);
|
||||
}
|
||||
|
||||
TempoLines::~TempoLines ()
|
||||
{
|
||||
delete _bfc;
|
||||
_bfc = 0;
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::tempo_map_changed (samplepos_t new_origin)
|
||||
{
|
||||
lines.clear ();
|
||||
_bfc->set_origin_b (new_origin);
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::show ()
|
||||
{
|
||||
lines.show ();
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::hide ()
|
||||
{
|
||||
lines.hide ();
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::draw_ticks (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
unsigned divisions,
|
||||
samplecnt_t leftmost_sample,
|
||||
samplecnt_t sample_rate)
|
||||
{
|
||||
const uint32_t base = UIConfiguration::instance().color_mod("measure line beat", "measure line beat");
|
||||
|
||||
for (unsigned l = 1; l < divisions; ++l) {
|
||||
/* find the coarsest division level this tick falls on */
|
||||
unsigned level = divisions;
|
||||
for (unsigned d = divisions; d >= 4; d /= 2) {
|
||||
if (l % (divisions / d) == 0) {
|
||||
level = d;
|
||||
}
|
||||
}
|
||||
/* draw line with alpha corresponding to coarsest level */
|
||||
const uint8_t a = max(8, (int)rint(UINT_RGBA_A(base) / (0.8 * log2(level))));
|
||||
const uint32_t c = UINT_RGBA_CHANGE_A(base, a);
|
||||
const samplepos_t f = _bfc->to (Temporal::Beats (grid.begin()->qn + (l / (double) divisions))) + _bfc->origin_b();
|
||||
|
||||
if (f > leftmost_sample) {
|
||||
lines.add (PublicEditor::instance().sample_to_pixel_unrounded (f), 1.0, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::draw (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
unsigned divisions,
|
||||
samplecnt_t leftmost_sample,
|
||||
samplecnt_t sample_rate)
|
||||
{
|
||||
std::vector<ARDOUR::TempoMap::BBTPoint>::const_iterator i;
|
||||
double beat_density;
|
||||
|
||||
uint32_t beats = 0;
|
||||
uint32_t bars = 0;
|
||||
const uint32_t bar_color = UIConfiguration::instance().color ("measure line bar");
|
||||
const uint32_t beat_color = UIConfiguration::instance().color_mod ("measure line beat", "measure line beat");
|
||||
uint32_t color;
|
||||
|
||||
bool all_bars = false;
|
||||
/* get the first bar spacing */
|
||||
|
||||
i = grid.end();
|
||||
i--;
|
||||
bars = (*i).bar - (*grid.begin()).bar;
|
||||
|
||||
int32_t bar_mod = 4;
|
||||
|
||||
if (bars < distance (grid.begin(), grid.end()) - 1) {
|
||||
/* grid contains beats and bars */
|
||||
beats = distance (grid.begin(), grid.end()) - bars;
|
||||
} else {
|
||||
/* grid contains only bars */
|
||||
beats = distance (grid.begin(), grid.end());
|
||||
|
||||
if (i != grid.begin()) {
|
||||
const int32_t last_bar = (*i).bar;
|
||||
i--;
|
||||
bar_mod = (last_bar - (*i).bar) * 4;
|
||||
}
|
||||
|
||||
all_bars = true;
|
||||
}
|
||||
|
||||
double canvas_width_used = 1.0;
|
||||
if (leftmost_sample < grid.front().sample) {
|
||||
const samplecnt_t sample_distance = max ((samplecnt_t) 1, grid.back().sample - grid.front().sample);
|
||||
canvas_width_used = 1.0 - ((grid.front().sample - leftmost_sample) / (double) (sample_distance + grid.front().sample));
|
||||
}
|
||||
|
||||
beat_density = (beats * 10.0f) / (lines.canvas()->width() * canvas_width_used);
|
||||
|
||||
if (beat_density > 2.0f) {
|
||||
/* if the lines are too close together, they become useless */
|
||||
lines.clear ();
|
||||
return;
|
||||
}
|
||||
|
||||
/* constrain divisions to a log2 factor to cap line density */
|
||||
while (divisions > 3 && beat_density * divisions > 0.4) {
|
||||
divisions /= 2;
|
||||
}
|
||||
|
||||
lines.clear ();
|
||||
if (beat_density <= 0.12 && grid.begin() != grid.end() && grid.begin()->sample > 0 && !all_bars) {
|
||||
/* draw subdivisions of the beat before the first visible beat line XX this shouldn't happen now */
|
||||
std::vector<ARDOUR::TempoMap::BBTPoint> vec;
|
||||
vec.push_back (*i);
|
||||
draw_ticks (vec, divisions, leftmost_sample, sample_rate);
|
||||
}
|
||||
|
||||
for (i = grid.begin(); i != grid.end(); ++i) {
|
||||
|
||||
if ((*i).is_bar()) {
|
||||
/* keep all_bar beat density down */
|
||||
if (all_bars && beat_density > 0.3 && ((*i).bar % bar_mod) != 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
color = bar_color;
|
||||
} else {
|
||||
if (beat_density > 0.3) {
|
||||
continue; /* only draw beat lines if the gaps between beats are large. */
|
||||
}
|
||||
color = beat_color;
|
||||
}
|
||||
|
||||
ArdourCanvas::Coord xpos = PublicEditor::instance().sample_to_pixel_unrounded ((*i).sample);
|
||||
|
||||
lines.add (xpos, 1.0, color);
|
||||
|
||||
if (beat_density <= 0.12 && !all_bars) {
|
||||
/* draw subdivisions of this beat */
|
||||
std::vector<ARDOUR::TempoMap::BBTPoint> vec;
|
||||
vec.push_back (*i);
|
||||
draw_ticks (vec, divisions, leftmost_sample, sample_rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2007-2015 David Robillard <d@drobilla.net>
|
||||
* Copyright (C) 2012-2017 Paul Davis <paul@linuxaudiosystems.com>
|
||||
* Copyright (C) 2015-2017 Nick Mainsbridge <mainsbridge@gmail.com>
|
||||
*
|
||||
* 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; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ardour/tempo.h"
|
||||
|
||||
#include "canvas/line_set.h"
|
||||
|
||||
class TempoLines {
|
||||
public:
|
||||
TempoLines (ArdourCanvas::Container* group, double screen_height, ARDOUR::BeatsSamplesConverter* bfc);
|
||||
~TempoLines ();
|
||||
|
||||
void tempo_map_changed(samplepos_t new_origin);
|
||||
|
||||
void draw (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
unsigned divisions,
|
||||
ARDOUR::samplecnt_t leftmost_sample,
|
||||
ARDOUR::samplecnt_t sample_rate);
|
||||
|
||||
void show();
|
||||
void hide();
|
||||
|
||||
private:
|
||||
void draw_ticks (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
unsigned divisions,
|
||||
ARDOUR::samplecnt_t leftmost_sample,
|
||||
ARDOUR::samplecnt_t sample_rate);
|
||||
|
||||
ArdourCanvas::LineSet lines;
|
||||
ARDOUR::BeatsSamplesConverter* _bfc;
|
||||
};
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdkmm/color.h>
|
||||
#include <pangomm/fontdescription.h>
|
||||
#include "ardour/types.h"
|
||||
#include "pbd/signals.h"
|
||||
#include "selectable.h"
|
||||
|
||||
|
@ -313,11 +313,7 @@ TimeInfoBox::selection_changed ()
|
||||
|
||||
case Editing::MouseRange:
|
||||
if (selection.time.empty()) {
|
||||
/* XXX we really ought to be calling
|
||||
::get_mouse_mode_action() here but there is no actual
|
||||
mouse emode enum for smart mode (object-range).
|
||||
*/
|
||||
Glib::RefPtr<ToggleAction> tact = ActionManager::get_toggle_action (PublicEditor::instance().editor_name(), "set-mouse-mode-object-range");
|
||||
Glib::RefPtr<ToggleAction> tact = ActionManager::get_toggle_action (PublicEditor::instance().editor_name().c_str(), "set-mouse-mode-object-range");
|
||||
|
||||
if (tact->get_active() && !selection.regions.empty()) {
|
||||
/* show selected regions */
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <gtkmm/alignment.h>
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/drawingarea.h>
|
||||
#include <gtkmm/entry.h>
|
||||
#include <gtkmm/eventbox.h>
|
||||
#include <gtkmm/separator.h>
|
||||
#include <gtkmm/sizegroup.h>
|
||||
|
@ -192,7 +192,7 @@ TranscodeFfmpeg::probe ()
|
||||
PARSE_FRACTIONAL_FPS (timebase)
|
||||
} else if (key == X_("timecode") && m_duration == 0 && m_fps > 0) {
|
||||
int h, m, s;
|
||||
char f[32];
|
||||
char f[33];
|
||||
if (sscanf (i->at (16).c_str (), "%d:%d:%d:%32s", &h, &m, &s, f) == 4) {
|
||||
m_duration = (ARDOUR::samplecnt_t)floor (m_fps * (h * 3600.0 + m * 60.0 + s * 1.0 + atoi (f) / pow ((double)10, (int)strlen (f))));
|
||||
}
|
||||
|
@ -419,23 +419,7 @@ TriggerPage::rec_enable_changed (Trigger const * trigger)
|
||||
_midi_trig_box.set_trigger (ref);
|
||||
_midi_trig_box.show ();
|
||||
|
||||
_midi_editor->set_box (trigger->boxptr());
|
||||
|
||||
Stripable* st = dynamic_cast<Stripable*> (box.owner());
|
||||
assert (st);
|
||||
std::shared_ptr<MidiTrack> mt = std::dynamic_pointer_cast<MidiTrack> (st->shared_from_this());
|
||||
assert (mt);
|
||||
_midi_editor->set_track (mt);
|
||||
|
||||
if (trigger->the_region()) {
|
||||
|
||||
std::shared_ptr<MidiRegion> mr = std::dynamic_pointer_cast<MidiRegion> (trigger->the_region());
|
||||
|
||||
if (mr) {
|
||||
_midi_editor->set_region (mr);
|
||||
}
|
||||
}
|
||||
|
||||
_midi_editor->set (ref);
|
||||
_midi_editor->viewport().show ();
|
||||
}
|
||||
|
||||
@ -475,19 +459,7 @@ TriggerPage::selection_changed ()
|
||||
_midi_trig_box.set_trigger (ref);
|
||||
_midi_trig_box.show ();
|
||||
|
||||
std::shared_ptr<MidiTrack> mt = std::dynamic_pointer_cast<MidiTrack> (entry->strip().stripable());
|
||||
assert (mt);
|
||||
_midi_editor->set_track (mt);
|
||||
|
||||
if (trigger->the_region()) {
|
||||
|
||||
std::shared_ptr<MidiRegion> mr = std::dynamic_pointer_cast<MidiRegion> (trigger->the_region());
|
||||
|
||||
if (mr) {
|
||||
_midi_editor->set_region (mr);
|
||||
}
|
||||
}
|
||||
|
||||
_midi_editor->set (ref);
|
||||
_midi_editor->viewport().show ();
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "audio_region_operations_box.h"
|
||||
#include "audio_region_properties_box.h"
|
||||
#include "audio_trigger_properties_box.h"
|
||||
#include "axis_provider.h"
|
||||
#include "cuebox_ui.h"
|
||||
#include "fitted_canvas_widget.h"
|
||||
#include "midi_region_operations_box.h"
|
||||
|
@ -797,7 +797,6 @@ TriggerUI::trigger_changed (PropertyChange const& what)
|
||||
on_trigger_changed(what);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TriggerUI::set_trigger (ARDOUR::TriggerReference tr)
|
||||
{
|
||||
|
@ -84,8 +84,8 @@ UIConfiguration::UIConfiguration ()
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,name,val) var (name,val),
|
||||
#define CANVAS_FONT_VARIABLE(var,name) var (name),
|
||||
#include "ui_config_vars.h"
|
||||
#include "canvas_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#include "canvas_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
|
||||
@ -101,7 +101,7 @@ UIConfiguration::UIConfiguration ()
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,name,value) _my_variables.insert (std::make_pair ((name), &(var)));
|
||||
#define CANVAS_FONT_VARIABLE(var,name) /* no need for metadata for these */
|
||||
#include "ui_config_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
|
||||
@ -222,7 +222,7 @@ UIConfiguration::map_parameters (std::function<void (std::string)>& functor)
|
||||
{
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,Name,value) functor (Name);
|
||||
#include "ui_config_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
}
|
||||
|
||||
@ -572,8 +572,8 @@ UIConfiguration::get_variables (std::string const & node_name) const
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,Name,value) if (node->name() == "UI") { var.add_to_node (*node); }
|
||||
#define CANVAS_FONT_VARIABLE(var,Name) if (node->name() == "Canvas") { var.add_to_node (*node); }
|
||||
#include "ui_config_vars.h"
|
||||
#include "canvas_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#include "canvas_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
|
||||
@ -707,8 +707,8 @@ UIConfiguration::set_variables (const XMLNode& node)
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,name,val) if (var.set_from_node (node)) { ParameterChanged (name); }
|
||||
#define CANVAS_FONT_VARIABLE(var,name) if (var.set_from_node (node)) { ParameterChanged (name); }
|
||||
#include "ui_config_vars.h"
|
||||
#include "canvas_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#include "canvas_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
}
|
||||
@ -867,4 +867,4 @@ UIConfiguration::color_to_hex_string_no_alpha (Gtkmm2ext::Color c)
|
||||
return buf;
|
||||
}
|
||||
|
||||
#include "configuration_metadata.h"
|
||||
#include "configuration_metadata.inc.h"
|
||||
|
@ -114,13 +114,13 @@ public:
|
||||
#define UI_CONFIG_VARIABLE(Type,var,name,value) \
|
||||
Type get_##var () const { return var.get(); } \
|
||||
bool set_##var (Type val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
|
||||
#include "ui_config_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define CANVAS_FONT_VARIABLE(var,name) \
|
||||
Pango::FontDescription get_##var () const { return ARDOUR_UI_UTILS::sanitized_font (var.get()); } \
|
||||
Pango::FontDescription get_Ardour##var () const { return ARDOUR_UI_UTILS::ardour_font (var.get()); } \
|
||||
bool set_##var (const std::string& val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
|
||||
#include "canvas_vars.h"
|
||||
#include "canvas_vars.inc.h"
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
|
||||
private:
|
||||
@ -128,11 +128,11 @@ private:
|
||||
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
#define UI_CONFIG_VARIABLE(Type,var,name,value) PBD::ConfigVariable<Type> var;
|
||||
#include "ui_config_vars.h"
|
||||
#include "ui_config_vars.inc.h"
|
||||
#undef UI_CONFIG_VARIABLE
|
||||
|
||||
#define CANVAS_FONT_VARIABLE(var,name) PBD::ConfigVariable<std::string> var;
|
||||
#include "canvas_vars.h"
|
||||
#include "canvas_vars.inc.h"
|
||||
#undef CANVAS_FONT_VARIABLE
|
||||
|
||||
XMLNode& state () const;
|
||||
|
@ -203,12 +203,15 @@ VelocityDisplay::set_size_and_position (GhostEvent& gev)
|
||||
void
|
||||
VelocityDisplay::update_note (NoteBase* nb)
|
||||
{
|
||||
GhostEvent* gev = GhostEvent::find (nb->note(), events, _optimization_iterator);
|
||||
auto iter = events.end();
|
||||
|
||||
GhostEvent* gev = GhostEvent::find (nb->note(), events, iter);
|
||||
|
||||
if (!gev) {
|
||||
return;
|
||||
}
|
||||
|
||||
_optimization_iterator = iter;
|
||||
update_ghost_event (gev);
|
||||
}
|
||||
|
||||
@ -319,7 +322,9 @@ VelocityDisplay::y_position_to_velocity (double y) const
|
||||
void
|
||||
VelocityDisplay::note_selected (NoteBase* ev)
|
||||
{
|
||||
GhostEvent* gev = GhostEvent::find (ev->note(), events, _optimization_iterator);
|
||||
auto ignore_optiter = events.end();
|
||||
|
||||
GhostEvent* gev = GhostEvent::find (ev->note(), events, ignore_optiter);
|
||||
|
||||
if (!gev) {
|
||||
return;
|
||||
@ -430,3 +435,22 @@ VelocityDisplay::set_selected (bool yn)
|
||||
base.parent()->raise_to_top ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VelocityDisplay::hide ()
|
||||
{
|
||||
if (lolli_container) {
|
||||
lolli_container->hide ();
|
||||
lolli_container->set_ignore_events (true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
VelocityDisplay::show ()
|
||||
{
|
||||
if (lolli_container) {
|
||||
lolli_container->show ();
|
||||
lolli_container->set_ignore_events (false);
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,9 @@ class VelocityDisplay
|
||||
VelocityDisplay (EditingContext&, MidiViewBackground&, MidiView&, ArdourCanvas::Rectangle& base_rect, ArdourCanvas::Container&, GhostEvent::EventList& el, Gtkmm2ext::Color oc);
|
||||
virtual ~VelocityDisplay ();
|
||||
|
||||
void hide ();
|
||||
void show ();
|
||||
|
||||
void redisplay();
|
||||
void add_note(NoteBase*);
|
||||
|
||||
|
@ -41,6 +41,7 @@ class ViewBackground
|
||||
virtual ~ViewBackground ();
|
||||
|
||||
virtual double height() const { return 0.; }
|
||||
virtual double width() const { return 0.; }
|
||||
virtual double contents_height() const { return 0.; }
|
||||
|
||||
/** @return y position, or -1 if hidden */
|
||||
|
@ -21,6 +21,8 @@
|
||||
#define __ardour_visibility_group__
|
||||
|
||||
#include <gtkmm/liststore.h>
|
||||
#include <gtkmm/widget.h>
|
||||
|
||||
#include "pbd/signals.h"
|
||||
|
||||
class XMLNode;
|
||||
|
@ -24,12 +24,16 @@
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
#include <glibmm/refptr.h>
|
||||
#include <sigc++/trackable.h>
|
||||
|
||||
#include "gtkmm2ext/actions.h"
|
||||
#include "gtkmm2ext/bindings.h"
|
||||
#include "gtkmm2ext/window_proxy.h"
|
||||
|
||||
#include <glibmm/refptr.h>
|
||||
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
class XMLNode;
|
||||
|
||||
namespace Gtk {
|
||||
|
@ -159,7 +159,7 @@ gtk2_ardour_sources = [
|
||||
'main.cc',
|
||||
'main_clock.cc',
|
||||
'marker.cc',
|
||||
'mergeable_line.cc',
|
||||
'mergeable_line.cc',
|
||||
'midi_automation_line.cc',
|
||||
'midi_channel_dialog.cc',
|
||||
'midi_channel_selector.cc',
|
||||
@ -772,6 +772,7 @@ def build(bld):
|
||||
if sys.platform == 'darwin':
|
||||
basefont = ""
|
||||
font_sizes = {
|
||||
'VERYSMALL' : '7',
|
||||
'SMALLER' : '9',
|
||||
'SMALL' : '10',
|
||||
'NORMAL' : '11',
|
||||
@ -789,6 +790,7 @@ def build(bld):
|
||||
else: # Linux/X11 & Windows fonts
|
||||
basefont = '' # unspecified - use system defaults
|
||||
font_sizes = {
|
||||
'VERYSMALL' : '8',
|
||||
'SMALLER' : '6',
|
||||
'SMALL' : '7',
|
||||
'NORMAL' : '8',
|
||||
@ -879,7 +881,7 @@ def build(bld):
|
||||
obj.stdin = 'livetrax.menus.in'
|
||||
else:
|
||||
obj.stdin = 'ardour.menus.in'
|
||||
obj.stdout = 'ardour.menus'
|
||||
obj.stdout = 'ardour.menus'
|
||||
bld.install_files (bld.env['CONFDIR'], 'ardour.menus')
|
||||
|
||||
# Freedesktop
|
||||
@ -971,26 +973,27 @@ def build(bld):
|
||||
bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
|
||||
mo)
|
||||
|
||||
def i18n(bld):
|
||||
def i18n_func(bld):
|
||||
I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
|
||||
autowaf.build_i18n(bld, '.', 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
|
||||
'Paul Davis')
|
||||
appdata_i18n_pot(bld)
|
||||
appdata_i18n_po(bld)
|
||||
appdata_i18n_mo(bld)
|
||||
|
||||
def i18n_pot(bld):
|
||||
def i18n_pot_func(bld):
|
||||
I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
|
||||
autowaf.build_i18n_pot(bld, '.', 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
|
||||
'Paul Davis')
|
||||
appdata_i18n_pot(bld)
|
||||
|
||||
def i18n_po(bld):
|
||||
def i18n_po_func(bld):
|
||||
I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
|
||||
autowaf.build_i18n_po(bld, '.', 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
|
||||
'Paul Davis')
|
||||
appdata_i18n_po(bld)
|
||||
|
||||
def i18n_mo(bld):
|
||||
def i18n_mo_func(bld):
|
||||
I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
|
||||
autowaf.build_i18n_mo(bld, '.', 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
|
||||
'Paul Davis')
|
||||
@ -998,7 +1001,7 @@ def i18n_mo(bld):
|
||||
def appdata_i18n_pot(bld):
|
||||
potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
|
||||
'ardour.appdata.pot')
|
||||
if bld.cmd == 'i18n_pot':
|
||||
if bld.cmd in ('i18n_pot', 'i18n'):
|
||||
Logs.info('Generating pot file from Ardour appdata')
|
||||
itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
|
||||
adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
|
||||
|
@ -16,22 +16,22 @@ top = '.'
|
||||
out = 'build'
|
||||
|
||||
libaaf_sources = [
|
||||
'AAFClass.c',
|
||||
'AAFCore.c',
|
||||
'AAFDump.c',
|
||||
'AAFIEssenceFile.c',
|
||||
'AAFIface.c',
|
||||
'AAFIParser.c',
|
||||
'AAFToText.c',
|
||||
'CFBDump.c',
|
||||
'LibCFB.c',
|
||||
'ProTools.c',
|
||||
'MediaComposer.c',
|
||||
'Resolve.c',
|
||||
'RIFFParser.c',
|
||||
'URIParser.c',
|
||||
'utils.c',
|
||||
'log.c',
|
||||
'AAFClass.c',
|
||||
'AAFCore.c',
|
||||
'AAFDump.c',
|
||||
'AAFIEssenceFile.c',
|
||||
'AAFIface.c',
|
||||
'AAFIParser.c',
|
||||
'AAFToText.c',
|
||||
'CFBDump.c',
|
||||
'LibCFB.c',
|
||||
'ProTools.c',
|
||||
'MediaComposer.c',
|
||||
'Resolve.c',
|
||||
'RIFFParser.c',
|
||||
'URIParser.c',
|
||||
'utils.c',
|
||||
'log.c',
|
||||
]
|
||||
|
||||
def options(opt):
|
||||
|
@ -42,6 +42,3 @@ def build(bld):
|
||||
obj.name = 'libappleutility'
|
||||
obj.target = 'appleutility'
|
||||
obj.install_path = os.path.join(bld.env['LIBDIR'], 'appleutility')
|
||||
|
||||
def i18n(bld):
|
||||
pass
|
||||
|
@ -1881,10 +1881,6 @@
|
||||
RelativePath="..\ardour\export_handler.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\export_multiplication.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\export_pointers.h"
|
||||
>
|
||||
@ -2350,7 +2346,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\rc_configuration_vars.h"
|
||||
RelativePath="..\ardour\rc_configuration_vars.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -2458,7 +2454,7 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\session_configuration_vars.h"
|
||||
RelativePath="..\ardour\session_configuration_vars.inc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
@ -2545,10 +2541,6 @@
|
||||
RelativePath="..\ardour\soundcloud_upload.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\soundseq.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\ardour\source.h"
|
||||
>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user