diff options
| author | dam <dam@gudinoff> | 2022-03-27 21:18:45 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-03-27 21:18:45 +0000 |
| commit | 146b7a86fc10547a3d59c00aaa3c940db64d0773 (patch) | |
| tree | 9c4a95905c61ac12aac0b303f2e0225c43949f79 /option_set/option_set_list.gd | |
| parent | 09ebc40404ace32ea9d94731fd6bccc91f06dcca (diff) | |
| download | surgery-log-146b7a86fc10547a3d59c00aaa3c940db64d0773.tar.zst surgery-log-146b7a86fc10547a3d59c00aaa3c940db64d0773.zip | |
Fixed option set list scrollbar logic.
Diffstat (limited to 'option_set/option_set_list.gd')
| -rw-r--r-- | option_set/option_set_list.gd | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/option_set/option_set_list.gd b/option_set/option_set_list.gd index 7a61161..6efd068 100644 --- a/option_set/option_set_list.gd +++ b/option_set/option_set_list.gd @@ -29,7 +29,7 @@ var selected_style : StyleBoxFlat var border_size := 5 onready var font : Font = get_font("font") - +onready var screen_dpcm : float = float(OS.get_screen_dpi()) / 2.54 func _init(): self.anchor_right = 1.0 @@ -168,18 +168,17 @@ func _process(delta): build_labels() is_dirty = false - var ratio := 1.0 - + var viewable_ratio := 1.0 + var viewable_height := labels.rect_size.y if items.size() > 0: - ratio = v_scroll_bar.max_value / float(labels_end_positions.back()) + viewable_ratio = viewable_height / float(labels_end_positions.back()) v_scroll_bar.min_value = 0 - v_scroll_bar.max_value = labels.rect_size.y - v_scroll_bar.visible = ratio < 1.0 - v_scroll_bar.page = ratio * (v_scroll_bar.max_value - v_scroll_bar.min_value) + v_scroll_bar.max_value = viewable_height / viewable_ratio + v_scroll_bar.visible = viewable_ratio < 1.0 + v_scroll_bar.page = viewable_height - var scrollbar_offset := v_scroll_bar.value - var labels_offset := scrollbar_offset / ratio + var labels_offset := v_scroll_bar.value var idx_offset := labels_end_positions.bsearch(labels_offset) var idx := idx_offset @@ -201,7 +200,9 @@ func _process(delta): idx += 1 - labels.margin_right = - v_scroll_bar.rect_size.x if v_scroll_bar.visible else 0.0 + var right_margin = - v_scroll_bar.rect_size.x if v_scroll_bar.visible else 0.0 + labels.margin_right = right_margin + sensor.margin_right = right_margin # Apply drag movement inertia. if is_pointer_dragging == false && abs(pointer_drag_velocity) > 0.5: @@ -212,14 +213,8 @@ func _process(delta): func get_item_at_position(mouse_position: Vector2) -> int: if items.size() == 0: return -1 - - var ratio := 1.0 - - if items.size() > 0: - ratio = v_scroll_bar.max_value / float(labels_end_positions.back()) - var scrollbar_offset := v_scroll_bar.value - var labels_offset := scrollbar_offset / ratio + var labels_offset := v_scroll_bar.value var position := mouse_position.y + labels_offset var item_idx := labels_end_positions.bsearch(position) @@ -270,6 +265,6 @@ func pointer_input_on_click_handler(pointer: PointerInputSensor.PointerInputData func pointer_input_on_scroll_handler(pointer: PointerInputSensor.PointerInputData): - pointer_drag_velocity -= pointer.scroll * POINTER_VELOCITY_BOOST_FACTOR * float(OS.get_screen_dpi()) / 2.54 + pointer_drag_velocity -= pointer.scroll * POINTER_VELOCITY_BOOST_FACTOR * screen_dpcm |
