From ec0a5262a19a74af7583ff4046663c0b55a61a0f Mon Sep 17 00:00:00 2001 From: moguno Date: Sun, 14 Jul 2013 21:40:56 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=BC=E3=83=88=E3=82=AB=E3=83?= =?UTF-8?q?=83=E3=83=88=E3=82=AD=E3=83=BC=E3=81=AB=E3=82=B9=E3=82=AF=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=82=92=E3=82=A2=E3=82=B5=E3=82=A4=E3=83=B3=E3?= =?UTF-8?q?=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81?= =?UTF-8?q?=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/mui/gtk_extension.rb | 25 ++++++++++++++++++ core/mui/gtk_keyconfig.rb | 9 +++++++ core/mui/gtk_tree_view_pretty_scroll.rb | 44 ++++++++++++++++++++++++------- 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/core/mui/gtk_extension.rb b/core/mui/gtk_extension.rb index 9716c95..f3e6747 100644 --- a/core/mui/gtk_extension.rb +++ b/core/mui/gtk_extension.rb @@ -94,6 +94,31 @@ module Gtk return '(割り当てなし)' end return r end end + def self.scrollname(key) + type_strict key => Array + type, direction, state = key + if key.empty? or type == 0 or not key.all?(&ret_nth) + return '(割り当てなし)' + else + r = "" + r << 'Control + ' if (state & Gdk::Window::CONTROL_MASK) != 0 + r << 'Shift + ' if (state & Gdk::Window::SHIFT_MASK) != 0 + r << 'Alt + ' if (state & Gdk::Window::MOD1_MASK) != 0 + r << 'Super + ' if (state & Gdk::Window::SUPER_MASK) != 0 + r << 'Hyper + ' if (state & Gdk::Window::HYPER_MASK) != 0 + case direction + when Gdk::EventScroll::UP + r << 'Scroll Up' + when Gdk::EventScroll::DOWN + r << 'Scroll Down' + when Gdk::EventScroll::LEFT + r << 'Scroll Left' + when Gdk::EventScroll::RIGHT + r << 'Scroll Right' + else + return '(割り当てなし)' end + return r end end + end =begin rdoc diff --git a/core/mui/gtk_keyconfig.rb b/core/mui/gtk_keyconfig.rb index 268de84..4222f06 100644 --- a/core/mui/gtk_keyconfig.rb +++ b/core/mui/gtk_keyconfig.rb @@ -44,6 +44,7 @@ class Gtk::KeyConfig < Gtk::Button box.pack_start(button) button.signal_connect(:key_press_event, &key_set(label)) button.signal_connect(:button_press_event, &button_set(label)) + button.signal_connect(:scroll_event, &scroll_set(label)) dialog.vbox.add(box) dialog.show_all dialog.run @@ -65,4 +66,12 @@ class Gtk::KeyConfig < Gtk::Button true } end + def scroll_set(label) + lambda{ |widget, event| + self.keycode = Gtk.scrollname([event.event_type, event.direction, event.state]) + buttonlabel.text = label.text = keycode + self.change_hook.call(keycode) if self.change_hook + true } + end + end diff --git a/core/mui/gtk_tree_view_pretty_scroll.rb b/core/mui/gtk_tree_view_pretty_scroll.rb index 539a602..612fdc2 100644 --- a/core/mui/gtk_tree_view_pretty_scroll.rb +++ b/core/mui/gtk_tree_view_pretty_scroll.rb @@ -17,16 +17,42 @@ module Gtk::TreeViewPrettyScroll scroll_to_top_animation = false if scroll_to_top_animation get_scroll_to_top_animation_id += 1 } + scrolling = false + ssc(:scroll_event){ |this, e| - case e.direction - when Gdk::EventScroll::UP - this.vadjustment.value = [this.vadjustment.value - this.vadjustment.step_increment, this.vadjustment.lower].max - scroll_to_top_animation_id.call - when Gdk::EventScroll::DOWN - @scroll_to_zero_lator = false if this.vadjustment.value == 0 - this.vadjustment.value = [this.vadjustment.value + this.vadjustment.step_increment, this.vadjustment.upper - visible_rect.height].min - scroll_to_top_animation_id.call end - false } + + # タイムラインにincludeされている場合、コマンドを実行する + if defined?(imaginary) && imaginary.is_a?(Plugin::GUI::Timeline) + path, column, cell_x, cell_y = get_path_at_pos(e.x, e.y) + + if column + if !scrolling + scrolling = true + Delayer.new(:ui_response) { + if Plugin::GUI.keypress(::Gtk::scrollname([e.event_type, e.direction, e.state]), imaginary) + Thread.new { + sleep 1.0 + scrolling = false + } + else + scrolling = false + end + } + end + end + end + + if e.state == 0 + case e.direction + when Gdk::EventScroll::UP + this.vadjustment.value = [this.vadjustment.value - this.vadjustment.step_increment, this.vadjustment.lower].max + scroll_to_top_animation_id.call + when Gdk::EventScroll::DOWN + @scroll_to_zero_lator = false if this.vadjustment.value == 0 + this.vadjustment.value = [this.vadjustment.value + this.vadjustment.step_increment, this.vadjustment.upper - visible_rect.height].min + scroll_to_top_animation_id.call end + end + false } vadjustment.ssc(:value_changed){ |this| if(scroll_to_zero? and not(scroll_to_top_animation)) -- 1.7.10.2 (Apple Git-33)