Skip to content

Commit 9ebabc7

Browse files
Implement touch scrolling for TabsPanel (#69)
1 parent ef73a58 commit 9ebabc7

File tree

4 files changed

+29
-13
lines changed

4 files changed

+29
-13
lines changed

src/autoload/HandlerGUI.gd

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -382,17 +382,10 @@ func get_auto_ui_scale() -> float:
382382
var scale := dpi / base_dpi
383383
var blend: float = clamp((dpi - 240.0) / 400.0, 0.0, 1.0)
384384
var adjusted_scale: float = max(lerp(scale, pow(scale, 0.75), blend), 1.0)
385-
386385
var screen_width := get_tree().root.size.x
387-
print("contents_minimum_width: ", minimum_content_width)
388-
print("screen_width: ", screen_width)
389-
print("adjusted_scale: ", adjusted_scale)
390-
391386
# Ensure the scale doesn't cause UI overflow.
392387
if (screen_width / adjusted_scale) < minimum_content_width:
393388
adjusted_scale = screen_width / minimum_content_width
394-
print("Adjusted scale due to min content width: ", adjusted_scale)
395-
396389
return snapped(adjusted_scale, 0.01)
397390

398391
func update_ui_scale() -> void:

src/ui_parts/tabs_panel.gd

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,20 @@ func _ready() -> void:
1010
get_parent().gui_input.connect(_on_parent_gui_input)
1111
Configs.tab_removed.connect(refresh_tabs)
1212
Configs.tab_selected.connect(highlight_active_tab)
13+
Configs.theme_changed.connect(sync_theming)
14+
sync_theming()
1315
Configs.tabs_changed.connect(func(): should_refresh = true)
1416
refresh_tabs()
1517

18+
func sync_theming():
19+
var scroll_bar: VScrollBar= $VBoxContainer/ScrollContainer.get_v_scroll_bar()
20+
scroll_bar.mouse_filter = Control.MOUSE_FILTER_IGNORE
21+
var s: StyleBoxFlat = scroll_bar.get_theme_stylebox("scroll").duplicate()
22+
s.draw_center = false
23+
s.content_margin_left = 2
24+
s.content_margin_right = 2
25+
scroll_bar.add_theme_stylebox_override("scroll", s)
26+
1627
func animate_in() -> void:
1728
if should_refresh:
1829
refresh_tabs()

src/ui_widgets/tab_item.gd

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ const PreviewRectScene = preload("res://src/ui_widgets/preview_rect.tscn")
55
@onready var title: Label = $VBoxContainer/HBoxContainer/title
66
@onready var close_button: Button = $VBoxContainer/HBoxContainer/close
77

8+
var _click_start_time := 0
9+
var _dragged := false
10+
const CLICK_MAX_TIME := 300
11+
12+
813
func setup(tab_title: String, svg_text: String, is_active: bool = false) -> void:
914
title.text = tab_title
1015
highlight(is_active)
@@ -30,12 +35,18 @@ func highlight(is_active: bool) -> void:
3035
theme_type_variation = "TabItem"
3136

3237
func _gui_input(event: InputEvent) -> void:
33-
if not event is InputEventMouseButton:
34-
return
35-
if event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
36-
var index := get_index()
37-
Configs.tab_selected.emit(index)
38-
38+
if event is InputEventMouseMotion:
39+
_dragged = true
40+
41+
elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
42+
if event.is_pressed():
43+
_click_start_time = Time.get_ticks_msec()
44+
_dragged = false
45+
else:
46+
var time_diff := Time.get_ticks_msec() - _click_start_time
47+
if time_diff <= CLICK_MAX_TIME and not _dragged:
48+
var index := get_index()
49+
Configs.tab_selected.emit(index)
3950

4051
func _on_close_pressed() -> void:
4152
FileUtils.close_tabs(get_index())

src/ui_widgets/tab_item.tscn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
[node name="TabItem" type="PanelContainer"]
77
custom_minimum_size = Vector2(120, 160)
88
size_flags_horizontal = 6
9+
mouse_filter = 1
910
theme_type_variation = &"TabItem"
1011
script = ExtResource("1_aprl0")
1112

0 commit comments

Comments
 (0)