Reinstate mouse scroll actions (audio clocks, shuttle wheel, faders), clearing selection is undoable, fix compiler warning, add modified patch by Jon Michael Smith for mouse wheel track height adjustment and vertical canvas scrolling (thanks Jon)
git-svn-id: svn://localhost/trunk/ardour2@449 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
e9f9ca5278
commit
7e8a982245
|
@ -408,6 +408,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
gint shuttle_box_button_press (GdkEventButton*);
|
||||
gint shuttle_box_button_release (GdkEventButton*);
|
||||
gint shuttle_box_scroll (GdkEventScroll*);
|
||||
gint shuttle_box_motion (GdkEventMotion*);
|
||||
gint shuttle_box_expose (GdkEventExpose*);
|
||||
gint mouse_shuttle (double x, bool force);
|
||||
|
|
|
@ -306,11 +306,12 @@ ARDOUR_UI::setup_transport ()
|
|||
ARDOUR_UI::instance()->tooltips().set_tip (speed_display_box, _("Current transport speed"));
|
||||
|
||||
shuttle_box.set_flags (CAN_FOCUS);
|
||||
shuttle_box.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
shuttle_box.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
shuttle_box.set_size_request (100, 15);
|
||||
|
||||
shuttle_box.signal_button_press_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_button_press));
|
||||
shuttle_box.signal_button_release_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_button_release));
|
||||
shuttle_box.signal_scroll_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_scroll));
|
||||
shuttle_box.signal_motion_notify_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_motion));
|
||||
shuttle_box.signal_expose_event().connect (mem_fun(*this, &ARDOUR_UI::shuttle_box_expose));
|
||||
|
||||
|
@ -683,6 +684,28 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
|
|||
return true;
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::shuttle_box_scroll (GdkEventScroll* ev)
|
||||
{
|
||||
if (!session) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (ev->direction) {
|
||||
|
||||
case GDK_SCROLL_UP:
|
||||
shuttle_fract += 0.005;
|
||||
break;
|
||||
case GDK_SCROLL_DOWN:
|
||||
shuttle_fract -= 0.005;
|
||||
break;
|
||||
}
|
||||
|
||||
use_shuttle_fract (true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::shuttle_box_motion (GdkEventMotion* ev)
|
||||
{
|
||||
|
|
|
@ -186,7 +186,7 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool
|
|||
stays disabled.
|
||||
*/
|
||||
|
||||
clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK);
|
||||
clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours));
|
||||
|
||||
if (editable) {
|
||||
|
@ -201,17 +201,17 @@ AudioClock::setup_events ()
|
|||
{
|
||||
clock_base.set_flags (Gtk::CAN_FOCUS);
|
||||
|
||||
hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
bars_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
beats_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
ticks_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
ms_hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
ms_minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
ms_seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
audio_frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
bars_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
beats_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
ticks_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
ms_hours_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
ms_minutes_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
ms_seconds_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
audio_frames_ebox.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK);
|
||||
|
||||
hours_ebox.set_flags (Gtk::CAN_FOCUS);
|
||||
minutes_ebox.set_flags (Gtk::CAN_FOCUS);
|
||||
|
@ -261,6 +261,18 @@ AudioClock::setup_events ()
|
|||
ms_minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Minutes));
|
||||
ms_seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Seconds));
|
||||
|
||||
hours_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Hours));
|
||||
minutes_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Minutes));
|
||||
seconds_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Seconds));
|
||||
frames_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), SMPTE_Frames));
|
||||
audio_frames_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), AudioFrames));
|
||||
bars_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Bars));
|
||||
beats_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Beats));
|
||||
ticks_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), Ticks));
|
||||
ms_hours_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Hours));
|
||||
ms_minutes_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Minutes));
|
||||
ms_seconds_ebox.signal_scroll_event().connect (bind (mem_fun(*this, &AudioClock::field_button_scroll_event), MS_Seconds));
|
||||
|
||||
hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Hours));
|
||||
minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Minutes));
|
||||
seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Seconds));
|
||||
|
@ -984,6 +996,51 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool
|
||||
AudioClock::field_button_scroll_event (GdkEventScroll *ev, Field field)
|
||||
{
|
||||
if (session == 0) return FALSE;
|
||||
|
||||
jack_nframes_t frames = 0;
|
||||
|
||||
switch (ev->direction) {
|
||||
|
||||
case GDK_SCROLL_UP:
|
||||
frames = get_frames (field);
|
||||
if (frames != 0) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
frames *= 10;
|
||||
}
|
||||
set (current_time() + frames, true);
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
frames = get_frames (field);
|
||||
if (frames != 0) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
frames *= 10;
|
||||
}
|
||||
|
||||
if ((double)current_time() - (double)frames < 0.0) {
|
||||
set (0, true);
|
||||
} else {
|
||||
set (current_time() - frames, true);
|
||||
}
|
||||
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool
|
||||
AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
|
||||
{
|
||||
|
|
|
@ -153,6 +153,7 @@ class AudioClock : public Gtk::HBox
|
|||
bool field_motion_notify_event (GdkEventMotion *ev, Field);
|
||||
bool field_button_press_event (GdkEventButton *ev, Field);
|
||||
bool field_button_release_event (GdkEventButton *ev, Field);
|
||||
bool field_button_scroll_event (GdkEventScroll *ev, Field);
|
||||
bool field_key_release_event (GdkEventKey *, Field);
|
||||
bool field_focus_in_event (GdkEventFocus *, Field);
|
||||
bool field_focus_out_event (GdkEventFocus *, Field);
|
||||
|
|
|
@ -966,7 +966,7 @@ Editor::control_scroll (float fraction)
|
|||
} else if ((fraction > 0.0f) && (max_frames - session->transport_frame() < step)) {
|
||||
target = (max_frames - (current_page_frames()*2)); // allow room for slop in where the PH is on the screen
|
||||
} else {
|
||||
target = (session->transport_frame() + (fraction * current_page_frames()));
|
||||
target = (session->transport_frame() + (jack_nframes_t)(fraction * current_page_frames()));
|
||||
}
|
||||
|
||||
/* move visuals, we'll catch up with it later */
|
||||
|
|
|
@ -49,7 +49,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
{
|
||||
int x, y;
|
||||
double wx, wy;
|
||||
|
||||
|
||||
switch (ev->direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
|
@ -72,6 +72,16 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
jack_nframes_t where = event_frame (&event, 0, 0);
|
||||
temporal_zoom_to_frame (true, where);
|
||||
return true;
|
||||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
if (!current_stepping_trackview) {
|
||||
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
|
||||
if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
gettimeofday (&last_track_height_step_timestamp, 0);
|
||||
current_stepping_trackview->step_height (true);
|
||||
return true;
|
||||
} else {
|
||||
scroll_tracks_up_line ();
|
||||
return true;
|
||||
|
@ -94,15 +104,15 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
temporal_zoom_to_frame (false, where);
|
||||
return true;
|
||||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
if (clicked_trackview) {
|
||||
if (!current_stepping_trackview) {
|
||||
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
|
||||
current_stepping_trackview = clicked_trackview;
|
||||
}
|
||||
gettimeofday (&last_track_height_step_timestamp, 0);
|
||||
current_stepping_trackview->step_height (true);
|
||||
if (!current_stepping_trackview) {
|
||||
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
|
||||
if (!(current_stepping_trackview = dynamic_cast<AudioTimeAxisView*> (trackview_by_y_position (ev->y)))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
gettimeofday (&last_track_height_step_timestamp, 0);
|
||||
current_stepping_trackview->step_height (false);
|
||||
return true;
|
||||
} else {
|
||||
scroll_tracks_down_line ();
|
||||
return true;
|
||||
|
|
|
@ -3609,11 +3609,13 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
void
|
||||
Editor::cancel_selection ()
|
||||
{
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
(*i)->hide_selection ();
|
||||
}
|
||||
begin_reversible_command (_("cancel selection"));
|
||||
selection->clear ();
|
||||
clicked_selection = 0;
|
||||
commit_reversible_command ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -984,7 +984,12 @@ Editor::scroll_tracks_down ()
|
|||
cnt = (int) floor (prefix);
|
||||
}
|
||||
|
||||
vertical_adjustment.set_value (vertical_adjustment.get_value() + (cnt * vertical_adjustment.get_page_size()));
|
||||
double vert_value = vertical_adjustment.get_value() + (cnt *
|
||||
vertical_adjustment.get_page_size());
|
||||
if (vert_value > vertical_adjustment.get_upper() - canvas_height) {
|
||||
vert_value = vertical_adjustment.get_upper() - canvas_height;
|
||||
}
|
||||
vertical_adjustment.set_value (vert_value);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1006,15 +1011,21 @@ Editor::scroll_tracks_up ()
|
|||
void
|
||||
Editor::scroll_tracks_down_line ()
|
||||
{
|
||||
|
||||
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
||||
adj->set_value (adj->get_value() + 10);
|
||||
double vert_value = adj->get_value() + 20;
|
||||
|
||||
if (vert_value>adj->get_upper() - canvas_height) {
|
||||
vert_value = adj->get_upper() - canvas_height;
|
||||
}
|
||||
adj->set_value (vert_value);
|
||||
}
|
||||
|
||||
void
|
||||
Editor::scroll_tracks_up_line ()
|
||||
{
|
||||
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
||||
adj->set_value (adj->get_value() - 10);
|
||||
adj->set_value (adj->get_value() - 20);
|
||||
}
|
||||
|
||||
/* ZOOM */
|
||||
|
|
|
@ -244,14 +244,14 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
|
|||
{
|
||||
switch (ev->direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
step_height (true);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
|
||||
step_height (false);
|
||||
return true;
|
||||
}
|
||||
|
@ -328,30 +328,35 @@ TimeAxisView::hide ()
|
|||
void
|
||||
TimeAxisView::step_height (bool bigger)
|
||||
{
|
||||
switch (height) {
|
||||
case Largest:
|
||||
if (!bigger) set_height (Large);
|
||||
break;
|
||||
case Large:
|
||||
if (bigger) set_height (Largest);
|
||||
else set_height (Larger);
|
||||
break;
|
||||
case Larger:
|
||||
if (bigger) set_height (Large);
|
||||
else set_height (Normal);
|
||||
break;
|
||||
case Normal:
|
||||
if (bigger) set_height (Larger);
|
||||
else set_height (Smaller);
|
||||
break;
|
||||
case Smaller:
|
||||
if (bigger) set_height (Normal);
|
||||
else set_height (Small);
|
||||
break;
|
||||
case Small:
|
||||
if (bigger) set_height (Smaller);
|
||||
break;
|
||||
}
|
||||
|
||||
if (height == hLargest) {
|
||||
if (!bigger) set_height (Large);
|
||||
return;
|
||||
}
|
||||
if (height == hLarge) {
|
||||
if (bigger) set_height (Largest);
|
||||
else set_height (Larger);
|
||||
return;
|
||||
}
|
||||
if (height == hLarger) {
|
||||
if (bigger) set_height (Large);
|
||||
else set_height (Normal);
|
||||
return;
|
||||
}
|
||||
if (height == hNormal) {
|
||||
if (bigger) set_height (Larger);
|
||||
else set_height (Smaller);
|
||||
return;
|
||||
}
|
||||
if (height == hSmaller) {
|
||||
if (bigger) set_height (Normal);
|
||||
else set_height (Small);
|
||||
return;
|
||||
}
|
||||
if (height == hSmall) {
|
||||
if (bigger) set_height (Smaller);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -18,6 +18,7 @@ class PixScroller : public Gtk::DrawingArea
|
|||
bool on_motion_notify_event (GdkEventMotion*);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
bool on_scroll_event (GdkEventScroll*);
|
||||
void on_size_request (GtkRequisition*);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -176,11 +176,34 @@ PixScroller::on_button_release_event (GdkEventButton* ev)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
PixScroller::on_scroll_event (GdkEventScroll* ev)
|
||||
{
|
||||
double scale;
|
||||
|
||||
if (ev->state & GDK_CONTROL_MASK) {
|
||||
if (ev->state & GDK_MOD1_MASK) {
|
||||
scale = 0.05;
|
||||
} else {
|
||||
scale = 0.1;
|
||||
}
|
||||
} else {
|
||||
scale = 0.5;
|
||||
}
|
||||
|
||||
switch (ev->direction) {
|
||||
|
||||
case GDK_SCROLL_UP:
|
||||
/* wheel up */
|
||||
adj.set_value (adj.get_value() + (adj.get_page_increment() * scale));
|
||||
break;
|
||||
case 5:
|
||||
case GDK_SCROLL_DOWN:
|
||||
/* wheel down */
|
||||
adj.set_value (adj.get_value() - (adj.get_page_increment() * scale));
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue