fulfill the promise of an in-library Keyboard object, and use platform specific modifiers throughout libgtkmm2ext. also fix up scrolling of pixfaders by making them grab keyboard magic focus when the mouse pointer is within them

git-svn-id: svn://localhost/ardour2/branches/3.0@6344 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2009-12-10 23:01:45 +00:00
parent 6ab765e8fa
commit a3bcba2357
7 changed files with 60 additions and 48 deletions

View File

@@ -18,8 +18,9 @@
$Id$
*/
#include <gtkmm2ext/auto_spin.h>
#include <cmath>
#include "gtkmm2ext/auto_spin.h"
#include "gtkmm2ext/keyboard.h"
using namespace Gtkmm2ext;
using namespace std;
@@ -73,13 +74,13 @@ AutoSpin::button_press (GdkEventButton *ev)
stop_spinning (0);
if (ev->state & GDK_SHIFT_MASK) {
if (ev->state & Keyboard::TertiaryModifier) {
/* use page shift */
shifted = true;
}
if (ev->state & GDK_CONTROL_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
/* go to upper/lower bound on button1/button2 */
control = true;

View File

@@ -26,9 +26,10 @@
#include <pbd/controllable.h>
#include <gtkmm2ext/gtk_ui.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/barcontroller.h>
#include "gtkmm2ext/gtk_ui.h"
#include "gtkmm2ext/utils.h"
#include "gtkmm2ext/keyboard.h"
#include "gtkmm2ext/barcontroller.h"
#include "i18n.h"
@@ -146,14 +147,14 @@ BarController::button_release (GdkEventButton* ev)
return true;
}
if ((ev->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK)) == GDK_SHIFT_MASK) {
if ((ev->state & (Keyboard::TertiaryModifier|Keyboard::PrimaryModifier)) == Keyboard::TertiaryModifier) {
adjustment.set_value (initial_value);
} else {
double scale;
if ((ev->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
if ((ev->state & (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) == (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
scale = 0.01;
} else if (ev->state & GDK_CONTROL_MASK) {
} else if (ev->state & Keyboard::PrimaryModifier) {
scale = 0.1;
} else {
scale = 1.0;
@@ -181,9 +182,9 @@ BarController::scroll (GdkEventScroll* ev)
{
double scale;
if ((ev->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
if ((ev->state & (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) == (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
scale = 0.01;
} else if (ev->state & GDK_CONTROL_MASK) {
} else if (ev->state & Keyboard::PrimaryModifier) {
scale = 0.1;
} else {
scale = 1.0;
@@ -213,13 +214,13 @@ BarController::motion (GdkEventMotion* ev)
return true;
}
if ((ev->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK)) == GDK_SHIFT_MASK) {
if ((ev->state & (Keyboard::TertiaryModifier|Keyboard::PrimaryModifier)) == Keyboard::TertiaryModifier) {
return TRUE;
}
if ((ev->state & (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) {
if ((ev->state & (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) == (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
scale = 0.01;
} else if (ev->state & GDK_CONTROL_MASK) {
} else if (ev->state & Keyboard::PrimaryModifier) {
scale = 0.1;
} else {
scale = 1.0;

View File

@@ -46,6 +46,8 @@ class PixFader : public Gtk::DrawingArea
bool on_button_release_event (GdkEventButton*);
bool on_motion_notify_event (GdkEventMotion*);
bool on_scroll_event (GdkEventScroll* ev);
bool on_enter_notify_event (GdkEventCrossing* ev);
bool on_leave_notify_event (GdkEventCrossing* ev);
enum Orientation {
VERT=1,

View File

@@ -20,20 +20,17 @@
#include <iostream>
#include <gtkmm2ext/pixfader.h>
#include "gtkmm2ext/pixfader.h"
#include "gtkmm2ext/keyboard.h"
using namespace Gtkmm2ext;
using namespace Gtk;
using namespace Gdk;
using namespace std;
#ifdef GTKOSX
int PixFader::fine_scale_modifier = GDK_META_MASK;
#else
int PixFader::fine_scale_modifier = GDK_CONTROL_MASK;
#endif
int PixFader::extra_fine_scale_modifier = GDK_MOD1_MASK;
int PixFader::fine_scale_modifier = Keyboard::PrimaryModifier;
int PixFader::extra_fine_scale_modifier = Keyboard::SecondaryModifier;
PixFader::PixFader (Glib::RefPtr<Pixbuf> belt, Gtk::Adjustment& adj, int orientation, int fader_length)
@@ -56,7 +53,7 @@ PixFader::PixFader (Glib::RefPtr<Pixbuf> belt, Gtk::Adjustment& adj, int orienta
set_fader_length (fader_length);
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed));
@@ -159,23 +156,15 @@ PixFader::on_button_release_event (GdkEventButton* ev)
/* no motion - just a click */
if (ev->state & Gdk::SHIFT_MASK) {
cerr << "SV A\n";
if (ev->state & Keyboard::TertiaryModifier) {
adjustment.set_value (default_value);
cerr << "SV A OUT\n";
} else if (ev->state & fine_scale_modifier) {
cerr << "SV B\n";
adjustment.set_value (adjustment.get_lower());
cerr << "SV B OUT\n";
} else if ((_orien == VERT && ev_pos < span - display_span()) || (_orien == HORIZ && ev_pos > span - display_span())) {
/* above the current display height, remember X Window coords */
cerr << "SV C\n";
adjustment.set_value (adjustment.get_value() + adjustment.get_step_increment());
cerr << "SV C OUT\n";
} else {
cerr << "SV D\n";
adjustment.set_value (adjustment.get_value() - adjustment.get_step_increment());
cerr << "SV D OUT\n";
}
}
@@ -334,3 +323,17 @@ PixFader::set_fader_length (int l)
queue_draw ();
}
bool
PixFader::on_enter_notify_event (GdkEventCrossing*)
{
Keyboard::magic_widget_grab_focus ();
return false;
}
bool
PixFader::on_leave_notify_event (GdkEventCrossing*)
{
Keyboard::magic_widget_drop_focus();
return false;
}

View File

@@ -23,7 +23,8 @@
#include <gtkmm.h>
#include <gtkmm2ext/pixscroller.h>
#include "gtkmm2ext/pixscroller.h"
#include "gtkmm2ext/keyboard.h"
using namespace std;
using namespace Gtk;
@@ -116,7 +117,7 @@ PixScroller::on_button_press_event (GdkEventButton* ev)
{
switch (ev->button) {
case 1:
if (!(ev->state & Gdk::SHIFT_MASK)) {
if (!(ev->state & Keyboard::TertiaryModifier)) {
add_modal_grab();
grab_y = ev->y;
grab_start = ev->y;
@@ -137,8 +138,8 @@ PixScroller::on_button_release_event (GdkEventButton* ev)
{
double scale;
if (ev->state & GDK_CONTROL_MASK) {
if (ev->state & GDK_MOD1_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
if (ev->state & Keyboard::SecondaryModifier) {
scale = 0.05;
} else {
scale = 0.1;
@@ -170,7 +171,7 @@ PixScroller::on_button_release_event (GdkEventButton* ev)
adj.set_value (scale * fract * (adj.get_upper() - adj.get_lower()));
}
} else {
if (ev->state & Gdk::SHIFT_MASK) {
if (ev->state & Keyboard::TertiaryModifier) {
adj.set_value (default_value);
cerr << "default value = " << default_value << endl;
}
@@ -187,8 +188,8 @@ PixScroller::on_scroll_event (GdkEventScroll* ev)
{
double scale;
if (ev->state & GDK_CONTROL_MASK) {
if (ev->state & GDK_MOD1_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
if (ev->state & Keyboard::SecondaryModifier) {
scale = 0.05;
} else {
scale = 0.1;
@@ -227,8 +228,8 @@ PixScroller::on_motion_notify_event (GdkEventMotion* ev)
return true;
}
if (ev->state & GDK_CONTROL_MASK) {
if (ev->state & GDK_MOD1_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
if (ev->state & Keyboard::SecondaryModifier) {
scale = 0.05;
} else {
scale = 0.1;

View File

@@ -18,7 +18,9 @@
*/
#include <iostream>
#include <gtkmm2ext/scroomer.h>
#include "gtkmm2ext/scroomer.h"
#include "gtkmm2ext/keyboard.h"
using namespace Gtkmm2ext;
using namespace Gtk;
@@ -74,8 +76,8 @@ Scroomer::on_motion_notify_event (GdkEventMotion* ev)
grab_y = ev->y;
if (ev->state & GDK_CONTROL_MASK) {
if (ev->state & GDK_MOD1_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
if (ev->state & Keyboard::SecondaryModifier) {
scale = 0.05;
} else {
scale = 0.1;

View File

@@ -22,9 +22,11 @@
#include <vector>
#include <string>
#include <gtkmm2ext/selector.h>
#include <gtkmm2ext/utils.h>
#include <pbd/pathscanner.h>
#include "pbd/pathscanner.h"
#include "gtkmm2ext/keyboard.h"
#include "gtkmm2ext/selector.h"
#include "gtkmm2ext/utils.h"
using namespace std;
using namespace Gtkmm2ext;
@@ -219,9 +221,9 @@ TreeView_Selector::on_button_press_event(GdkEventButton* ev)
bool return_value = TreeView::on_button_press_event(ev);
if (ev && (ev->type == GDK_BUTTON_RELEASE || ev->type == GDK_2BUTTON_PRESS)) {
if (ev->state & Gdk::CONTROL_MASK) {
if (ev->state & Keyboard::PrimaryModifier) {
g_idle_add (Selector::_control_clicked, this);
} else if (ev->state & Gdk::SHIFT_MASK) {
} else if (ev->state & Keyboard::TertiaryModifier) {
g_idle_add (Selector::_shift_clicked, this);
} else if (ev->type == GDK_2BUTTON_PRESS) {
g_idle_add (Selector::_accept, this);