improve miniwindow moving

This commit is contained in:
Henrique Santiago 2012-06-11 02:38:08 -03:00
parent e91f822f62
commit e7334566a2
4 changed files with 65 additions and 3 deletions

1
TODO
View File

@ -76,3 +76,4 @@ terminate rework of ui events propagation (for Key events)
* lua engine
make possible to bind non LuaObject derived classes on lua engine (for usage with Point,Rect,Color,Size)
review usage of x,y/width,height in lua instead of point/size
calling UIWidget.getMarginTop(nil) makes client crashes

View File

@ -66,7 +66,7 @@ MiniWindow < UIMiniWindow
margin-bottom: 3
pixels-scroll: true
$disabled:
$!on:
width: 0
ResizeBorder

View File

@ -27,6 +27,48 @@ function UIMiniWindow:onDragEnter(mousePos)
return true
end
function UIMiniWindow:onDragMove(mousePos, mouseMoved)
local oldMousePosY = mousePos.y - mouseMoved.y
local children = rootWidget:recursiveGetChildrenByPos(mousePos)
local overAnyWidget = false
for i=1,#children do
local child = children[i]
if child:getParent():getClassName() == 'UIMiniWindowContainer' then
overAnyWidget = true
local childCenterY = child:getY() + child:getHeight() / 2
if child == self.movedWidget and mousePos.y < childCenterY and oldMousePosY < childCenterY then
break
end
if self.movedWidget then
self.widgetSetMargin(self.movedWidget, self.widgetGetMargin(self.movedWidget) - 10)
end
if mousePos.y < childCenterY then
self.widgetSetMargin = child.setMarginTop
self.widgetGetMargin = child.getMarginTop
self.movedIndex = 0
else
self.widgetSetMargin = child.setMarginBottom
self.widgetGetMargin = child.getMarginBottom
self.movedIndex = 1
end
self.widgetSetMargin(child, self.widgetGetMargin(child) + 10)
self.movedWidget = child
break
end
end
if not overAnyWidget and self.movedWidget then
self.widgetSetMargin(self.movedWidget, self.widgetGetMargin(self.movedWidget) - 10)
self.movedWidget = nil
end
return UIWindow.onDragMove(self, mousePos, mouseMoved)
end
function UIMiniWindow:onMousePress()
local parent = self:getParent()
if not parent then return false end
@ -37,7 +79,13 @@ function UIMiniWindow:onMousePress()
end
function UIMiniWindow:onDragLeave(droppedWidget, mousePos)
-- TODO: drop on other interfaces
if self.movedWidget then
self.widgetSetMargin(self.movedWidget, self.widgetGetMargin(self.movedWidget) - 10)
self.movedWidget = nil
self.widgetSetMargin = nil
self.widgetGetMargin = nil
self.movedIndex = nil
end
end
function UIMiniWindow:onFocusChange(focused)

View File

@ -9,7 +9,20 @@ end
function UIMiniWindowContainer:onDrop(widget, mousePos)
if widget:getClassName() == 'UIMiniWindow' then
widget:setParent(self)
local oldParent = widget:getParent()
if oldParent == self then
return true
end
oldParent:removeChild(widget)
if widget.movedWidget then
local index = self:getChildIndex(widget.movedWidget)
self:insertChild(index + widget.movedIndex, widget)
else
self:addChild(widget)
end
return true
end
end