frame for fader belt; better focus behaviour for gain display text entry (generalized)
git-svn-id: svn://localhost/ardour2/trunk@1171 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
f987091756
commit
e002eea388
@ -127,6 +127,13 @@ style "base_frame"
|
||||
bg[NORMAL] = { 0.35, 0.35, 0.40 }
|
||||
}
|
||||
|
||||
|
||||
style "red_frame"
|
||||
{
|
||||
fg[NORMAL] = { 1.0, 0.0, 0.0 }
|
||||
bg[NORMAL] = { 1.0, 0.0, 0.0 }
|
||||
}
|
||||
|
||||
style "transport_base" = "medium_bold_text"
|
||||
{
|
||||
bg[NORMAL] = { 0.10, 0.10, 0.10 }
|
||||
@ -189,6 +196,12 @@ style "track_rec_enable_button" = "small_button"
|
||||
bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
|
||||
}
|
||||
|
||||
style "gain_fader"
|
||||
{
|
||||
bg[NORMAL] = { 0.269, 0.269, 0.300}
|
||||
bg[ACTIVE] = { 0.152, 0.152, 0.168 }
|
||||
}
|
||||
|
||||
style "mixer_rec_enable_button" = "track_rec_enable_button"
|
||||
{
|
||||
font_name = "sans 7"
|
||||
@ -441,12 +454,17 @@ style "medium_bold_entry" = "medium_bold_text"
|
||||
base[SELECTED] = { 0, 0, 0 }
|
||||
}
|
||||
|
||||
|
||||
style "small_entry" = "small_text"
|
||||
{
|
||||
fg[NORMAL] = { 0.70, 0.70, 0.70 }
|
||||
fg[ACTIVE] = { 0.70, 0.70, 0.70 }
|
||||
fg[ACTIVE] = { 0, 1.0, 0 }
|
||||
fg[SELECTED] = { 0, 1.0, 0 }
|
||||
text[NORMAL] = { 0.70, 0.70, 0.70 }
|
||||
text[ACTIVE] = { 0, 1.0, 0 }
|
||||
text[SELECTED] = { 0, 1.0, 0 }
|
||||
bg[NORMAL] = { 0.0, 0.0, 0.0 }
|
||||
bg[SELECTED] = { 0.0, 0.0, 0.0 }
|
||||
bg[SELECTED] = { 0.0, 0.0, 0.0 }
|
||||
base[NORMAL] = { 0, 0, 0 }
|
||||
base[ACTIVE] = { 0, 0, 0 }
|
||||
base[SELECTED] = { 0, 0, 0 }
|
||||
@ -1092,13 +1110,14 @@ widget "*BBTRuler" style "editor_time_ruler"
|
||||
widget "*FramesRuler" style "editor_time_ruler"
|
||||
widget "*MinSecRuler" style "editor_time_ruler"
|
||||
widget "*BaseFrame" style "base_frame"
|
||||
widget "*RedFrame" style "red_frame"
|
||||
widget "*AudioTrackStripBase" style "audio_track_base"
|
||||
widget "*TimeAxisViewControlsBaseUnselected" style "audio_track_base"
|
||||
widget "*AudioTrackControlsBaseUnselected" style "audio_track_base"
|
||||
widget "*AudioTrackFader" style "audio_track_base"
|
||||
widget "*AudioTrackFader" style "gain_fader"
|
||||
widget "*AudioBusStripBase" style "audio_bus_base"
|
||||
widget "*BusControlsBaseUnselected" style "audio_bus_base"
|
||||
widget "*AudioBusFader" style "audio_bus_base"
|
||||
widget "*AudioBusFader" style "gain_fader"
|
||||
widget "*TrackSeparator" style "track_separator"
|
||||
widget "*TrackEditIndicator0*" style "edit_group_0"
|
||||
widget "*TrackEditIndicator1*" style "edit_group_1"
|
||||
|
@ -3346,7 +3346,7 @@ Editor::duplicate_dialog (bool dup_region)
|
||||
|
||||
entry.set_text ("1");
|
||||
set_size_request_to_display_given_text (entry, X_("12345678"), 20, 15);
|
||||
entry.select_region (0, entry.get_text_length());
|
||||
entry.select_region (0, -1);
|
||||
entry.grab_focus ();
|
||||
|
||||
|
||||
|
@ -82,6 +82,7 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
||||
|
||||
ignore_toggle = false;
|
||||
meter_menu = 0;
|
||||
next_release_selects = false;
|
||||
|
||||
gain_slider = manage (new VSliderController (slider,
|
||||
&gain_adjustment,
|
||||
@ -90,24 +91,29 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
||||
|
||||
gain_slider->signal_button_press_event().connect (mem_fun(*this, &GainMeter::start_gain_touch));
|
||||
gain_slider->signal_button_release_event().connect (mem_fun(*this, &GainMeter::end_gain_touch));
|
||||
gain_slider->set_name ("MixerGainMeter");
|
||||
gain_slider->set_name ("GainFader");
|
||||
|
||||
gain_display.set_name ("MixerStripGainDisplay");
|
||||
set_size_request_to_display_given_text (gain_display, "-86.g", 2, 6); /* note the descender */
|
||||
gain_display.signal_activate().connect (mem_fun (*this, &GainMeter::gain_entered));
|
||||
gain_display.set_has_frame (false);
|
||||
set_size_request_to_display_given_text (gain_display, "-80.g", 2, 6); /* note the descender */
|
||||
gain_display.signal_activate().connect (mem_fun (*this, &GainMeter::gain_activated));
|
||||
gain_display.signal_focus_in_event().connect (mem_fun (*this, &GainMeter::gain_focused), false);
|
||||
gain_display.signal_focus_out_event().connect (mem_fun (*this, &GainMeter::gain_focused), false);
|
||||
|
||||
gain_display_box.set_homogeneous (true);
|
||||
gain_display_box.set_spacing (2);
|
||||
gain_display_box.pack_start (gain_display, true, true);
|
||||
|
||||
peak_display.set_name ("MixerStripPeakDisplay");
|
||||
peak_display.set_has_frame (false);
|
||||
peak_display.set_editable (false);
|
||||
set_size_request_to_display_given_text (peak_display, "-86.g", 2, 6); /* note the descender */
|
||||
set_size_request_to_display_given_text (peak_display, "-80.g", 2, 6); /* note the descender */
|
||||
max_peak = minus_infinity();
|
||||
peak_display.set_text (_("-inf"));
|
||||
peak_display.unset_flags (Gtk::CAN_FOCUS);
|
||||
|
||||
meter_metric_area.set_size_request (25, -1);
|
||||
meter_metric_area.set_name ("MeterMetricsStrip");
|
||||
set_size_request_to_display_given_text (meter_metric_area, "-50", 0, 0);
|
||||
|
||||
meter_packer.set_spacing (2);
|
||||
|
||||
@ -124,14 +130,14 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
||||
gain_automation_style_button.set_size_request(15, 15);
|
||||
|
||||
HBox* fader_centering_box = manage (new HBox);
|
||||
fader_centering_box->pack_start (*gain_slider, false, true);
|
||||
fader_centering_box->pack_start (*gain_slider, true, false);
|
||||
|
||||
fader_vbox = manage (new Gtk::VBox());
|
||||
fader_vbox->set_spacing (0);
|
||||
fader_vbox->pack_start (*fader_centering_box, false, false, 0);
|
||||
|
||||
hbox.set_spacing (2);
|
||||
hbox.pack_start (*fader_vbox, true, true, 7);
|
||||
hbox.pack_start (*fader_vbox, true, true);
|
||||
|
||||
set_width(Narrow);
|
||||
|
||||
@ -146,7 +152,7 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
||||
|
||||
gain_display_box.pack_end (peak_display, true, true);
|
||||
|
||||
hbox.pack_start (meter_packer, true, false);
|
||||
hbox.pack_end (meter_packer, true, true);
|
||||
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
@ -175,11 +181,10 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
|
||||
gain_automation_state_changed ();
|
||||
}
|
||||
|
||||
|
||||
set_spacing (2);
|
||||
|
||||
pack_start (gain_display_box, Gtk::PACK_SHRINK);
|
||||
pack_start (hbox, Gtk::PACK_SHRINK);
|
||||
pack_start (gain_display_box, Gtk::PACK_SHRINK);
|
||||
pack_start (hbox, Gtk::PACK_SHRINK);
|
||||
|
||||
_io->gain_changed.connect (mem_fun(*this, &GainMeter::gain_changed));
|
||||
|
||||
@ -417,7 +422,14 @@ GainMeter::setup_meters ()
|
||||
meters.push_back (MeterInfo());
|
||||
}
|
||||
|
||||
for (uint32_t n = 0; n < nmeters; ++n) {
|
||||
/* pack them backwards */
|
||||
|
||||
if (_width == Wide) {
|
||||
meter_packer.pack_end (meter_metric_area, false, false);
|
||||
meter_metric_area.show_all ();
|
||||
}
|
||||
|
||||
for (int32_t n = nmeters-1; nmeters && n >= 0 ; --n) {
|
||||
if (meters[n].width != width) {
|
||||
delete meters[n].meter;
|
||||
meters[n].meter = new FastMeter ((uint32_t) floor (Config->get_meter_hold()), width, FastMeter::Vertical);
|
||||
@ -427,65 +439,20 @@ GainMeter::setup_meters ()
|
||||
meters[n].meter->signal_button_release_event().connect (bind (mem_fun(*this, &GainMeter::meter_button_release), n));
|
||||
}
|
||||
|
||||
meter_packer.pack_start (*meters[n].meter, Gtk::PACK_SHRINK);
|
||||
meter_packer.pack_end (*meters[n].meter, false, false);
|
||||
meters[n].meter->show_all ();
|
||||
meters[n].packed = true;
|
||||
}
|
||||
|
||||
if (_width == Wide) {
|
||||
meter_packer.pack_start (meter_metric_area, Gtk::PACK_SHRINK);
|
||||
meter_metric_area.show_all ();
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
GainMeter::gain_key_press (GdkEventKey* ev)
|
||||
{
|
||||
cerr << "kp " << ev->keyval << endl;
|
||||
|
||||
switch (ev->keyval) {
|
||||
case GDK_minus:
|
||||
case GDK_plus:
|
||||
case GDK_period:
|
||||
case GDK_comma:
|
||||
case GDK_0:
|
||||
case GDK_1:
|
||||
case GDK_2:
|
||||
case GDK_3:
|
||||
case GDK_4:
|
||||
case GDK_5:
|
||||
case GDK_6:
|
||||
case GDK_7:
|
||||
case GDK_8:
|
||||
case GDK_9:
|
||||
case GDK_KP_Add:
|
||||
case GDK_KP_Subtract:
|
||||
case GDK_KP_Decimal:
|
||||
case GDK_KP_0:
|
||||
case GDK_KP_1:
|
||||
case GDK_KP_2:
|
||||
case GDK_KP_3:
|
||||
case GDK_KP_4:
|
||||
case GDK_KP_5:
|
||||
case GDK_KP_6:
|
||||
case GDK_KP_7:
|
||||
case GDK_KP_8:
|
||||
case GDK_KP_9:
|
||||
case GDK_Return:
|
||||
case GDK_BackSpace:
|
||||
case GDK_Delete:
|
||||
case GDK_KP_Enter:
|
||||
case GDK_Home:
|
||||
case GDK_End:
|
||||
case GDK_Left:
|
||||
case GDK_Right:
|
||||
cerr << "allow " << ev->keyval << " to drop through\n";
|
||||
if (key_is_legal_for_numeric_entry (ev->keyval)) {
|
||||
/* drop through to normal handling */
|
||||
return false;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* illegal key for gain entry */
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -567,8 +534,19 @@ GainMeter::popup_meter_menu (GdkEventButton *ev)
|
||||
meter_menu->popup (1, ev->time);
|
||||
}
|
||||
|
||||
bool
|
||||
GainMeter::gain_focused (GdkEventFocus* ev)
|
||||
{
|
||||
if (ev->in) {
|
||||
gain_display.select_region (0, -1);
|
||||
} else {
|
||||
gain_display.select_region (0, 0);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
GainMeter::gain_entered ()
|
||||
GainMeter::gain_activated ()
|
||||
{
|
||||
float f;
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <ardour/types.h>
|
||||
|
||||
#include <gtkmm2ext/click_box.h>
|
||||
#include <gtkmm2ext/focus_entry.h>
|
||||
#include <gtkmm2ext/slider_controller.h>
|
||||
|
||||
#include "enums.h"
|
||||
@ -79,10 +80,11 @@ class GainMeter : public Gtk::VBox
|
||||
ARDOUR::Session& _session;
|
||||
|
||||
bool ignore_toggle;
|
||||
bool next_release_selects;
|
||||
|
||||
Gtkmm2ext::VSliderController *gain_slider;
|
||||
Gtk::Adjustment gain_adjustment;
|
||||
Gtk::Entry gain_display;
|
||||
Gtkmm2ext::FocusEntry gain_display;
|
||||
Gtk::Entry peak_display;
|
||||
Gtk::HBox gain_display_box;
|
||||
Gtk::HBox fader_box;
|
||||
@ -120,7 +122,8 @@ class GainMeter : public Gtk::VBox
|
||||
gint meter_metrics_expose (GdkEventExpose *);
|
||||
|
||||
void show_gain ();
|
||||
void gain_entered ();
|
||||
void gain_activated ();
|
||||
bool gain_focused (GdkEventFocus*);
|
||||
|
||||
struct MeterInfo {
|
||||
Gtkmm2ext::FastMeter *meter;
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 778 B After Width: | Height: | Size: 3.8 KiB |
@ -544,3 +544,52 @@ longest (vector<string>& strings)
|
||||
|
||||
return *longest;
|
||||
}
|
||||
|
||||
bool
|
||||
key_is_legal_for_numeric_entry (guint keyval)
|
||||
{
|
||||
switch (keyval) {
|
||||
case GDK_minus:
|
||||
case GDK_plus:
|
||||
case GDK_period:
|
||||
case GDK_comma:
|
||||
case GDK_0:
|
||||
case GDK_1:
|
||||
case GDK_2:
|
||||
case GDK_3:
|
||||
case GDK_4:
|
||||
case GDK_5:
|
||||
case GDK_6:
|
||||
case GDK_7:
|
||||
case GDK_8:
|
||||
case GDK_9:
|
||||
case GDK_KP_Add:
|
||||
case GDK_KP_Subtract:
|
||||
case GDK_KP_Decimal:
|
||||
case GDK_KP_0:
|
||||
case GDK_KP_1:
|
||||
case GDK_KP_2:
|
||||
case GDK_KP_3:
|
||||
case GDK_KP_4:
|
||||
case GDK_KP_5:
|
||||
case GDK_KP_6:
|
||||
case GDK_KP_7:
|
||||
case GDK_KP_8:
|
||||
case GDK_KP_9:
|
||||
case GDK_Return:
|
||||
case GDK_BackSpace:
|
||||
case GDK_Delete:
|
||||
case GDK_KP_Enter:
|
||||
case GDK_Home:
|
||||
case GDK_End:
|
||||
case GDK_Left:
|
||||
case GDK_Right:
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -81,5 +81,6 @@ Glib::RefPtr<Gdk::Pixbuf> get_icon (const char*);
|
||||
static std::map<std::string, Glib::RefPtr<Gdk::Pixbuf> > xpm_map;
|
||||
const char* const *get_xpm_data (std::string path);
|
||||
std::string longest (std::vector<std::string>&);
|
||||
bool key_is_legal_for_numeric_entry (guint keyval);
|
||||
|
||||
#endif /* __ardour_gtk_utils_h__ */
|
||||
|
@ -39,6 +39,7 @@ choice.cc
|
||||
click_box.cc
|
||||
dndtreeview.cc
|
||||
fastmeter.cc
|
||||
focus_entry.cc
|
||||
gtk_ui.cc
|
||||
hexentry.cc
|
||||
idle_adjustment.cc
|
||||
|
31
libs/gtkmm2ext/focus_entry.cc
Normal file
31
libs/gtkmm2ext/focus_entry.cc
Normal file
@ -0,0 +1,31 @@
|
||||
#include <gtkmm2ext/focus_entry.h>
|
||||
|
||||
using namespace Gtkmm2ext;
|
||||
|
||||
FocusEntry::FocusEntry ()
|
||||
{
|
||||
next_release_selects = false;
|
||||
}
|
||||
|
||||
bool
|
||||
FocusEntry::on_button_press_event (GdkEventButton* ev)
|
||||
{
|
||||
if (!has_focus()) {
|
||||
next_release_selects = true;
|
||||
}
|
||||
return Entry::on_button_press_event (ev);
|
||||
}
|
||||
|
||||
bool
|
||||
FocusEntry::on_button_release_event (GdkEventButton* ev)
|
||||
{
|
||||
if (next_release_selects) {
|
||||
bool ret = Entry::on_button_release_event (ev);
|
||||
select_region (0, -1);
|
||||
next_release_selects = false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
return Entry::on_button_release_event (ev);
|
||||
}
|
||||
|
22
libs/gtkmm2ext/gtkmm2ext/focus_entry.h
Normal file
22
libs/gtkmm2ext/gtkmm2ext/focus_entry.h
Normal file
@ -0,0 +1,22 @@
|
||||
#ifndef __gtkmm2ext_focus_entry_h__
|
||||
#define __gtkmm2ext_focus_entry_h__
|
||||
|
||||
#include <gtkmm/entry.h>
|
||||
|
||||
namespace Gtkmm2ext {
|
||||
|
||||
class FocusEntry : public Gtk::Entry
|
||||
{
|
||||
public:
|
||||
FocusEntry ();
|
||||
|
||||
protected:
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
private:
|
||||
bool next_release_selects;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* __gtkmm2ext_focus_entry_h__ */
|
@ -59,18 +59,24 @@ PixFader::on_expose_event (GdkEventExpose* ev)
|
||||
GdkRectangle intersection;
|
||||
int dh = display_height ();
|
||||
int offset_into_pixbuf = (int) floor (view.height / ((float) view.height / dh));
|
||||
Glib::RefPtr<Gdk::GC> fg_gc (get_style()->get_fg_gc(get_state()));
|
||||
|
||||
if (gdk_rectangle_intersect (&view, &ev->area, &intersection)) {
|
||||
get_window()->draw_pixbuf(get_style()->get_fg_gc(get_state()), pixbuf,
|
||||
intersection.x, offset_into_pixbuf + intersection.y,
|
||||
intersection.x, intersection.y,
|
||||
intersection.width, intersection.height,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
get_window()->draw_pixbuf (fg_gc, pixbuf,
|
||||
intersection.x, offset_into_pixbuf + intersection.y,
|
||||
intersection.x, intersection.y,
|
||||
intersection.width, intersection.height,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
|
||||
get_window()->draw_line (get_style()->get_bg_gc(STATE_ACTIVE), 0, 0, view.width - 1, 0); /* top */
|
||||
get_window()->draw_line (get_style()->get_bg_gc(STATE_ACTIVE), 0, 0, 0, view.height - 1); /* left */
|
||||
get_window()->draw_line (get_style()->get_bg_gc(STATE_NORMAL), view.width - 1, 0, view.width - 1, view.height - 1); /* right */
|
||||
get_window()->draw_line (get_style()->get_bg_gc(STATE_NORMAL), 0, view.height - 1, view.width - 1, view.height - 1); /* bottom */
|
||||
}
|
||||
|
||||
/* always draw the line */
|
||||
|
||||
get_window()->draw_line (get_style()->get_fg_gc(get_state()), 0, unity_y, view.width - 2, unity_y);
|
||||
get_window()->draw_line (fg_gc, 1, unity_y, view.width - 2, unity_y);
|
||||
|
||||
last_drawn = dh;
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user