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 * lua engine
make possible to bind non LuaObject derived classes on lua engine (for usage with Point,Rect,Color,Size) 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 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 margin-bottom: 3
pixels-scroll: true pixels-scroll: true
$disabled: $!on:
width: 0 width: 0
ResizeBorder ResizeBorder

View File

@ -27,6 +27,48 @@ function UIMiniWindow:onDragEnter(mousePos)
return true return true
end 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() function UIMiniWindow:onMousePress()
local parent = self:getParent() local parent = self:getParent()
if not parent then return false end if not parent then return false end
@ -37,7 +79,13 @@ function UIMiniWindow:onMousePress()
end end
function UIMiniWindow:onDragLeave(droppedWidget, mousePos) 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 end
function UIMiniWindow:onFocusChange(focused) function UIMiniWindow:onFocusChange(focused)

View File

@ -9,7 +9,20 @@ end
function UIMiniWindowContainer:onDrop(widget, mousePos) function UIMiniWindowContainer:onDrop(widget, mousePos)
if widget:getClassName() == 'UIMiniWindow' then 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 return true
end end
end end