13
0

use different source file for canvas tester

This commit is contained in:
Paul Davis 2017-02-02 13:29:17 +01:00
parent f50c99e2a9
commit 82f104b8f0
2 changed files with 265 additions and 1 deletions

263
gtk2_ardour/toolbar_test.cc Normal file
View File

@ -0,0 +1,263 @@
#include <glibmm.h>
#include <gtkmm/main.h>
#include <gtkmm/box.h>
#include <gtkmm/window.h>
#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<Gtk::Action> 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;
}

View File

@ -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':