51 lines
1.8 KiB
GDScript
51 lines
1.8 KiB
GDScript
extends RefCounted
|
|
|
|
const Collection := preload("res://addons/icon_explorer/internal/scripts/collection.gd")
|
|
|
|
var name: String
|
|
var collection: Collection
|
|
var texture: Texture2D
|
|
var icon_path: String
|
|
var svg_size: Vector2 = Vector2.ZERO
|
|
var colorable: bool = false
|
|
|
|
# used by the GUI to sort multiple icons, cached value to optimize sorting
|
|
var sort_priority: int
|
|
|
|
# VIRTUAL
|
|
# return a value between 0 and 10
|
|
# 10:
|
|
# - keyword is contained in name
|
|
# 7:
|
|
# - keyword is part of an alias
|
|
# 5:
|
|
# - keyword is part of category or search term
|
|
# 0:
|
|
# - will not be displayed
|
|
func match(keyword: String) -> int:
|
|
return 0
|
|
|
|
# return either 10, 9 or 0
|
|
func get_name_match(keyword: String) -> int:
|
|
if self.name.to_lower() == keyword:
|
|
return 10
|
|
if self.name.to_lower().contains(keyword):
|
|
return 9
|
|
if self.name.similarity(keyword) > 0.8:
|
|
return 9
|
|
return 0
|
|
|
|
static func compare(lhs, rhs) -> bool:
|
|
return lhs.sort_priority > rhs.sort_priority || (lhs.sort_priority == rhs.sort_priority && lhs.name.to_lower() < rhs.name.to_lower())
|
|
|
|
static var _rx_view_box: RegEx = RegEx.create_from_string(r'viewBox=\"([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+)\"')
|
|
|
|
static func get_svg_size(buffer: String) -> Vector2:
|
|
# TODO: static init is not called in editor if not @tool
|
|
if _rx_view_box == null:
|
|
_rx_view_box = RegEx.create_from_string(r'viewBox=\"([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+) ([+-]?(?:[0-9]*[.])?[0-9]+)\"')
|
|
var rx_match: RegExMatch = _rx_view_box.search(buffer)
|
|
if rx_match:
|
|
return Vector2(float(rx_match.get_string(3)) - float(rx_match.get_string(1)), float(rx_match.get_string(4)) - int(rx_match.get_string(2)))
|
|
return Vector2(0, 0)
|