From 1593c5c12b3cb45d17cfe26f41d59db49914ab1b Mon Sep 17 00:00:00 2001 From: sapient_cogbag Date: Sat, 11 Apr 2020 03:13:35 +0100 Subject: [PATCH] Set up xdg thing, now for the loader modification nyaa ^.^ --- Scripts/Global.gd | 3 +- Scripts/Palette/PaletteContainer.gd | 9 ++++ Scripts/XDGDataPaths.gd | 67 ++++++++++++++++++++++++++++- 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/Scripts/Global.gd b/Scripts/Global.gd index 55e02d26e..9f148dbe4 100644 --- a/Scripts/Global.gd +++ b/Scripts/Global.gd @@ -7,6 +7,7 @@ enum Brush_Types {PIXEL, CIRCLE, FILLED_CIRCLE, FILE, RANDOM_FILE, CUSTOM} var root_directory := "." var window_title := "" setget title_changed # Why doesn't Godot have get_window_title()? var config_cache := ConfigFile.new() +var directory_module := preload("res://Scripts/XDGDataPaths.gd") # warning-ignore:unused_class_variable var loaded_locales : Array @@ -268,7 +269,7 @@ func _ready() -> void: transparent_background = ImageTexture.new() transparent_background.create_from_image(preload("res://Assets/Graphics/Canvas Backgrounds/Transparent Background Dark.png"), 0) image_clipboard = Image.new() - + var root = get_tree().get_root() control = find_node_by_name(root, "Control") top_menu_container = find_node_by_name(control, "TopMenuContainer") diff --git a/Scripts/Palette/PaletteContainer.gd b/Scripts/Palette/PaletteContainer.gd index b8dca1d4d..b42d13097 100644 --- a/Scripts/Palette/PaletteContainer.gd +++ b/Scripts/Palette/PaletteContainer.gd @@ -2,6 +2,7 @@ extends GridContainer const palette_button = preload("res://Prefabs/PaletteButton.tscn") + var palettes_path := "Palettes" var current_palette = "Default" var from_palette : Palette @@ -154,9 +155,16 @@ func on_color_select(index : int) -> void: Global.update_right_custom_brush() func _load_palettes() -> void: + # These are the paths for looking for palettes. + + # The user path for palettes. + # this directory is created if it does not exist. + var user_palette_directory := Global.directory_module.get_palette_write_path() + palettes_path = Global.root_directory.plus_file("Palettes") var dir := Directory.new() dir.open(Global.root_directory) + if not dir.dir_exists(palettes_path): dir.make_dir(palettes_path) @@ -194,6 +202,7 @@ func get_palette_files(path : String) -> Array: func save_palette(palette_name : String, filename : String) -> void: var palette = Global.palettes[palette_name] + var palettes_write_path:= Global.directory_module.get_palette_write_path() palette.save_to_file(palettes_path.plus_file(filename)) diff --git a/Scripts/XDGDataPaths.gd b/Scripts/XDGDataPaths.gd index 2b206fe9b..308940256 100644 --- a/Scripts/XDGDataPaths.gd +++ b/Scripts/XDGDataPaths.gd @@ -9,6 +9,9 @@ const default_xdg_data_dirs := ["/usr/local/share", "/usr/share"] const config_subdir_name := "pixelorama" +const palettes_data_subdirectory := "Palettes" +const brushes_data_subdirectory := "Brushes" + # Declare member variables here. Examples: # var a = 2 # var b = "text" @@ -17,11 +20,73 @@ const config_subdir_name := "pixelorama" # Called when the node enters the scene tree for the first time. func _ready(): if OS.has_feature("X11"): - xdg_data_home = OS.get_environment("HOME").plus_file(default_xdg_data_home_rel) + var home := OS.get_environment("HOME") + xdg_data_home = home.plus_file( + default_xdg_data_home_rel + ).plus_file( + config_subdir_name + ) + # Create defaults + xdg_data_dirs = [] + for default_loc in default_xdg_data_dirs: + xdg_data_dirs.append( + default_loc.plus_file(config_subdir_name) + ) + + # Now check the XDG environment variables and if + # present, replace the defaults with them! + # See: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + # Checks the xdg data home var + if OS.has_environment("XDG_DATA_HOME"): + xdg_data_home = OS.get_environment("XDG_DATA_HOME").plus_file(config_subdir_name) + # Checks the list of files var, and processes them. + if OS.has_environment("XDG_DATA_DIRS"): + var raw_env_var := OS.get_environment("XDG_DATA_DIRS") + # includes empties. + var unappended_subdirs := raw_env_var.split(":", true) + xdg_data_dirs = [] + for unapp_subdir in unappended_subdirs: + xdg_data_dirs.append(unapp_subdir.plus_file(config_subdir_name)) + + else: + xdg_data_home = Global.root_directory + xdg_data_dirs = [] +func append_file_to_all(basepaths: Array, subpath: String) -> Array: + var res := [] + for _path in basepaths: + res.append(_path.plus_file(subpath)) + return res + + +# Get search paths in order of priority +func get_search_paths_in_order() -> Array: + return [xdg_data_home] + xdg_data_dirs + +# Gets the paths, in order of search priority, for palettes. +func get_palette_search_path_in_order() -> Array: + var base_paths := get_search_paths_in_order() + return append_file_to_all(base_paths, palettes_data_subdirectory) + +# Gets the paths, in order of search priority, for brushes. +func get_brushes_search_path_in_order() -> Array: + var base_paths := get_search_paths_in_order() + return append_file_to_all(base_paths, brushes_data_subdirectory) + + +# Get the path that we are ok to be writing palettes to: +func get_palette_write_path() -> String: + return xdg_data_home.plus_file(palettes_data_subdirectory) + +# Get the path that we are ok to be writing brushes to: +func get_brushes_write_path() -> String: + return xdg_data_home.plus_file(brushes_data_subdirectory) + + + # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): # pass