2021-04-16 18:09:03 +00:00
|
|
|
extends VBoxContainer
|
|
|
|
|
|
|
|
var scroll := Vector2.ZERO
|
|
|
|
var drag_started := false
|
|
|
|
var drag_start_position := Vector2.ZERO
|
|
|
|
|
|
|
|
onready var h_slider := $MarginContainer/HScrollBar
|
|
|
|
onready var v_slider := $HBoxContainer/CenterContainer/HBoxContainer/VScrollBar
|
|
|
|
onready var palette_grid := $HBoxContainer/CenterContainer/HBoxContainer/PaletteGrid
|
|
|
|
|
|
|
|
|
|
|
|
func _input(event) -> void:
|
|
|
|
# Stops dragging even if middle mouse is released outside of this container
|
|
|
|
if event is InputEventMouseButton:
|
|
|
|
if event.button_index == BUTTON_MIDDLE and not event.pressed:
|
|
|
|
drag_started = false
|
|
|
|
|
|
|
|
|
|
|
|
func set_sliders(palette: Palette, origin: Vector2) -> void:
|
|
|
|
h_slider.value = origin.x
|
|
|
|
v_slider.value = origin.y
|
|
|
|
h_slider.max_value = palette.width
|
|
|
|
if h_slider.max_value <= PaletteGrid.MAX_GRID_SIZE.x:
|
|
|
|
h_slider.visible = false
|
|
|
|
else:
|
|
|
|
h_slider.visible = true
|
|
|
|
v_slider.max_value = palette.height
|
|
|
|
if v_slider.max_value <= PaletteGrid.MAX_GRID_SIZE.y:
|
|
|
|
v_slider.visible = false
|
|
|
|
else:
|
|
|
|
v_slider.visible = true
|
|
|
|
|
|
|
|
|
|
|
|
func scroll_grid() -> void:
|
|
|
|
palette_grid.scroll_palette(scroll)
|
|
|
|
|
|
|
|
|
|
|
|
func _on_VSlider_value_changed(value) -> void:
|
|
|
|
scroll.y = value
|
|
|
|
scroll_grid()
|
|
|
|
|
|
|
|
|
|
|
|
func _on_HSlider_value_changed(value: int) -> void:
|
|
|
|
scroll.x = value
|
|
|
|
scroll_grid()
|
|
|
|
|
|
|
|
|
|
|
|
func _on_PaletteGrid_gui_input(event) -> void:
|
|
|
|
if event is InputEventMouseButton:
|
|
|
|
if event.button_index == BUTTON_MIDDLE and event.pressed:
|
|
|
|
drag_started = true
|
|
|
|
# Keeps position where the dragging started
|
2021-11-25 12:48:30 +00:00
|
|
|
drag_start_position = (
|
|
|
|
event.position
|
|
|
|
+ Vector2(h_slider.value, v_slider.value) * PaletteSwatch.SWATCH_SIZE
|
|
|
|
)
|
2021-04-16 18:09:03 +00:00
|
|
|
|
|
|
|
if event is InputEventMouseMotion and drag_started:
|
|
|
|
h_slider.value = (drag_start_position.x - event.position.x) / PaletteSwatch.SWATCH_SIZE.x
|
|
|
|
v_slider.value = (drag_start_position.y - event.position.y) / PaletteSwatch.SWATCH_SIZE.y
|