forked from joey/godottest
95 lines
2.3 KiB
GDScript
95 lines
2.3 KiB
GDScript
@tool
|
|
extends Window
|
|
|
|
const Palette := preload("res://addons/PaletteTools/Scripts/palette_tool.gd")
|
|
const Alert := preload("res://addons/PaletteTools/Scripts/alert_popup_panel.gd")
|
|
const BrowsePreview := preload("res://addons/PaletteTools/Scripts/browse_palette_preview.gd")
|
|
|
|
@export var colors: Palette
|
|
@export var browse_http: HTTPRequest
|
|
@export var browse_preview_scene: PackedScene
|
|
@export var preview_container: Control
|
|
@export var alert_popup: Alert
|
|
@export var loading_screen: Control
|
|
|
|
var current_page: int = 0
|
|
var close_delay: int = 4
|
|
|
|
|
|
func get_palette_list() -> void:
|
|
browse_http.request(
|
|
"https://lospec.com/palette-list/load?colorNumberFilterType=any&colorNumber=8&page="
|
|
+ str(current_page)
|
|
+ "&tag=&sortingType=downloads"
|
|
)
|
|
current_page += 1
|
|
|
|
|
|
func display_preview(palette_obj: Dictionary) -> void:
|
|
var prev: BrowsePreview = browse_preview_scene.instantiate()
|
|
prev.colors = colors
|
|
prev.palette_obj = palette_obj
|
|
prev.info_label.text = palette_obj.name + " by: " + palette_obj.author
|
|
preview_container.add_child(prev)
|
|
for col in palette_obj.colors:
|
|
var new_color := ColorRect.new()
|
|
new_color.custom_minimum_size = Vector2(75, 75)
|
|
new_color.color = Color.from_string(col, Color.WHITE)
|
|
prev.color_container.add_child(new_color)
|
|
|
|
|
|
func _on_close_button_pressed() -> void:
|
|
visible = false
|
|
|
|
|
|
func _on_http_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void:
|
|
var html_text := body.get_string_from_utf8()
|
|
var json := JSON.new()
|
|
var err := json.parse(html_text)
|
|
if err != OK:
|
|
alert_popup.alert("Error getting palettes")
|
|
return
|
|
|
|
loading_screen.visible = false
|
|
for pal in json.data.palettes:
|
|
var user := "Lospec"
|
|
var slug := ""
|
|
if pal.has("user"):
|
|
user = pal.user.name
|
|
if pal.has("slug"):
|
|
slug = pal.slug
|
|
var palette_obj := {
|
|
"name": pal.title,
|
|
"author": user,
|
|
"colors": pal.colors,
|
|
"slug": slug
|
|
}
|
|
|
|
display_preview(palette_obj)
|
|
|
|
|
|
func _on_load_more_pressed() -> void:
|
|
get_palette_list()
|
|
|
|
|
|
func _on_visibility_changed() -> void:
|
|
if visible and current_page == 0:
|
|
get_palette_list()
|
|
|
|
|
|
func _on_close_requested() -> void:
|
|
hide()
|
|
|
|
|
|
func _on_focus_exited() -> void:
|
|
while close_delay > 0:
|
|
close_delay -= 1
|
|
await get_tree().create_timer(1).timeout
|
|
if not has_focus():
|
|
hide()
|
|
close_delay = 3
|
|
|
|
|
|
func _on_size_changed() -> void:
|
|
close_delay = 3
|