[Summary] Progressing UI
|
|
@ -251,7 +251,6 @@ Editor::Editor ()
|
|||
, editor_summary_pane (get_v_paned ("editor_summary_pane"))
|
||||
, inspector_home (get_container ("inspector_home"))
|
||||
, _master_bus_ui_home (get_container ("master_bus_ui_home"))
|
||||
, _compact_meter_bridge_home (get_container ("compact_meter_bridge_home"))
|
||||
, vpacker (get_v_box ("vpacker"))
|
||||
, _tool_marker_button (get_waves_button ("tool_marker_button"))
|
||||
, _tool_zoom_button (get_waves_button ("tool_zoom_button"))
|
||||
|
|
@ -315,7 +314,8 @@ Editor::Editor ()
|
|||
/* we are a singleton */
|
||||
|
||||
PublicEditor::_instance = this;
|
||||
_compact_meter_bridge_home.add (_compact_meter_bridge);
|
||||
get_container ("compact_meter_bridge_home").add (_compact_meter_bridge);
|
||||
get_container ("mixer_bridge_view_home").add (_mixer_bridge_view);
|
||||
|
||||
_have_idled = false;
|
||||
|
||||
|
|
@ -1281,6 +1281,7 @@ Editor::set_session (Session *t)
|
|||
_routes->set_session (_session);
|
||||
_locations->set_session (_session);
|
||||
_compact_meter_bridge.set_session (_session);
|
||||
_mixer_bridge_view.set_session (_session);
|
||||
|
||||
if (rhythm_ferret) {
|
||||
rhythm_ferret->set_session (_session);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
#include "editor_items.h"
|
||||
#include "region_selection.h"
|
||||
#include "compact_meter_bridge.h"
|
||||
#include "mixer_bridge_view.h"
|
||||
|
||||
namespace Gtkmm2ext {
|
||||
class TearOff;
|
||||
|
|
@ -688,7 +689,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
|||
|
||||
Gtk::Container& inspector_home;
|
||||
Gtk::Container& _master_bus_ui_home;
|
||||
Gtk::Container& _compact_meter_bridge_home;
|
||||
MasterBusUI* _master_bus_ui;
|
||||
Gtk::VBox& vpacker;
|
||||
|
||||
|
|
@ -1901,6 +1901,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
|||
|
||||
MixerStrip *current_mixer_strip;
|
||||
CompactMeterbridge _compact_meter_bridge;
|
||||
MixerBridgeView _mixer_bridge_view;
|
||||
bool show_editor_mixer_when_tracks_arrive;
|
||||
void cms_new (boost::shared_ptr<ARDOUR::Route>);
|
||||
void current_mixer_strip_hidden ();
|
||||
|
|
|
|||
|
|
@ -255,6 +255,7 @@ void
|
|||
Editor::track_mixer_selection ()
|
||||
{
|
||||
Mixer_UI::instance()->selection().RoutesChanged.connect (sigc::mem_fun (*this, &Editor::follow_mixer_selection));
|
||||
_mixer_bridge_view.track_editor_selection ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 276 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 208 B After Width: | Height: | Size: 201 B |
411
gtk2_ardour/mixer_bridge_view.cc
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
/*
|
||||
Copyright (C) 2014 Waves Audio Ltd.
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef WAF_BUILD
|
||||
#include "gtk2ardour-config.h"
|
||||
#endif
|
||||
|
||||
#include <map>
|
||||
#include <sigc++/bind.h>
|
||||
|
||||
#include <gtkmm/accelmap.h>
|
||||
|
||||
#include <glibmm/threads.h>
|
||||
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/window_title.h>
|
||||
|
||||
#include "ardour/debug.h"
|
||||
#include "ardour/midi_track.h"
|
||||
#include "ardour/route_group.h"
|
||||
#include "ardour/session.h"
|
||||
|
||||
#include "ardour/audio_track.h"
|
||||
#include "ardour/midi_track.h"
|
||||
|
||||
#include "mixer_bridge_view.h"
|
||||
|
||||
#include "keyboard.h"
|
||||
#include "monitor_section.h"
|
||||
#include "public_editor.h"
|
||||
#include "ardour_ui.h"
|
||||
#include "utils.h"
|
||||
#include "route_sorter.h"
|
||||
#include "actions.h"
|
||||
#include "gui_thread.h"
|
||||
#include "global_signals.h"
|
||||
#include "meter_patterns.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
using namespace Gtk;
|
||||
using namespace Glib;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
using namespace ArdourMeter;
|
||||
|
||||
using PBD::atoi;
|
||||
|
||||
struct SignalOrderRouteSorter {
|
||||
bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
|
||||
if (a->is_master() || a->is_monitor()) {
|
||||
/* "a" is a special route (master, monitor, etc), and comes
|
||||
* last in the mixer ordering
|
||||
*/
|
||||
return false;
|
||||
} else if (b->is_master() || b->is_monitor()) {
|
||||
/* everything comes before b */
|
||||
return true;
|
||||
}
|
||||
return a->order_key () < b->order_key ();
|
||||
}
|
||||
};
|
||||
|
||||
MixerBridgeView::MixerBridgeView ()
|
||||
: Gtk::EventBox()
|
||||
, WavesUI ("mixer_bridge_view.xml", *this)
|
||||
, _mixer_strips_home (get_box ("mixer_strips_home"))
|
||||
, _following_editor_selection (false)
|
||||
{
|
||||
set_attributes (*this, *xml_tree ()->root (), XMLNodeMap ());
|
||||
signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
|
||||
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&MixerBridgeView::sync_order_keys, this), gui_context());
|
||||
MixerStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&MixerBridgeView::remove_strip, this, _1), gui_context());
|
||||
}
|
||||
|
||||
MixerBridgeView::~MixerBridgeView ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::set_session (Session* s)
|
||||
{
|
||||
SessionHandlePtr::set_session (s);
|
||||
|
||||
if (!_session) {
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<RouteList> routes = _session->get_routes();
|
||||
|
||||
add_strips(*routes);
|
||||
|
||||
_session->RouteAdded.connect (_session_connections, invalidator (*this), boost::bind (&MixerBridgeView::add_strips, this, _1), gui_context());
|
||||
|
||||
start_updating ();
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::track_editor_selection ()
|
||||
{
|
||||
PublicEditor::instance().get_selection().TracksChanged.connect (sigc::mem_fun (*this, &MixerBridgeView::follow_editor_selection));
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::session_going_away ()
|
||||
{
|
||||
ENSURE_GUI_THREAD (*this, &MixerBridgeView::session_going_away);
|
||||
|
||||
for (std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
delete (*i).second;
|
||||
}
|
||||
|
||||
_strips.clear ();
|
||||
stop_updating ();
|
||||
|
||||
SessionHandlePtr::session_going_away ();
|
||||
_session = 0;
|
||||
}
|
||||
|
||||
gint
|
||||
MixerBridgeView::start_updating ()
|
||||
{
|
||||
fast_screen_update_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect (sigc::mem_fun(*this, &MixerBridgeView::fast_update_strips));
|
||||
return 0;
|
||||
}
|
||||
|
||||
gint
|
||||
MixerBridgeView::stop_updating ()
|
||||
{
|
||||
fast_screen_update_connection.disconnect();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::fast_update_strips ()
|
||||
{
|
||||
if (!is_mapped () || !_session) {
|
||||
return;
|
||||
}
|
||||
for (std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
(*i).second->fast_update ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::add_strips (RouteList& routes)
|
||||
{
|
||||
// First detach all the prviously added strips from the ui tree.
|
||||
for (std::map<boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
_mixer_strips_home.remove (*(*i).second); // we suppose _mixer_strips_home is
|
||||
// the parnet.
|
||||
}
|
||||
|
||||
// Now create the strips for newly added routes
|
||||
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
|
||||
boost::shared_ptr<Route> route = (*x);
|
||||
if (route->is_auditioner() || route->is_monitor() || route->is_master()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
MixerStrip* strip = strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(), _session, route, "mixer_strip.xml");
|
||||
strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &MixerBridgeView::strip_button_release_event), strip));
|
||||
_strips [route] = strip;
|
||||
strip->show();
|
||||
}
|
||||
|
||||
// Now sort the session's routes and pack the strips accordingly
|
||||
SignalOrderRouteSorter sorter;
|
||||
RouteList copy(*_session->get_routes());
|
||||
copy.sort(sorter);
|
||||
|
||||
for (RouteList::iterator x = copy.begin(); x != copy.end(); ++x) {
|
||||
boost::shared_ptr<Route> route = (*x);
|
||||
if (route->is_auditioner() || route->is_monitor() || route->is_master()) {
|
||||
continue;
|
||||
}
|
||||
std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.find (route);
|
||||
if (i != _strips.end ()) {
|
||||
_mixer_strips_home.pack_start (*(*i).second, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::remove_strip (MixerStrip* strip)
|
||||
{
|
||||
if (_session && _session->deletion_in_progress()) {
|
||||
return;
|
||||
}
|
||||
|
||||
boost::shared_ptr<ARDOUR::Route> route = strip->route ();
|
||||
std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.find (route);
|
||||
if (i != _strips.end ()) {
|
||||
_strips.erase (i);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::sync_order_keys ()
|
||||
{
|
||||
Glib::Threads::Mutex::Lock lm (_resync_mutex);
|
||||
|
||||
if (!_session) {
|
||||
return;
|
||||
}
|
||||
|
||||
SignalOrderRouteSorter sorter;
|
||||
boost::shared_ptr<RouteList> routes = _session->get_routes();
|
||||
|
||||
for (std::map<boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
_mixer_strips_home.remove (*(*i).second); // we suppose _mixer_strips_home is
|
||||
// the parnet.
|
||||
}
|
||||
|
||||
RouteList copy(*routes);
|
||||
copy.sort(sorter);
|
||||
|
||||
for (RouteList::iterator x = copy.begin(); x != copy.end(); ++x) {
|
||||
boost::shared_ptr<Route> route = (*x);
|
||||
if (route->is_auditioner() || route->is_monitor() || route->is_master()) {
|
||||
continue;
|
||||
}
|
||||
std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.find (route);
|
||||
if (i != _strips.end ()) {
|
||||
_mixer_strips_home.pack_start (*(*i).second, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::follow_editor_selection ()
|
||||
{
|
||||
if (_following_editor_selection) {
|
||||
return;
|
||||
}
|
||||
|
||||
_following_editor_selection = true;
|
||||
_selection.block_routes_changed (true);
|
||||
|
||||
TrackSelection& s (PublicEditor::instance().get_selection().tracks);
|
||||
|
||||
_selection.clear_routes ();
|
||||
|
||||
for (TrackViewList::iterator i = s.begin(); i != s.end(); ++i) {
|
||||
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||
if (rtav) {
|
||||
MixerStrip* ms = strip_by_route (rtav->route());
|
||||
if (ms) {
|
||||
_selection.add (ms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_following_editor_selection = false;
|
||||
_selection.block_routes_changed (false);
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::set_route_targets_for_operation ()
|
||||
{
|
||||
_route_targets.clear ();
|
||||
|
||||
if (!_selection.empty()) {
|
||||
_route_targets = _selection.routes;
|
||||
return;
|
||||
}
|
||||
|
||||
/* nothing selected ... try to get mixer strip at mouse */
|
||||
|
||||
int x, y;
|
||||
get_pointer (x, y);
|
||||
|
||||
MixerStrip* ms = strip_by_x (x);
|
||||
|
||||
if (ms) {
|
||||
_route_targets.insert (ms);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MixerBridgeView::toggle_midi_input_active (bool flip_others)
|
||||
{
|
||||
boost::shared_ptr<RouteList> rl (new RouteList);
|
||||
bool onoff = false;
|
||||
|
||||
set_route_targets_for_operation ();
|
||||
|
||||
for (RouteUISelection::iterator r = _route_targets.begin(); r != _route_targets.end(); ++r) {
|
||||
boost::shared_ptr<MidiTrack> mt = (*r)->midi_track();
|
||||
|
||||
if (mt) {
|
||||
rl->push_back ((*r)->route());
|
||||
onoff = !mt->input_active();
|
||||
}
|
||||
}
|
||||
|
||||
_session->set_exclusive_input_active (rl, onoff, flip_others);
|
||||
}
|
||||
|
||||
bool
|
||||
MixerBridgeView::strip_button_release_event (GdkEventButton *ev, MixerStrip *strip)
|
||||
{
|
||||
if (ev->button == 1) {
|
||||
if (_selection.selected (strip)) {
|
||||
/* primary-click: toggle selection state of strip */
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||
_selection.remove (strip);
|
||||
}
|
||||
} else {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
|
||||
_selection.add (strip);
|
||||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::RangeSelectModifier)) {
|
||||
|
||||
if (!_selection.selected(strip)) {
|
||||
|
||||
/* extend selection */
|
||||
|
||||
vector<MixerStrip*> tmp;
|
||||
bool accumulate = false;
|
||||
|
||||
tmp.push_back (strip);
|
||||
|
||||
for (std::map<boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
if ((*i).second == strip) {
|
||||
/* hit clicked strip, start accumulating till we hit the first
|
||||
selected strip
|
||||
*/
|
||||
if (accumulate) {
|
||||
/* done */
|
||||
break;
|
||||
} else {
|
||||
accumulate = true;
|
||||
}
|
||||
} else if (_selection.selected ((*i).second)) {
|
||||
/* hit selected strip. if currently accumulating others,
|
||||
we're done. if not accumulating others, start doing so.
|
||||
*/
|
||||
if (accumulate) {
|
||||
/* done */
|
||||
break;
|
||||
} else {
|
||||
accumulate = true;
|
||||
}
|
||||
} else {
|
||||
if (accumulate) {
|
||||
tmp.push_back ((*i).second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (vector<MixerStrip*>::iterator i = tmp.begin(); i != tmp.end(); ++i) {
|
||||
_selection.add (*i);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
_selection.set (strip);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
MixerStrip*
|
||||
MixerBridgeView::strip_by_route (boost::shared_ptr<Route> route)
|
||||
{
|
||||
std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.find (route);
|
||||
if (i != _strips.end ()) {
|
||||
return (*i).second;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MixerStrip*
|
||||
MixerBridgeView::strip_by_x (int x)
|
||||
{
|
||||
for (std::map<boost::shared_ptr<ARDOUR::Route>, MixerStrip*>::iterator i = _strips.begin(); i != _strips.end(); ++i) {
|
||||
int x1, x2, y;
|
||||
|
||||
(*i).second->translate_coordinates (*this, 0, 0, x1, y);
|
||||
x2 = x1 + (*i).second->get_width();
|
||||
|
||||
if (x >= x1 && x <= x2) {
|
||||
return (*i).second;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
83
gtk2_ardour/mixer_bridge_view.h
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
Copyright (C) 2014 Waves Audio Ltd.
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
#ifndef __ardour_mixer_bridge_view_h__
|
||||
#define __ardour_mixer_bridge_view_h__
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
#include <gtkmm/label.h>
|
||||
#include <gtkmm/window.h>
|
||||
|
||||
#include "ardour/ardour.h"
|
||||
#include "ardour/types.h"
|
||||
#include "ardour/session_handle.h"
|
||||
|
||||
#include "pbd/stateful.h"
|
||||
#include "pbd/signals.h"
|
||||
|
||||
#include "gtkmm2ext/visibility_tracker.h"
|
||||
|
||||
#include "waves_ui.h"
|
||||
#include "mixer_strip.h"
|
||||
#include "mixer_actor.h"
|
||||
|
||||
class MixerBridgeView :
|
||||
public Gtk::EventBox,
|
||||
public WavesUI,
|
||||
public PBD::ScopedConnectionList,
|
||||
public ARDOUR::SessionHandlePtr,
|
||||
public MixerActor
|
||||
{
|
||||
public:
|
||||
MixerBridgeView ();
|
||||
~MixerBridgeView();
|
||||
void set_session (ARDOUR::Session *);
|
||||
void track_editor_selection ();
|
||||
|
||||
protected:
|
||||
void set_route_targets_for_operation ();
|
||||
void toggle_midi_input_active (bool flip_others);
|
||||
|
||||
private:
|
||||
Gtk::Box& _mixer_strips_home;
|
||||
bool _following_editor_selection;
|
||||
|
||||
gint start_updating ();
|
||||
gint stop_updating ();
|
||||
|
||||
sigc::connection fast_screen_update_connection;
|
||||
void fast_update_strips ();
|
||||
|
||||
void add_strips (ARDOUR::RouteList&);
|
||||
void remove_strip (MixerStrip *);
|
||||
|
||||
void session_going_away ();
|
||||
void sync_order_keys ();
|
||||
void follow_editor_selection ();
|
||||
bool strip_button_release_event (GdkEventButton*, MixerStrip*);
|
||||
MixerStrip* strip_by_route (boost::shared_ptr<ARDOUR::Route> route);
|
||||
MixerStrip* strip_by_x (int x);
|
||||
|
||||
std::map <boost::shared_ptr<ARDOUR::Route>, MixerStrip*> _strips;
|
||||
mutable Glib::Threads::Mutex _resync_mutex;
|
||||
};
|
||||
|
||||
#endif //__ardour_mixer_bridge_view_h__
|
||||
|
|
@ -105,20 +105,18 @@ MonoPanner::set_tooltip ()
|
|||
_tooltip.set_tip (buf);
|
||||
}
|
||||
|
||||
bool
|
||||
MonoPanner::on_expose_event (GdkEventExpose*)
|
||||
void
|
||||
MonoPanner::render (cairo_t* cr)
|
||||
{
|
||||
Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context();
|
||||
unsigned pos = (unsigned)(rint (100.0 * position_control->get_value ())); /* 0..100 */
|
||||
|
||||
double x = (get_width() - _knob_image[pos]->get_width())/2.0;
|
||||
double y = (get_height() - _knob_image[pos]->get_height())/2.0;
|
||||
|
||||
cairo_rectangle (context->cobj(), x, y, _knob_image[pos]->get_width(), _knob_image[pos]->get_height());
|
||||
cairo_rectangle (cr, x, y, _knob_image[pos]->get_width(), _knob_image[pos]->get_height());
|
||||
|
||||
gdk_cairo_set_source_pixbuf (context->cobj(), _knob_image[pos]->gobj(), x, y);
|
||||
cairo_fill (context->cobj());
|
||||
return true;
|
||||
gdk_cairo_set_source_pixbuf (cr, _knob_image[pos]->gobj(), x, y);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class MonoPanner : public PannerInterface
|
|||
sigc::signal<void> StopGesture;
|
||||
|
||||
protected:
|
||||
bool on_expose_event (GdkEventExpose*);
|
||||
void render (cairo_t* cr);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
bool on_motion_notify_event (GdkEventMotion*);
|
||||
|
|
|
|||
|
|
@ -21,10 +21,10 @@
|
|||
#define __gtk_ardour_panner_interface_h__
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <gtkmm/drawingarea.h>
|
||||
#include <gtkmm/label.h>
|
||||
#include "gtkmm2ext/persistent_tooltip.h"
|
||||
#include "pbd/destructible.h"
|
||||
#include "gtkmm2ext/cairo_widget.h"
|
||||
|
||||
namespace ARDOUR {
|
||||
class Panner;
|
||||
|
|
@ -48,7 +48,7 @@ private:
|
|||
|
||||
|
||||
/** Parent class for some panner UI classes that contains some common code */
|
||||
class PannerInterface : public Gtk::DrawingArea, public PBD::Destructible
|
||||
class PannerInterface : public CairoWidget, public PBD::Destructible
|
||||
{
|
||||
public:
|
||||
PannerInterface (boost::shared_ptr<ARDOUR::Panner>);
|
||||
|
|
|
|||
|
|
@ -112,20 +112,18 @@ StereoPanner::set_tooltip ()
|
|||
_tooltip.set_tip (buf);
|
||||
}
|
||||
|
||||
bool
|
||||
StereoPanner::on_expose_event (GdkEventExpose*)
|
||||
void
|
||||
StereoPanner::render (cairo_t* cr)
|
||||
{
|
||||
Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context();
|
||||
unsigned pos = (unsigned)(rint (100.0 * position_control->get_value ())); /* 0..100 */
|
||||
|
||||
double x = (get_width() - _knob_image[pos]->get_width())/2.0;
|
||||
double y = (get_height() - _knob_image[pos]->get_height())/2.0;
|
||||
|
||||
cairo_rectangle (context->cobj(), x, y, _knob_image[pos]->get_width(), _knob_image[pos]->get_height());
|
||||
cairo_rectangle (cr, x, y, _knob_image[pos]->get_width(), _knob_image[pos]->get_height());
|
||||
|
||||
gdk_cairo_set_source_pixbuf (context->cobj(), _knob_image[pos]->gobj(), x, y);
|
||||
cairo_fill (context->cobj());
|
||||
return true;
|
||||
gdk_cairo_set_source_pixbuf (cr, _knob_image[pos]->gobj(), x, y);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ class StereoPanner : public PannerInterface
|
|||
sigc::signal<void> StopWidthGesture;
|
||||
|
||||
protected:
|
||||
bool on_expose_event (GdkEventExpose*);
|
||||
void render (cairo_t* cr);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
bool on_motion_notify_event (GdkEventMotion*);
|
||||
|
|
|
|||
|
|
@ -203,21 +203,30 @@
|
|||
</VBox>
|
||||
</EventBox>
|
||||
<HBox>
|
||||
<EventBox id="master_bus_ui_home"/>
|
||||
<EventBox id="compact_meter_bridge_home"
|
||||
bgnormal="#383838"
|
||||
box.expand="true"
|
||||
box.fill="true">
|
||||
</EventBox>
|
||||
<VBox>
|
||||
<EventBox id="master_bus_ui_home"/>
|
||||
<EventBox bgnormal="#000000"
|
||||
height="4"/>
|
||||
</VBox>
|
||||
<EventBox bgnormal="#000000"
|
||||
width="4"/>
|
||||
<VBox box.expand="true"
|
||||
box.fill="true">
|
||||
<EventBox id="compact_meter_bridge_home"
|
||||
bgnormal="#383838"
|
||||
box.expand="true"
|
||||
box.fill="true"/>
|
||||
<EventBox bgnormal="#383838"
|
||||
height="5"/>
|
||||
<EventBox bgnormal="#000000"
|
||||
height="2"/>
|
||||
</VBox>
|
||||
</HBox>
|
||||
<HBox box.pack="end"
|
||||
box.fill="true"
|
||||
box.expand="true">
|
||||
<VBox>
|
||||
<EventBox id="inspector_home"
|
||||
box.fill="true"
|
||||
box.expand="true"/>
|
||||
</VBox>
|
||||
<EventBox id="inspector_home"/>
|
||||
<EventBox bgnormal="#000000" width="4"/>
|
||||
<VBox box.fill="true"
|
||||
box.expand="true">
|
||||
<HPaned id="edit_pane"
|
||||
|
|
@ -266,7 +275,8 @@
|
|||
table.bottomattach="3"
|
||||
table.xfill="true"
|
||||
table.yfill="true"
|
||||
table.yexpand="true">
|
||||
table.yexpand="true"
|
||||
bgnormal="#3E3E3E">
|
||||
<HBox>
|
||||
<VBox id="edit_controls_vbox"/>
|
||||
</HBox>
|
||||
|
|
@ -274,7 +284,10 @@
|
|||
</Table>
|
||||
</VPaned>
|
||||
</HPaned>
|
||||
<EventBox id="mixer_ui_home"
|
||||
<EventBox bgnormal="#000000"
|
||||
height="4"/>
|
||||
<EventBox id="mixer_bridge_view_home"
|
||||
height="411"
|
||||
box.pack="end"/>
|
||||
</VBox>
|
||||
</HBox>
|
||||
|
|
|
|||
12
gtk2_ardour/ui/mixer_bridge_view.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<CompactMeterbridge bgnormal="#353535">
|
||||
<ScrolledWindow hscroll="always"
|
||||
vscroll="never"
|
||||
box.expand="true"
|
||||
box.fill="true">
|
||||
<EventBox bgnormal="#383838">
|
||||
<Hbox id="mixer_strips_home"/>
|
||||
</EventBox>
|
||||
</ScrolledWindow>
|
||||
</CompactMeterbridge>
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
<Adjustment id="gain_adjustment"
|
||||
minvalue="0"
|
||||
maxvalue="1"/>
|
||||
<VBox Layout="" bgnormal="#380000" bgactive="#6A0000" width="57" height="252">
|
||||
<VBox Layout="" bgnormal="#380000" bgactive="#6A0000" width="57" height="260">
|
||||
<Button id="peak_display_button"
|
||||
x="0" y="0"
|
||||
width="59" height="18"
|
||||
|
|
@ -16,26 +16,27 @@
|
|||
borderwidth="1 1 0 0"/>
|
||||
<HBox>
|
||||
<VBox>
|
||||
<HBox height ="10"/>
|
||||
<VBox id="level_meter_home"
|
||||
x="1"
|
||||
y="36"
|
||||
width="17"
|
||||
height="187"/>
|
||||
<HBox height ="13"/>
|
||||
<HBox box.padding="18" spacing="4">
|
||||
<VBox id="level_meter_home"
|
||||
width="17"
|
||||
height="187"/>
|
||||
<icon source="mixer_strip_meter_marks.png"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
<VBox>
|
||||
<Fader id="gain_slider"
|
||||
adjustment="gain_adjustment"
|
||||
facesource="slider_controller_fader.png"
|
||||
activefacesource="slider_controller_active_fader.png"
|
||||
underlaysource="slider_controller_fader_underlay.png"
|
||||
handlesource="slider_controller_fader_handle.png"
|
||||
activehandlesource="slider_controller_fader_handle.png"
|
||||
minposx="10"
|
||||
minposy="196"
|
||||
maxposx="10"
|
||||
maxposy="10"
|
||||
box.padding="8"/>
|
||||
</VBox>
|
||||
<icon source="mixer_strip_meter_marks.png"/>
|
||||
<Fader id="gain_slider" bgnormal="#303030" bgactive="#545454"
|
||||
adjustment="gain_adjustment"
|
||||
facesource="slider_controller_fader.png"
|
||||
underlaysource="slider_controller_fader_underlay.png"
|
||||
handlesource="slider_controller_fader_handle.png"
|
||||
activehandlesource="slider_controller_fader_handle.png"
|
||||
minposx="10"
|
||||
minposy="196"
|
||||
maxposx="10"
|
||||
maxposy="10"
|
||||
height="210"/>
|
||||
</HBox>
|
||||
<EventBox id="gain_display_home"
|
||||
width="57"
|
||||
|
|
|
|||
|
|
@ -1,200 +1,95 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<RouteUI>
|
||||
<EventBox bgnormal="#383838" bgactive="#545454">
|
||||
<VBox>
|
||||
<EventBox id="color_palette_home" borderwidth="1" noshowall="true" visible="false">
|
||||
<VBox>
|
||||
<iconbutton id="color_palette_button"
|
||||
width="95"
|
||||
height="17"
|
||||
normalicon="inspector_color_close"
|
||||
activeicon="inspector_color_open"/>
|
||||
<VBox id="color_buttons_home">
|
||||
<HBox>
|
||||
<iconbutton id="color_button_1"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_1"
|
||||
activeicon="inspector_color_1_active"
|
||||
prelighticon="inspector_color_1_prelight"/>
|
||||
<iconbutton id="color_button_2"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_2"
|
||||
activeicon="inspector_color_2_active"
|
||||
prelighticon="inspector_color_2_prelight"/>
|
||||
<iconbutton id="color_button_3"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_3"
|
||||
activeicon="inspector_color_3_active"
|
||||
prelighticon="inspector_color_3_prelight"/>
|
||||
<iconbutton id="color_button_4"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_4"
|
||||
activeicon="inspector_color_4_active"
|
||||
prelighticon="inspector_color_4_prelight"/>
|
||||
<iconbutton id="color_button_5"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_5"
|
||||
activeicon="inspector_color_5_active"
|
||||
prelighticon="inspector_color_5_prelight"/>
|
||||
</HBox>
|
||||
<HBox>
|
||||
<iconbutton id="color_button_6"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_6"
|
||||
activeicon="inspector_color_6_active"
|
||||
prelighticon="inspector_color_6_prelight"/>
|
||||
<iconbutton id="color_button_7"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_7"
|
||||
activeicon="inspector_color_7_active"
|
||||
prelighticon="inspector_color_7_prelight"/>
|
||||
<iconbutton id="color_button_8"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_8"
|
||||
activeicon="inspector_color_8_active"
|
||||
prelighticon="inspector_color_8_prelight"/>
|
||||
<iconbutton id="color_button_9"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_9"
|
||||
activeicon="inspector_color_9_active"
|
||||
prelighticon="inspector_color_9_prelight"/>
|
||||
<iconbutton id="color_button_10"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_10"
|
||||
activeicon="inspector_color_10_active"
|
||||
prelighticon="inspector_color_10_prelight"/>
|
||||
</HBox>
|
||||
<HBox>
|
||||
<iconbutton id="color_button_11"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_11"
|
||||
activeicon="inspector_color_11_active"
|
||||
prelighticon="inspector_color_11_prelight"/>
|
||||
<iconbutton id="color_button_12"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_12"
|
||||
activeicon="inspector_color_12_active"
|
||||
prelighticon="inspector_color_12_prelight"/>
|
||||
<iconbutton id="color_button_13"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_13"
|
||||
activeicon="inspector_color_13_active"
|
||||
prelighticon="inspector_color_13_prelight"/>
|
||||
<iconbutton id="color_button_14"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_14"
|
||||
activeicon="inspector_color_14_active"
|
||||
prelighticon="inspector_color_14_prelight"/>
|
||||
<iconbutton id="color_button_15"
|
||||
width="19"
|
||||
height="19"
|
||||
normalicon="inspector_color_15"
|
||||
activeicon="inspector_color_15_active"
|
||||
prelighticon="inspector_color_15_prelight"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</EventBox>
|
||||
<VBox borderwidth="1"
|
||||
noshowall="true"
|
||||
visible="false">
|
||||
<iconbutton id="info_panel_button"
|
||||
width="95"
|
||||
height="17"
|
||||
normalicon="inspector_info_close"
|
||||
activeicon="inspector_info_open"/>
|
||||
<VBox id="info_panel_home"
|
||||
noshowall="true"
|
||||
visible="false">
|
||||
<VBox height="1"/>
|
||||
<EventBox bgnormal="#4F4F4F" width="95">
|
||||
<VBox>
|
||||
<HBox box.padding="4">
|
||||
<HBox width="7"/>
|
||||
<Label id="input_info_label"
|
||||
text="IN Grisha, Kolya"
|
||||
font="Arial Bold 7"/>
|
||||
<HBox box.fill="true" box.expand="true"/>
|
||||
</HBox>
|
||||
<HBox>
|
||||
<HBox width="7"/>
|
||||
<Label id="output_info_label"
|
||||
text="OUT please code it"
|
||||
font="Arial Bold 7"/>
|
||||
<HBox box.fill="true" box.expand="true"/>
|
||||
</HBox>
|
||||
<HBox height="5"/>
|
||||
</VBox>
|
||||
</EventBox>
|
||||
</VBox>
|
||||
</VBox>
|
||||
|
||||
<VBox box.pack="end">
|
||||
<HBox>
|
||||
<EventBox bgnormal="#383838" bgactive="#545454">
|
||||
<VBox>
|
||||
<EventBox id="panners_home" bgnormal="#383838" bgactive="#545454" width="57" height="60"/>
|
||||
<HBox id="level_meter_home"/>
|
||||
<Vbox>
|
||||
<HBox id="gain_meter_home"/>
|
||||
<!--RouteUI-->
|
||||
<HBox id="invert_button_box" visible="false"/>
|
||||
<EventBox bgnormal="#000000" width="50">
|
||||
<EventBox borderwidth="1" bgnormal="#383838" bgactive="#545454">
|
||||
<VBox spacing="1">
|
||||
<HBox spacing="1">
|
||||
<iconbutton id="rec_enable_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_record"
|
||||
activeicon="mixer_record_active"
|
||||
prelighticon="mixer_record_prelight"/>
|
||||
<iconbutton id="monitor_input_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_monitor_input"
|
||||
activeicon="mixer_monitor_input_active"
|
||||
prelighticon="mixer_monitor_input_prelight"/>
|
||||
</HBox>
|
||||
<HBox spacing="1">
|
||||
<iconbutton id="mute_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_mute"
|
||||
activeicon="mixer_mute_active"
|
||||
prelighticon="mixer_mute_prelight"/>
|
||||
<iconbutton id="solo_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_solo"
|
||||
activeicon="mixer_solo_active"
|
||||
prelighticon="mixer_solo_prelight"/>
|
||||
</HBox>
|
||||
<Button id="name_button"
|
||||
width="57"
|
||||
height="28"/>
|
||||
</VBox>
|
||||
</EventBox>
|
||||
<EventBox borderwidth="1" bgnormal="#383838" bgactive="#545454">
|
||||
<VBox>
|
||||
<HBox>
|
||||
<iconbutton id="rec_enable_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_record"
|
||||
activeicon="mixer_record_active"
|
||||
prelighticon="mixer_record_prelight"/>
|
||||
<EventBox bgnormal="#000000"
|
||||
bgactive="#000000"
|
||||
width="1"/>
|
||||
<iconbutton id="monitor_input_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_monitor_input"
|
||||
activeicon="mixer_monitor_input_active"
|
||||
prelighticon="mixer_monitor_input_prelight"/>
|
||||
</HBox>
|
||||
<EventBox bgnormal="#000000"
|
||||
bgactive="#000000"
|
||||
height="1"/>
|
||||
<HBox>
|
||||
<iconbutton id="mute_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_mute"
|
||||
activeicon="mixer_mute_active"
|
||||
implicitactiveicon="mixer_mute_implicit"
|
||||
prelighticon="mixer_mute_prelight"/>
|
||||
<EventBox bgnormal="#000000"
|
||||
bgactive="#000000"
|
||||
width="1"/>
|
||||
<iconbutton id="solo_button"
|
||||
width="28"
|
||||
height="20"
|
||||
normalicon="mixer_solo"
|
||||
activeicon="mixer_solo_active"
|
||||
implicitactiveicon="mixer_solo_safe"
|
||||
prelighticon="mixer_solo_prelight"/>
|
||||
</HBox>
|
||||
<EventBox bgnormal="#000000"
|
||||
bgactive="#000000"
|
||||
height="1"/>
|
||||
<Button id="name_button"
|
||||
width="57"
|
||||
height="28"/>
|
||||
</VBox>
|
||||
</EventBox>
|
||||
<Button id="show_sends_button" visible="false" noshowall="true"/>
|
||||
<Button id="monitor_disk_button" visible="false" noshowall="true"/>
|
||||
<Button id="comment_button" visible="false" noshowall="true"/>
|
||||
<Button id="midi_input_enable_button" visible="false" noshowall="true"/>
|
||||
<Button id="group_button" text="Grp" visible="false" noshowall="true"/>
|
||||
</Vbox>
|
||||
</VBox>
|
||||
</VBox>
|
||||
</EventBox>
|
||||
</EventBox>
|
||||
<EventBox bgnormal="#000000"
|
||||
bgactive="#000000"
|
||||
width="1"/>
|
||||
</HBox>
|
||||
<Button id="show_sends_button" ui.orphan="true"/>
|
||||
<Button id="monitor_disk_button" ui.orphan="true"/>
|
||||
<Button id="comment_button" ui.orphan="true"/>
|
||||
<Button id="midi_input_enable_button" ui.orphan="true"/>
|
||||
<Button id="group_button" text="Grp" ui.orphan="true"/>
|
||||
<HBox id="invert_button_box" ui.orphan="true"/>
|
||||
<button id="color_palette_button" ui.orphan="true"/>
|
||||
<button id="color_button_1" ui.orphan="true"/>
|
||||
<button id="color_button_2" ui.orphan="true"/>
|
||||
<button id="color_button_3" ui.orphan="true"/>
|
||||
<button id="color_button_4" ui.orphan="true"/>
|
||||
<button id="color_button_5" ui.orphan="true"/>
|
||||
<button id="color_button_6" ui.orphan="true"/>
|
||||
<button id="color_button_7" ui.orphan="true"/>
|
||||
<button id="color_button_8" ui.orphan="true"/>
|
||||
<button id="color_button_9" ui.orphan="true"/>
|
||||
<button id="color_button_10" ui.orphan="true"/>
|
||||
<button id="color_button_11" ui.orphan="true"/>
|
||||
<button id="color_button_12" ui.orphan="true"/>
|
||||
<button id="color_button_13" ui.orphan="true"/>
|
||||
<button id="color_button_14" ui.orphan="true"/>
|
||||
<button id="color_button_15" ui.orphan="true"/>
|
||||
<EventBox id="color_palette_home" ui.orphan="true"/>
|
||||
<VBox id="color_buttons_home" ui.orphan="true"/>
|
||||
<Button id="info_panel_button" ui.orphan="true"/>
|
||||
<Label id="input_info_label" ui.orphan="true"/>
|
||||
<Label id="output_info_label" ui.orphan="true"/>
|
||||
<VBox id="info_panel_home" ui.orphan="true"/>
|
||||
</RouteUI>
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ def copyfile(task):
|
|||
path_prefix = 'gtk2_ardour/'
|
||||
|
||||
gtk2_ardour_sources = [
|
||||
'mixer_bridge_view.cc',
|
||||
'waves_ui.cc',
|
||||
'about.cc',
|
||||
'actions.cc',
|
||||
|
|
|
|||
|
|
@ -188,19 +188,16 @@ Fader::Fader (Gtk::Adjustment& adj,
|
|||
|
||||
adjustment.signal_value_changed().connect (mem_fun (*this, &Fader::adjustment_changed));
|
||||
adjustment.signal_changed().connect (mem_fun (*this, &Fader::adjustment_changed));
|
||||
DrawingArea::set_size_request(_face_pixbuf->get_width(), _face_pixbuf->get_height());
|
||||
CairoWidget::set_size_request(_face_pixbuf->get_width(), _face_pixbuf->get_height());
|
||||
}
|
||||
|
||||
Fader::~Fader ()
|
||||
{
|
||||
}
|
||||
|
||||
bool
|
||||
Fader::on_expose_event (GdkEventExpose* ev)
|
||||
void
|
||||
Fader::render (cairo_t* cr)
|
||||
{
|
||||
Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context();
|
||||
cairo_t* cr = context->cobj();
|
||||
|
||||
get_handle_position (_last_drawn_x, _last_drawn_y);
|
||||
|
||||
if (_underlay_pixbuf != 0) {
|
||||
|
|
@ -234,8 +231,6 @@ Fader::on_expose_event (GdkEventExpose* ev)
|
|||
_last_drawn_y - _handle_pixbuf->get_height()/2.0);
|
||||
}
|
||||
cairo_fill (cr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -248,7 +243,7 @@ Fader::on_size_request (GtkRequisition* req)
|
|||
void
|
||||
Fader::on_size_allocate (Gtk::Allocation& alloc)
|
||||
{
|
||||
DrawingArea::on_size_allocate(alloc);
|
||||
CairoWidget::on_size_allocate(alloc);
|
||||
update_unity_position ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@
|
|||
#include <cmath>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <gtkmm/drawingarea.h>
|
||||
#include <gtkmm/adjustment.h>
|
||||
#include <gdkmm.h>
|
||||
#include <gtkmm2ext/binding_proxy.h>
|
||||
#include "gtkmm2ext/cairo_widget.h"
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
namespace Gtkmm2ext {
|
||||
|
||||
class LIBGTKMM2EXT_API Fader : public Gtk::DrawingArea
|
||||
class LIBGTKMM2EXT_API Fader : public CairoWidget
|
||||
{
|
||||
public:
|
||||
Fader (Gtk::Adjustment& adjustment,
|
||||
|
|
@ -61,7 +61,7 @@ class LIBGTKMM2EXT_API Fader : public Gtk::DrawingArea
|
|||
void on_size_request (GtkRequisition*);
|
||||
void on_size_allocate (Gtk::Allocation& alloc);
|
||||
|
||||
bool on_expose_event (GdkEventExpose*);
|
||||
void render (cairo_t* cr);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
bool on_motion_notify_event (GdkEventMotion*);
|
||||
|
|
|
|||