mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Implemented scrolling factor for smooth trackpad scrolling
Working platforms platform: OSX, Windows.
Support for almost all ui elements, including project list.
Ported from 304a1f5b5a (#7864).
Fixes #492 and #3913.
This commit is contained in:
parent
e7328fe5a0
commit
ee670f3724
15 changed files with 111 additions and 67 deletions
|
|
@ -717,6 +717,18 @@ void GraphEdit::_input_event(const InputEvent &p_ev) {
|
|||
//too difficult to get right
|
||||
//set_zoom(zoom/ZOOM_SCALE);
|
||||
}
|
||||
if (b.button_index == BUTTON_WHEEL_UP) {
|
||||
h_scroll->set_val(h_scroll->get_val() - h_scroll->get_page() * b.factor / 8);
|
||||
}
|
||||
if (b.button_index == BUTTON_WHEEL_DOWN) {
|
||||
h_scroll->set_val(h_scroll->get_val() + h_scroll->get_page() * b.factor / 8);
|
||||
}
|
||||
if (b.button_index == BUTTON_WHEEL_RIGHT) {
|
||||
v_scroll->set_val(v_scroll->get_val() + v_scroll->get_page() * b.factor / 8);
|
||||
}
|
||||
if (b.button_index == BUTTON_WHEEL_LEFT) {
|
||||
v_scroll->set_val(v_scroll->get_val() - v_scroll->get_page() * b.factor / 8);
|
||||
}
|
||||
}
|
||||
|
||||
if (p_ev.type == InputEvent::KEY && p_ev.key.scancode == KEY_D && p_ev.key.pressed && p_ev.key.mod.command) {
|
||||
|
|
|
|||
|
|
@ -519,10 +519,14 @@ void ItemList::_input_event(const InputEvent &p_event) {
|
|||
}
|
||||
if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_UP && p_event.mouse_button.pressed) {
|
||||
|
||||
scroll_bar->set_val(scroll_bar->get_val() - scroll_bar->get_page() * p_event.mouse_button.factor / 8);
|
||||
|
||||
scroll_bar->set_val(scroll_bar->get_val() - scroll_bar->get_page() / 8);
|
||||
}
|
||||
if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index == BUTTON_WHEEL_DOWN && p_event.mouse_button.pressed) {
|
||||
|
||||
scroll_bar->set_val(scroll_bar->get_val() + scroll_bar->get_page() * p_event.mouse_button.factor / 8);
|
||||
|
||||
scroll_bar->set_val(scroll_bar->get_val() + scroll_bar->get_page() / 8);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ void PopupMenu::_input_event(const InputEvent &p_event) {
|
|||
|
||||
Point2 pos = get_pos();
|
||||
int s = (vseparation + font->get_height()) * 3;
|
||||
pos.y -= s;
|
||||
pos.y -= (s * b.factor);
|
||||
set_pos(pos);
|
||||
|
||||
//update hover
|
||||
|
|
@ -291,7 +291,7 @@ void PopupMenu::_input_event(const InputEvent &p_event) {
|
|||
|
||||
Point2 pos = get_pos();
|
||||
int s = (vseparation + font->get_height()) * 3;
|
||||
pos.y += s;
|
||||
pos.y += (s * b.factor);
|
||||
set_pos(pos);
|
||||
|
||||
//update hover
|
||||
|
|
|
|||
|
|
@ -782,12 +782,14 @@ void RichTextLabel::_input_event(InputEvent p_event) {
|
|||
if (b.button_index == BUTTON_WHEEL_UP) {
|
||||
|
||||
if (scroll_active)
|
||||
vscroll->set_val(vscroll->get_val() - vscroll->get_page() / 8);
|
||||
|
||||
vscroll->set_val(vscroll->get_val() - vscroll->get_page() * b.factor * 0.5 / 8);
|
||||
}
|
||||
if (b.button_index == BUTTON_WHEEL_DOWN) {
|
||||
|
||||
if (scroll_active)
|
||||
vscroll->set_val(vscroll->get_val() + vscroll->get_page() / 8);
|
||||
|
||||
vscroll->set_val(vscroll->get_val() + vscroll->get_page() * b.factor * 0.5 / 8);
|
||||
}
|
||||
} break;
|
||||
case InputEvent::KEY: {
|
||||
|
|
|
|||
|
|
@ -85,20 +85,32 @@ void ScrollContainer::_input_event(const InputEvent &p_input_event) {
|
|||
const InputEventMouseButton &mb = p_input_event.mouse_button;
|
||||
|
||||
if (mb.button_index == BUTTON_WHEEL_UP && mb.pressed) {
|
||||
// only horizontal is enabled, scroll horizontally
|
||||
if (h_scroll->is_visible() && !v_scroll->is_visible()) {
|
||||
// only horizontal is enabled, scroll horizontally
|
||||
h_scroll->set_val(h_scroll->get_val() - h_scroll->get_page() / 8);
|
||||
h_scroll->set_val(h_scroll->get_val() - h_scroll->get_page() / 8 * mb.factor);
|
||||
} else if (v_scroll->is_visible()) {
|
||||
v_scroll->set_val(v_scroll->get_val() - v_scroll->get_page() / 8);
|
||||
v_scroll->set_val(v_scroll->get_val() - v_scroll->get_page() / 8 * mb.factor);
|
||||
}
|
||||
}
|
||||
|
||||
if (mb.button_index == BUTTON_WHEEL_DOWN && mb.pressed) {
|
||||
// only horizontal is enabled, scroll horizontally
|
||||
if (h_scroll->is_visible() && !v_scroll->is_visible()) {
|
||||
// only horizontal is enabled, scroll horizontally
|
||||
h_scroll->set_val(h_scroll->get_val() + h_scroll->get_page() / 8);
|
||||
h_scroll->set_val(h_scroll->get_val() + h_scroll->get_page() / 8 * mb.factor);
|
||||
} else if (v_scroll->is_visible()) {
|
||||
v_scroll->set_val(v_scroll->get_val() + v_scroll->get_page() / 8);
|
||||
v_scroll->set_val(v_scroll->get_val() + v_scroll->get_page() / 8 * mb.factor);
|
||||
}
|
||||
}
|
||||
|
||||
if (mb.button_index == BUTTON_WHEEL_LEFT && mb.pressed) {
|
||||
if (h_scroll->is_visible()) {
|
||||
h_scroll->set_val(h_scroll->get_val() - h_scroll->get_page() * mb.factor / 8);
|
||||
}
|
||||
}
|
||||
|
||||
if (mb.button_index == BUTTON_WHEEL_RIGHT && mb.pressed) {
|
||||
if (h_scroll->is_visible()) {
|
||||
h_scroll->set_val(h_scroll->get_val() + h_scroll->get_page() * mb.factor / 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,13 +113,15 @@ void SpinBox::_input_event(const InputEvent &p_event) {
|
|||
} break;
|
||||
case BUTTON_WHEEL_UP: {
|
||||
if (line_edit->has_focus()) {
|
||||
set_val(get_val() + get_step());
|
||||
|
||||
set_val(get_val() + get_step() * mb.factor);
|
||||
accept_event();
|
||||
}
|
||||
} break;
|
||||
case BUTTON_WHEEL_DOWN: {
|
||||
if (line_edit->has_focus()) {
|
||||
set_val(get_val() - get_step());
|
||||
|
||||
set_val(get_val() - get_step() * mb.factor);
|
||||
accept_event();
|
||||
}
|
||||
} break;
|
||||
|
|
|
|||
|
|
@ -333,7 +333,10 @@ void TextEdit::_update_scrollbars() {
|
|||
v_scroll->show();
|
||||
v_scroll->set_max(total_rows);
|
||||
v_scroll->set_page(visible_rows);
|
||||
v_scroll->set_val(cursor.line_ofs);
|
||||
|
||||
if (fabs(v_scroll->get_val() - (double)cursor.line_ofs) >= 1) {
|
||||
v_scroll->set_val(cursor.line_ofs);
|
||||
}
|
||||
|
||||
} else {
|
||||
cursor.line_ofs = 0;
|
||||
|
|
@ -345,7 +348,9 @@ void TextEdit::_update_scrollbars() {
|
|||
h_scroll->show();
|
||||
h_scroll->set_max(total_width);
|
||||
h_scroll->set_page(visible_width);
|
||||
h_scroll->set_val(cursor.x_ofs);
|
||||
if (fabs(h_scroll->get_val() - (double)cursor.x_ofs) >= 1) {
|
||||
h_scroll->set_val(cursor.x_ofs);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
|
|
@ -1431,17 +1436,18 @@ void TextEdit::_input_event(const InputEvent &p_input_event) {
|
|||
}
|
||||
|
||||
if (mb.pressed) {
|
||||
|
||||
if (mb.button_index == BUTTON_WHEEL_UP && !mb.mod.command) {
|
||||
v_scroll->set_val(v_scroll->get_val() - 3);
|
||||
v_scroll->set_val(v_scroll->get_val() - (3 * mb.factor));
|
||||
}
|
||||
if (mb.button_index == BUTTON_WHEEL_DOWN && !mb.mod.command) {
|
||||
v_scroll->set_val(v_scroll->get_val() + 3);
|
||||
v_scroll->set_val(v_scroll->get_val() + (3 * mb.factor));
|
||||
}
|
||||
if (mb.button_index == BUTTON_WHEEL_LEFT) {
|
||||
h_scroll->set_val(h_scroll->get_val() - 3);
|
||||
h_scroll->set_val(h_scroll->get_val() - (100 * mb.factor));
|
||||
}
|
||||
if (mb.button_index == BUTTON_WHEEL_RIGHT) {
|
||||
h_scroll->set_val(h_scroll->get_val() + 3);
|
||||
h_scroll->set_val(h_scroll->get_val() + (100 * mb.factor));
|
||||
}
|
||||
if (mb.button_index == BUTTON_LEFT) {
|
||||
|
||||
|
|
|
|||
|
|
@ -2299,11 +2299,11 @@ void Tree::_input_event(InputEvent p_event) {
|
|||
} break;
|
||||
case BUTTON_WHEEL_UP: {
|
||||
|
||||
v_scroll->set_val(v_scroll->get_val() - v_scroll->get_page() / 8);
|
||||
v_scroll->set_val(v_scroll->get_val() - v_scroll->get_page() * b.factor / 8);
|
||||
} break;
|
||||
case BUTTON_WHEEL_DOWN: {
|
||||
|
||||
v_scroll->set_val(v_scroll->get_val() + v_scroll->get_page() / 8);
|
||||
v_scroll->set_val(v_scroll->get_val() + v_scroll->get_page() * b.factor / 8);
|
||||
} break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue