From 82f104b8f07e472a096acb08fb8cfc091f660112 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 2 Feb 2017 13:29:17 +0100 Subject: use different source file for canvas tester --- gtk2_ardour/toolbar_test.cc | 263 ++++++++++++++++++++++++++++++++++++++++++++ gtk2_ardour/wscript | 3 +- 2 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 gtk2_ardour/toolbar_test.cc diff --git a/gtk2_ardour/toolbar_test.cc b/gtk2_ardour/toolbar_test.cc new file mode 100644 index 0000000000..aa89ec48c6 --- /dev/null +++ b/gtk2_ardour/toolbar_test.cc @@ -0,0 +1,263 @@ +#include +#include +#include +#include + +#include "pbd/debug.h" +#include "pbd/error.h" +#include "pbd/failed_constructor.h" +#include "pbd/pthread_utils.h" +#include "pbd/receiver.h" +#include "pbd/transmitter.h" + +#include "ardour/audioengine.h" +#include "ardour/filename_extensions.h" +#include "ardour/types.h" + +#include "gtkmm2ext/actions.h" +#include "gtkmm2ext/application.h" +#include "gtkmm2ext/window_title.h" +#include "gtkmm2ext/gtk_ui.h" +#include "gtkmm2ext/utils.h" + +#include "canvas/types.h" +#include "canvas/canvas.h" +#include "canvas/container.h" +#include "canvas/colors.h" +#include "canvas/debug.h" +#include "canvas/grid.h" +#include "canvas/scroll_group.h" +#include "canvas/text.h" +#include "canvas/widget.h" + +#include "ardour_button.h" +#include "ui_config.h" + +#include "pbd/i18n.h" + +using namespace std; +using namespace ARDOUR; +using namespace PBD; +using namespace Gtkmm2ext; +using namespace Gtk; + +#include "ardour/vst_types.h" + +static const char* localedir = LOCALEDIR; +int vstfx_init (void*) { return 0; } +void vstfx_exit () {} +void vstfx_destroy_editor (VSTState*) {} + +class LogReceiver : public Receiver +{ + protected: + void receive (Transmitter::Channel chn, const char * str); +}; + +static LogReceiver log_receiver; + +void +LogReceiver::receive (Transmitter::Channel chn, const char * str) +{ + const char *prefix = ""; + + switch (chn) { + case Transmitter::Error: + prefix = "[ERROR]: "; + break; + case Transmitter::Info: + prefix = "[INFO]: "; + break; + case Transmitter::Warning: + prefix = "[WARNING]: "; + break; + case Transmitter::Fatal: + prefix = "[FATAL]: "; + break; + case Transmitter::Throw: + /* this isn't supposed to happen */ + cerr << "Game Over\n"; + abort (); + } + + /* note: iostreams are already thread-safe: no external + lock required. + */ + + std::cout << prefix << str << std::endl; + + if (chn == Transmitter::Fatal) { + ::exit (9); + } +} + +/* ***************************************************************************/ +/* ***************************************************************************/ +/* ***************************************************************************/ + +ArdourButton* +make_transport_button (std::string const & action, Gtkmm2ext::ArdourIcon::Icon icon) +{ + ArdourButton* button = new ArdourButton; + button->set_name ("transport button"); + Glib::RefPtr act; + act = ActionManager::get_action (action.c_str()); + button->set_related_action (act); + button->set_icon (icon); + return button; +} + +class CANVAS_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr +{ +public: + CANVAS_UI (int *argcp, char **argvp[], const char* localedir); + ~CANVAS_UI(); +private: + int starting (); + bool main_window_delete_event (GdkEventAny* ev) { finish (); return true; } + void finish () { quit (); } + Gtk::Window _main_window; + + void initialize_canvas (ArdourCanvas::Canvas& canvas); + + void canvas_size_request (Gtk::Requisition* req); + void canvas_size_allocated (Gtk::Allocation& alloc); + + ArdourCanvas::GtkCanvas* canvas; + ArdourCanvas::Container* group; + ArdourCanvas::Grid* grid; + + ArdourButton test_button; +}; + +/* ***************************************************************************/ + +CANVAS_UI::CANVAS_UI (int *argcp, char **argvp[], const char* localedir) + : Gtkmm2ext::UI (PROGRAM_NAME, X_("gui"), argcp, argvp) +{ + Gtkmm2ext::init (localedir); + UIConfiguration::instance().post_gui_init (); + + Gtkmm2ext::WindowTitle title ("Canvas Toolbar Test"); + _main_window.set_title (title.get_string()); + _main_window.set_flags (CAN_FOCUS); + _main_window.signal_delete_event().connect (sigc::mem_fun (*this, &CANVAS_UI::main_window_delete_event)); + + canvas = new ArdourCanvas::GtkCanvas (); + + initialize_canvas (*canvas); + + canvas->signal_size_request().connect (sigc::mem_fun (*this, &CANVAS_UI::canvas_size_request)); + canvas->signal_size_allocate().connect (sigc::mem_fun (*this, &CANVAS_UI::canvas_size_allocated)); + + _main_window.add (*canvas); + _main_window.show_all (); +} + +CANVAS_UI::~CANVAS_UI () +{ +} + +int +CANVAS_UI::starting () +{ + Application* app = Application::instance (); + app->ready (); + return 0; +} + +void +CANVAS_UI::initialize_canvas (ArdourCanvas::Canvas& canvas) +{ + using namespace ArdourCanvas; + canvas.set_background_color (rgba_to_color (0.0, 0.0, 0.4, 1.0)); + + ScrollGroup* scroll_group = new ScrollGroup (canvas.root(), + ScrollGroup::ScrollSensitivity (ScrollGroup::ScrollsVertically|ScrollGroup::ScrollsHorizontally)); + + grid = new ArdourCanvas::Grid (scroll_group); + + grid->set_padding (3.0); + + grid->set_row_spacing (3.0); + grid->set_col_spacing (3.0); + grid->set_homogenous (true); + + ArdourCanvas::Widget* w1 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Roll", ArdourIcon::TransportPlay)); + CANVAS_DEBUG_NAME (w1, "w1"); + grid->place (w1, 0, 0); + ArdourCanvas::Widget* w2 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Stop", ArdourIcon::TransportStop)); + CANVAS_DEBUG_NAME (w2, "w2"); + grid->place (w2, 1, 0); + ArdourCanvas::Widget* w3 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Record", ArdourIcon::RecButton)); + CANVAS_DEBUG_NAME (w3, "w3"); + grid->place (w3, 2, 0); + ArdourCanvas::Widget* w4 = new ArdourCanvas::Widget (&canvas, *make_transport_button ("Transport/Loop", ArdourIcon::TransportLoop)); + CANVAS_DEBUG_NAME (w4, "w4"); + grid->place (w4, 3, 0); +} + +void +CANVAS_UI::canvas_size_request (Gtk::Requisition* req) +{ + ArdourCanvas::Rect bbox = canvas->root()->bounding_box(); + req->width = bbox.width(); + req->height = bbox.height(); +} + +void +CANVAS_UI::canvas_size_allocated (Gtk::Allocation& alloc) +{ +} + +/* ***************************************************************************/ +/* ***************************************************************************/ +/* ***************************************************************************/ + +static CANVAS_UI *ui = 0; + +int main (int argc, char **argv) +{ +#if 0 + fixup_bundle_environment (argc, argv, localedir); + load_custom_fonts(); + // TODO setlocale.. +#endif + + if (!ARDOUR::init (false, true, localedir)) { + cerr << "Ardour failed to initialize\n" << endl; + ::exit (EXIT_FAILURE); + } + + if (!Glib::thread_supported()) { + Glib::thread_init(); + } + + pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); + + log_receiver.listen_to (error); + log_receiver.listen_to (info); + log_receiver.listen_to (fatal); + log_receiver.listen_to (warning); + + if (UIConfiguration::instance().pre_gui_init ()) { + error << _("Could not complete pre-GUI initialization") << endmsg; + exit (1); + } + + // we could load a session here, if needed + // see ../session_utils/common.cc + + ui = new CANVAS_UI (&argc, &argv, localedir); + ui->run (log_receiver); + + info << "Farewell" << endmsg; + + Gtkmm2ext::Application::instance()->cleanup(); + delete ui; + ui = 0; + + ARDOUR::cleanup (); + pthread_cancel_all (); + return 0; +} diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 78f48855a0..4aca7b1958 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -518,7 +518,8 @@ def build(bld): ] obj.linkflags = '' obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML ' - obj.source += [ 'canvas_test.cc', ] + # obj.source += [ 'canvas_test.cc', ] + obj.source += [ 'toolbar_test.cc', ] if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw': -- cgit v1.2.3