Gdk::Cursor* Editor::grabber_cursor = 0;
Gdk::Cursor* Editor::grabber_note_cursor = 0;
Gdk::Cursor* Editor::grabber_edit_point_cursor = 0;
-Gdk::Cursor* Editor::zoom_cursor = 0;
+Gdk::Cursor* Editor::zoom_in_cursor = 0;
+Gdk::Cursor* Editor::zoom_out_cursor = 0;
Gdk::Cursor* Editor::time_fx_cursor = 0;
Gdk::Cursor* Editor::fader_cursor = 0;
Gdk::Cursor* Editor::speaker_cursor = 0;
{
using namespace Gdk;
- Gdk::Color mbg ("#000000" ); /* Black */
- Gdk::Color mfg ("#0000ff" ); /* Blue. */
-
{
- RefPtr<Bitmap> source, mask;
- source = Bitmap::create (mag_bits, mag_width, mag_height);
- mask = Bitmap::create (magmask_bits, mag_width, mag_height);
- zoom_cursor = new Gdk::Cursor (source, mask, mfg, mbg, mag_x_hot, mag_y_hot);
+ Glib::RefPtr<Gdk::Pixbuf> zoom_in_cursor_pixbuf (::get_icon ("zoom_in_cursor"));
+ zoom_in_cursor = new Gdk::Cursor (Gdk::Display::get_default(), zoom_in_cursor_pixbuf, 5, 5);
}
+ {
+ Glib::RefPtr<Gdk::Pixbuf> zoom_out_cursor_pixbuf (::get_icon ("zoom_out_cursor"));
+ zoom_out_cursor = new Gdk::Cursor (Gdk::Display::get_default(), zoom_out_cursor_pixbuf, 5, 5);
+ }
+
Gdk::Color fbg ("#ffffff" );
Gdk::Color ffg ("#000000" );
static Gdk::Cursor* grabber_cursor;
static Gdk::Cursor* grabber_note_cursor;
static Gdk::Cursor* grabber_edit_point_cursor;
- static Gdk::Cursor* zoom_cursor;
+ static Gdk::Cursor* zoom_in_cursor;
+ static Gdk::Cursor* zoom_out_cursor;
static Gdk::Cursor* time_fx_cursor;
static Gdk::Cursor* fader_cursor;
static Gdk::Cursor* speaker_cursor;
void track_canvas_allocate (Gtk::Allocation alloc);
bool track_canvas_size_allocated ();
bool track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const &, int, int, guint);
+ bool track_canvas_key_press (GdkEventKey *);
+ bool track_canvas_key_release (GdkEventKey *);
void set_playhead_cursor ();
#include "editor_group_tabs.h"
#include "editor_routes.h"
#include "editor_summary.h"
+#include "keyboard.h"
#include "i18n.h"
track_canvas->signal_button_press_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_press_event));
track_canvas->signal_button_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_release_event));
track_canvas->signal_drag_motion().connect (sigc::mem_fun (*this, &Editor::track_canvas_drag_motion));
+ track_canvas->signal_key_press_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_key_press));
+ track_canvas->signal_key_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_key_release));
track_canvas->set_name ("EditorMainCanvas");
- track_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK);
+ track_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
track_canvas->signal_leave_notify_event().connect (sigc::mem_fun(*this, &Editor::left_track_canvas));
track_canvas->signal_enter_notify_event().connect (sigc::mem_fun(*this, &Editor::entered_track_canvas));
track_canvas->set_flags (CAN_FOCUS);
{
return frame_to_unit (leftmost_frame);
}
+
+bool
+Editor::track_canvas_key_press (GdkEventKey* event)
+{
+ /* XXX: event does not report the modifier key pressed down, AFAICS, so use the Keyboard object instead */
+ if (mouse_mode == Editing::MouseZoom && Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
+ track_canvas->get_window()->set_cursor (*zoom_out_cursor);
+ }
+
+ return false;
+}
+
+bool
+Editor::track_canvas_key_release (GdkEventKey* event)
+{
+ if (mouse_mode == Editing::MouseZoom && !Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
+ track_canvas->get_window()->set_cursor (*zoom_in_cursor);
+ }
+
+ return false;
+}
case GDK_LEAVE_NOTIFY:
set_entered_track (0);
break;
-
+
default:
break;
}
MouseZoomDrag::MouseZoomDrag (Editor* e, ArdourCanvas::Item* i)
: Drag (e, i)
+ , _zoom_out (false)
{
DEBUG_TRACE (DEBUG::Drags, "New MouseZoomDrag\n");
}
void
MouseZoomDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
{
- Drag::start_grab (event, _editor->zoom_cursor);
+ if (Keyboard::the_keyboard().key_is_down (GDK_Control_L)) {
+ Drag::start_grab (event, _editor->zoom_out_cursor);
+ _zoom_out = true;
+ } else {
+ Drag::start_grab (event, _editor->zoom_in_cursor);
+ _zoom_out = false;
+ }
+
_editor->show_verbose_time_cursor (adjusted_current_frame (event), 10);
}
_editor->temporal_zoom_by_frame (last_pointer_frame(), grab_frame(), "mouse zoom");
}
} else {
- _editor->temporal_zoom_to_frame (false, grab_frame());
- /*
- temporal_zoom_step (false);
- center_screen (grab_frame());
- */
+ _editor->temporal_zoom_to_frame (_zoom_out, grab_frame());
}
_editor->zoom_rect->hide();
void motion (GdkEvent *, bool);
void finished (GdkEvent *, bool);
void aborted ();
+
+private:
+ bool _zoom_out;
};
/** Drag of a range of automation data, changing value but not position */
break;
case MouseZoom:
- current_canvas_cursor = zoom_cursor;
+ current_canvas_cursor = zoom_in_cursor;
break;
case MouseTimeFX:
cursor = selector_cursor;
break;
case MouseZoom:
- cursor = zoom_cursor;
+ cursor = zoom_in_cursor;
break;
default:
cursor = cross_hair_cursor;
-/* Created with The GIMP */
-#define mag_width 16
-#define mag_height 16
-#define mag_x_hot 9
-#define mag_y_hot 5
-static const gchar mag_bits[] = {
- 0x7f, 0xe0, 0x3f, 0xc0, 0x1f, 0x8f, 0x8f, 0x9f, 0xcf, 0x3f, 0xcf, 0x3f,
- 0xcf, 0x3f, 0xcf, 0x3f, 0x8f, 0x1f, 0x1f, 0x8f, 0x0f, 0xc0, 0x47, 0xe0,
- 0xe3, 0xff, 0xf1, 0xff, 0xf8, 0xff, 0xfc, 0xff };
-
-static const gchar magmask_bits[] = {
- 0x80, 0x1f, 0xc0, 0x3f, 0xe0, 0x70, 0x70, 0x66, 0x30, 0xc6, 0xb0, 0xdf,
- 0xb0, 0xdf, 0x30, 0xc6, 0x70, 0xe6, 0xe0, 0x70, 0xf0, 0x3f, 0xb8, 0x1f,
- 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00 };
-
/* Created with The GIMP */
#define fader_cursor_width 25
#define fader_cursor_height 25