diff --git a/public/CHANGELOG.md b/public/CHANGELOG.md index d9bd70c..e5ed1cd 100644 --- a/public/CHANGELOG.md +++ b/public/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. - Add rotate sprite to context menu - Add flip sprite to context menu - Add multi select for sprite removal +- Add drag and drop in file area when sprite is open ## [1.9.0] - 2025-12-14 - You can now share spritesheets to edit them later or share them with others diff --git a/src/components/SpriteCanvas.vue b/src/components/SpriteCanvas.vue index c34c772..215815d 100644 --- a/src/components/SpriteCanvas.vue +++ b/src/components/SpriteCanvas.vue @@ -529,23 +529,22 @@ if (pos) { const clickedSprite = findSpriteAtPosition(pos.x, pos.y); if (clickedSprite) { - // Selection logic with multi-select mode check - if (event.ctrlKey || event.metaKey || isMultiSelectMode.value) { - // Toggle selection - if (selectedSpriteIds.value.has(clickedSprite.id)) { - selectedSpriteIds.value.delete(clickedSprite.id); - } else { - selectedSpriteIds.value.add(clickedSprite.id); - } + // Selection logic with multi-select mode check + if (event.ctrlKey || event.metaKey || isMultiSelectMode.value) { + // Toggle selection + if (selectedSpriteIds.value.has(clickedSprite.id)) { + selectedSpriteIds.value.delete(clickedSprite.id); } else { - // Single select (but don't clear if dragging starts immediately? - // Usually standard behavior is to clear others unless shift/ctrl held) - if (!selectedSpriteIds.value.has(clickedSprite.id)) { - selectedSpriteIds.value.clear(); - selectedSpriteIds.value.add(clickedSprite.id); - } + selectedSpriteIds.value.add(clickedSprite.id); } - + } else { + // Single select (but don't clear if dragging starts immediately? + // Usually standard behavior is to clear others unless shift/ctrl held) + if (!selectedSpriteIds.value.has(clickedSprite.id)) { + selectedSpriteIds.value.clear(); + selectedSpriteIds.value.add(clickedSprite.id); + } + } } else { // Clicked on empty space selectedSpriteIds.value.clear(); diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 41163fe..0a61148 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -62,11 +62,19 @@ @@ -338,6 +346,7 @@ const editingLayerId = ref(null); const editingLayerName = ref(''); const layerNameInput = ref(null); + const isDragging = ref(false); const handleSpritesUpload = async (files: File[]) => { const jsonFile = files.find(file => file.type === 'application/json' || file.name.endsWith('.json')); @@ -378,6 +387,13 @@ processImageFiles(files); }; + const handleDrop = (event: DragEvent) => { + isDragging.value = false; + if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) { + handleSpritesUpload(Array.from(event.dataTransfer.files)); + } + }; + const handleJSONImport = async (jsonFile: File) => { try { await importSpritesheetJSON(jsonFile);