mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-19 09:39:48 +00:00
c6b9a1fb82
* gdformat . * Lint code - Part 1 * Format code - Part 2 * Lint code - Part 2 Trying to fix the max allowed line length errors * Add normal_map_invert_y to the image .import files Because of Godot 3.4 * Do not call private methods outside of the script's scope Lint code - Part 3 * Format code - Part 3 * Fixed more line length exceeded errors - Lint code Part 3 * Export array of licenses - Lint code part 4 * Clean hint_tooltip code from Global Removes a lot of lines of code * Create static-checks.yml * Fix FreeType's license
219 lines
7.4 KiB
GDScript
219 lines
7.4 KiB
GDScript
class_name PalettePanel
|
|
extends PanelContainer
|
|
|
|
var palettes_path_id := {}
|
|
var palettes_id_path := {}
|
|
|
|
var edited_swatch_index = -1
|
|
|
|
onready var palette_select := $PaletteVBoxContainer/PaletteButtons/PaletteSelect
|
|
onready var add_palette_button := $PaletteVBoxContainer/PaletteButtons/AddPalette
|
|
onready var palette_grid := find_node("PaletteGrid")
|
|
onready var palette_scroll := $PaletteVBoxContainer/SwatchesContainer/PaletteScroll
|
|
|
|
onready var add_color_button := $PaletteVBoxContainer/SwatchesContainer/ColorButtons/AddColor
|
|
onready var delete_color_button := $PaletteVBoxContainer/SwatchesContainer/ColorButtons/DeleteColor
|
|
|
|
onready var edit_palette_dialog := $EditPaletteDialog
|
|
onready var create_palette_dialog := $CreatePaletteDialog
|
|
|
|
# Color picker button itself is hidden but it's popup is used to edit color swatches
|
|
onready var hidden_color_picker := $HiddenColorPickerButton
|
|
|
|
|
|
func _ready() -> void:
|
|
Tools.connect("color_changed", self, "_color_changed")
|
|
|
|
setup_palettes_selector()
|
|
redraw_current_palette()
|
|
|
|
# Hide presets from color picker
|
|
hidden_color_picker.get_picker().presets_visible = false
|
|
|
|
|
|
# Setup palettes selector with available palettes
|
|
func setup_palettes_selector() -> void:
|
|
# Clear selector
|
|
palettes_path_id.clear()
|
|
palettes_id_path.clear()
|
|
palette_select.clear()
|
|
|
|
var id := 0
|
|
for palette_path in Palettes.get_palettes():
|
|
# Add palette selector item
|
|
palette_select.add_item(Palettes.get_palettes()[palette_path].name, id)
|
|
|
|
# Map palette paths to item id's and otherwise
|
|
palettes_path_id[palette_path] = id
|
|
palettes_id_path[id] = palette_path
|
|
id += 1
|
|
|
|
|
|
func select_palette(palette_path: String) -> void:
|
|
var palette_id = palettes_path_id.get(palette_path)
|
|
if palette_id != null:
|
|
palette_select.selected = palette_id
|
|
Palettes.select_palette(palette_path)
|
|
palette_grid.display_palette(Palettes.get_current_palette())
|
|
palette_scroll.set_sliders(Palettes.get_current_palette(), palette_grid.grid_window_origin)
|
|
|
|
var left_selected = Palettes.current_palette_get_selected_color_index(BUTTON_LEFT)
|
|
var right_selected = Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT)
|
|
palette_grid.select_swatch(BUTTON_LEFT, left_selected, left_selected)
|
|
palette_grid.select_swatch(BUTTON_RIGHT, right_selected, right_selected)
|
|
|
|
toggle_add_delete_buttons()
|
|
|
|
|
|
# Has to be called on every Pixelorama theme change
|
|
func reset_empty_palette_swatches_color() -> void:
|
|
palette_grid.reset_empty_swatches_color()
|
|
|
|
|
|
func redraw_current_palette() -> void:
|
|
# Select and display current palette
|
|
var current_palette = Palettes.get_current_palette()
|
|
if current_palette:
|
|
select_palette(current_palette.resource_path)
|
|
add_color_button.show()
|
|
delete_color_button.show()
|
|
else:
|
|
palette_grid.clear_swatches()
|
|
add_color_button.hide()
|
|
delete_color_button.hide()
|
|
|
|
|
|
func toggle_add_delete_buttons() -> void:
|
|
add_color_button.disabled = Palettes.current_palette_is_full()
|
|
if add_color_button.disabled:
|
|
add_color_button.mouse_default_cursor_shape = CURSOR_FORBIDDEN
|
|
else:
|
|
add_color_button.mouse_default_cursor_shape = CURSOR_POINTING_HAND
|
|
delete_color_button.disabled = Palettes.current_palette_is_empty()
|
|
if delete_color_button.disabled:
|
|
delete_color_button.mouse_default_cursor_shape = CURSOR_FORBIDDEN
|
|
else:
|
|
delete_color_button.mouse_default_cursor_shape = CURSOR_POINTING_HAND
|
|
|
|
|
|
func _on_AddPalette_pressed() -> void:
|
|
create_palette_dialog.open(Palettes.current_palette)
|
|
|
|
|
|
func _on_EditPalette_pressed() -> void:
|
|
edit_palette_dialog.open(Palettes.current_palette)
|
|
|
|
|
|
func _on_PaletteSelect_item_selected(index: int) -> void:
|
|
select_palette(palettes_id_path.get(index))
|
|
|
|
|
|
func _on_AddColor_gui_input(event: InputEvent) -> void:
|
|
if Palettes.is_any_palette_selected():
|
|
if (
|
|
event is InputEventMouseButton
|
|
and event.pressed
|
|
and (event.button_index == BUTTON_LEFT or event.button_index == BUTTON_RIGHT)
|
|
):
|
|
# Gets the grid index that corresponds to the top left of current grid window
|
|
# Color will be added at the start of the currently scrolled part of palette
|
|
# - not the absolute beginning of palette
|
|
var start_index = palette_grid.convert_grid_index_to_palette_index(0)
|
|
Palettes.current_palette_add_color(event.button_index, start_index)
|
|
redraw_current_palette()
|
|
toggle_add_delete_buttons()
|
|
|
|
|
|
func _on_DeleteColor_gui_input(event: InputEvent) -> void:
|
|
if Palettes.is_any_palette_selected():
|
|
if event is InputEventMouseButton and event.pressed:
|
|
var selected_color_index = Palettes.current_palette_get_selected_color_index(
|
|
event.button_index
|
|
)
|
|
|
|
if selected_color_index != -1:
|
|
Palettes.current_palette_delete_color(selected_color_index)
|
|
redraw_current_palette()
|
|
toggle_add_delete_buttons()
|
|
|
|
|
|
func _on_CreatePaletteDialog_saved(
|
|
preset: int,
|
|
name: String,
|
|
comment: String,
|
|
width: int,
|
|
height: int,
|
|
add_alpha_colors: bool,
|
|
colors_from: int
|
|
) -> void:
|
|
Palettes.create_new_palette(preset, name, comment, width, height, add_alpha_colors, colors_from)
|
|
setup_palettes_selector()
|
|
redraw_current_palette()
|
|
|
|
|
|
func _on_EditPaletteDialog_saved(name: String, comment: String, width: int, height: int) -> void:
|
|
Palettes.current_palette_edit(name, comment, width, height)
|
|
setup_palettes_selector()
|
|
redraw_current_palette()
|
|
|
|
|
|
func _on_PaletteGrid_swatch_double_clicked(_mb: int, index: int, click_position: Vector2) -> void:
|
|
var color = Palettes.current_palette_get_color(index)
|
|
edited_swatch_index = index
|
|
hidden_color_picker.color = color
|
|
|
|
# Open color picker popup with it's right bottom corner next to swatch
|
|
var popup = hidden_color_picker.get_popup()
|
|
popup.rect_position = click_position - popup.rect_size
|
|
popup.popup()
|
|
|
|
|
|
func _on_PaletteGrid_swatch_dropped(source_index: int, target_index: int) -> void:
|
|
if Input.is_key_pressed(KEY_SHIFT):
|
|
Palettes.current_palette_insert_color(source_index, target_index)
|
|
elif Input.is_key_pressed(KEY_CONTROL):
|
|
Palettes.current_palette_copy_colors(source_index, target_index)
|
|
else:
|
|
Palettes.current_palette_swap_colors(source_index, target_index)
|
|
|
|
redraw_current_palette()
|
|
|
|
|
|
func _on_PaletteGrid_swatch_pressed(mouse_button: int, index: int) -> void:
|
|
# Gets previously selected color index
|
|
var old_index = Palettes.current_palette_get_selected_color_index(mouse_button)
|
|
Palettes.current_palette_select_color(mouse_button, index)
|
|
palette_grid.select_swatch(mouse_button, index, old_index)
|
|
|
|
|
|
func _on_ColorPicker_color_changed(color: Color) -> void:
|
|
if edited_swatch_index != -1:
|
|
Palettes.current_palette_set_color(edited_swatch_index, color)
|
|
palette_grid.set_swatch_color(edited_swatch_index, color)
|
|
|
|
if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_LEFT):
|
|
Tools.assign_color(color, BUTTON_LEFT)
|
|
if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT):
|
|
Tools.assign_color(color, BUTTON_RIGHT)
|
|
|
|
|
|
func _on_EditPaletteDialog_deleted() -> void:
|
|
Palettes.current_palete_delete()
|
|
setup_palettes_selector()
|
|
redraw_current_palette()
|
|
|
|
|
|
func _color_changed(_color: Color, button: int) -> void:
|
|
if hidden_color_picker.get_popup().visible == false and Palettes.get_current_palette():
|
|
# Unselect swatches when tools color is changed
|
|
var swatch_to_unselect = -1
|
|
|
|
if button == BUTTON_LEFT:
|
|
swatch_to_unselect = Palettes.left_selected_color
|
|
Palettes.left_selected_color = -1
|
|
elif button == BUTTON_RIGHT:
|
|
swatch_to_unselect = Palettes.right_selected_color
|
|
Palettes.right_selected_color = -1
|
|
|
|
palette_grid.unselect_swatch(button, swatch_to_unselect)
|