diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index fcd42a24..573f95af 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -27,6 +27,7 @@ import arm.plugin.Camera; import arm.Config; import arm.Tool; import arm.Project; +import arm.Res; using StringTools; class App { @@ -42,6 +43,9 @@ class App { public static var dragMaterial: MaterialSlot = null; public static var dragLayer: LayerSlot = null; public static var dragAsset: TAsset = null; + public static var dragFile: String = null; + public static var dragTint = 0xffffffff; + public static var dragRect: TRect = null; public static var dragOffX = 0.0; public static var dragOffY = 0.0; static var dropPaths: Array = []; @@ -314,11 +318,11 @@ class App { var mouse = Input.getMouse(); //var kb = Input.getKeyboard(); - if ((dragAsset != null || dragMaterial != null || dragLayer != null) && + if ((dragAsset != null || dragMaterial != null || dragLayer != null || dragFile != null) && (mouse.movementX != 0 || mouse.movementY != 0)) { isDragging = true; } - if (mouse.released() && (dragAsset != null || dragMaterial != null || dragLayer != null)) { + if (mouse.released() && (dragAsset != null || dragMaterial != null || dragLayer != null || dragFile != null)) { var mx = mouse.x; var my = mouse.y; var inViewport = UITrait.inst.paintVec.x < 1 && UITrait.inst.paintVec.x > 0 && @@ -377,6 +381,17 @@ class App { } dragLayer = null; } + else if (dragFile != null) { + var inBrowser = + mx > iron.App.x() && mx < iron.App.x() + (System.windowWidth() - UITrait.inst.toolbarw - UITrait.inst.windowW) && + my > System.windowHeight() - UITrait.inst.statush; + if (!inBrowser) { + dropX = mouse.x; + dropY = mouse.y; + ImportAsset.run(dragFile, dropX, dropY); + } + dragFile = null; + } isDragging = false; } @@ -414,9 +429,17 @@ class App { } static function getDragImage(): kha.Image { + dragTint = 0xffffffff; + dragRect = null; if (dragAsset != null) return UITrait.inst.getImage(dragAsset); if (dragMaterial != null) return dragMaterial.imageIcon; if (dragLayer != null && Context.layerIsMask) return dragLayer.texpaint_mask_preview; + if (dragFile != null) { + var icons = Res.get("icons.k"); + dragRect = dragFile.indexOf(".") > 0 ? Res.tile50(icons, 3, 1) : Res.tile50(icons, 2, 1); + dragTint = UITrait.inst.ui.t.HIGHLIGHT_COL; + return icons; + } else return dragLayer.texpaint_preview; } @@ -435,7 +458,11 @@ class App { #else var inv = 0; #end - g.drawScaledImage(img, mouse.x + dragOffX, mouse.y + dragOffY + inv, size, h - inv * 2); + g.color = dragTint; + dragRect == null ? + g.drawScaledImage(img, mouse.x + dragOffX, mouse.y + dragOffY + inv, size, h - inv * 2) : + g.drawScaledSubImage(img, dragRect.x, dragRect.y, dragRect.w, dragRect.h, mouse.x + dragOffX, mouse.y + dragOffY + inv, size, h - inv * 2); + g.color = 0xffffffff; } var usingMenu = false; diff --git a/Sources/arm/ui/UIFiles.hx b/Sources/arm/ui/UIFiles.hx index 56547be6..f1c584b5 100644 --- a/Sources/arm/ui/UIFiles.hx +++ b/Sources/arm/ui/UIFiles.hx @@ -121,11 +121,27 @@ class UIFiles { var off = ui._w / 2 - 25 * ui.SCALE(); ui._x += off; + var uix = ui._x; + var uiy = ui._y; var state = ui.image(icons, col, rect.h, rect.x, rect.y, rect.w, rect.h); if (state == Started) { + + if (f != "..") { + var mouse = Input.getMouse(); + App.dragOffX = -(mouse.x - uix - ui._windowX - 3); + App.dragOffY = -(mouse.y - uiy - ui._windowY + 1); + App.dragFile = handle.text; + if (App.dragFile.charAt(App.dragFile.length - 1) != Path.sep) { + App.dragFile += Path.sep; + } + App.dragFile += f; + } + selected = i; if (Time.time() - UITrait.inst.selectTime < 0.25) { + App.dragFile = null; + App.isDragging = false; handle.changed = ui.changed = true; if (f == "..") { // Up handle.text = handle.text.substring(0, handle.text.lastIndexOf(Path.sep));