I would like to be able to drag objects between two DockWidgetPluginGuis created by the same Studio plugin. I have dragging within a window working, but it seems I don't get any events for the other window while the mouse button is still held down.
Example code:
local win1 = plugin:CreateDockWidgetPluginGui( "MouseTest_Window1", DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true) ) win1.Name = "MouseTest_Window1" win1.Title = "Mouse Test 1" local frame1 = Instance.new("Frame", win1) frame1.Size = UDim2.new(1,0,1,0) frame1.BackgroundColor3 = Color3.new(.5, .5, .5) local square = Instance.new("Frame", frame1) square.Size = UDim2.new(0,50,0,50) square.BackgroundColor3 = Color3.new(.1, 1, .1) local win2 = plugin:CreateDockWidgetPluginGui( "MouseTest_Window2", DockWidgetPluginGuiInfo.new(Enum.InitialDockState.Float, true, true) ) win2.Name = "MouseTest_Window2" win2.Title = "Mouse Test 2" local frame2 = Instance.new("Frame", win2) frame2.Size = UDim2.new(1,0,1,0) frame2.BackgroundColor3 = Color3.new(.5, .5, .5) -- nil when not currently dragging local mouseToSquare local function MoveSquare(mouseX, mouseY) print("Move", mouseX, mouseY) if mouseToSquare then square.Position = UDim2.new(0, mouseX + mouseToSquare.X, 0, mouseY + mouseToSquare.Y) end end local function OnEnterFrame(frame, x, y) print("Enter", frame.Parent.Name, x, y) if mouseToSquare then square.Parent = frame MoveSquare(x, y) square.BackgroundTransparency = 0 end end local function OnLeaveFrame() print("Leave") if mouseToSquare then -- Fade the square square.BackgroundTransparency = 0.5 end end square.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then mouseToSquare = square.AbsolutePosition - Vector2.new(input.Position.X, input.Position.Y) local event event = input.Changed:Connect(function() print("input object:", input.UserInputState, input.UserInputType) if input.UserInputState == Enum.UserInputState.End then square.BackgroundTransparency = 0 mouseToSquare = nil event:Disconnect() end end) end end) frame1.MouseEnter:Connect(function(x,y) OnEnterFrame(frame1, x, y) end) frame1.MouseMoved:Connect(MoveSquare) frame1.MouseLeave:Connect(OnLeaveFrame) frame2.MouseEnter:Connect(function(x,y) OnEnterFrame(frame2, x, y) end) frame2.MouseMoved:Connect(MoveSquare) frame2.MouseLeave:Connect(OnLeaveFrame)
The green square can be dragged around window 1, and fades if the mouse leaves that window, but I don't get any print output at all when the mouse moves into or through window 2. If I release the mouse button in window 2, I do start getting input events there, so I could "snap" the object into the window at that time, but it would be much nicer to be able to see where you're placing it.
I also tried looking at the plugin mouse from plugin:Activate(true)
and plugin:GetMouse()
, but didn't see any events from it during this sort of drag either.
Is there some way to detect a mouse drag into another window, or is this just not possible?