Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 36 additions & 10 deletions gui/gui.lua
Original file line number Diff line number Diff line change
Expand Up @@ -77,20 +77,26 @@ function _M.GUI:_calcRelValue(x, y)
return x, y
end

function _M.GUI:_createGUILayer(width, height)
function _M.GUI:_createGUILayer(width, height, screenWidth, screenHeight)
local layer = MOAILayer.new()

local viewport = MOAIViewport.new()
viewport:setSize(width, height)
if ( screenWidth and screenHeight ) then
local shiftX = ( screenWidth - width ) / 2
local shiftY = ( screenHeight - height ) / 2
viewport:setSize ( shiftX, shiftY, shiftX + width, shiftY + height )
else
viewport:setSize(width, height)
end
viewport:setScale(width, height)
viewport:setOffset(-1, 1)

layer:setViewport(viewport)



local partition = MOAIPartition.new()
layer:setPartition(partition)


self._partitionOrder = {}
self._partition = partition
self._layer = layer
self._viewport = viewport
Expand All @@ -115,6 +121,7 @@ function _M.GUI:_createProp(priority)
prop:setLoc(0, 0)
prop:setScl(1, 1)

table.insert ( self:partitionOrder ( ), prop )
self:partition():insertProp(prop)

return prop
Expand All @@ -128,6 +135,7 @@ end

function _M.GUI:_destroyProp(prop)
prop:setDeck(nil)
array.removeElement ( self:partitionOrder ( ), prop )
self:partition():removeProp(prop)
end

Expand Down Expand Up @@ -261,18 +269,36 @@ function _M.GUI:partition()
return self._partition
end

function _M.GUI:partitionOrder()
return self._partitionOrder
end

function _M.GUI:layer()
return self._layer
end

function _M.GUI:_orderedProps ( props )
local orderedProps = {}
for i = #self:partitionOrder ( ), 1, -1 do
for k, v in pairs ( props ) do
if ( v == self:partitionOrder ( ) [ i ] ) then
table.insert ( orderedProps, v )
end
end
end
return orderedProps
end

function _M.GUI:_calcInputOver(x, y)
local inputX, inputY = self._layer:wndToWorld(x, y)

local props = {self._partition:propListForPoint(inputX, inputY, 0, MOAILayer.SORT_PRIORITY_DESCENDING)}
if (nil == props or #props == 0) then return nil end

for i, v in ipairs(props) do
local win = self._propToWindow[v]
local orderedProps = self:_orderedProps ( props )

for i, v in ipairs(orderedProps) do
local win = self._propToWindow [ v ]
if (nil ~= win) then
if (true == win:getVisible()) then
return win
Expand Down Expand Up @@ -702,7 +728,7 @@ function _M.GUI:shutdown()
end
end

function _M.GUI:init(width, height)
function _M.GUI:init(width, height, screenWidth, screenHeight)
self._width = width
self._height = height

Expand All @@ -727,7 +753,7 @@ function _M.GUI:init(width, height)
self._factory = factory.Factory(self)
self._layoutParser = layoutparser.LayoutParser(self._factory)

self:_createGUILayer(width, height)
self:_createGUILayer(width, height, screenWidth, screenHeight)
end

return _M
28 changes: 25 additions & 3 deletions gui/layoutparser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,26 @@ function _M.LayoutParser:createFromData(data, prefix, parent, params)
return roots, widgets, groups
end

function _M.LayoutParser:createSortedData ( data )
local sortedData = {}
local element = nil

for k, v in pairs ( data ) do
element = v
element._name = k
table.insert ( sortedData, element )
end

function dataSort ( a, b )
local aOrder = a.order or 0
local bOrder = b.order or 0
return aOrder < bOrder
end

table.sort ( sortedData, dataSort )

return sortedData
end

function _M.LayoutParser:createFromLayout(fileName, prefix, parent, params)
local roots = {}
Expand All @@ -606,9 +626,11 @@ function _M.LayoutParser:createFromLayout(fileName, prefix, parent, params)
-- data.create(params)
-- end

for k, v in pairs(data) do
table.insert(roots, prefix .. k)
self:_parseWidgetData(fileName, prefix, parent, k, v, widgets, nil, groups)
local sortedData = self:createSortedData ( data )

for k, v in pairs(sortedData) do
table.insert(roots, prefix .. v._name)
self:_parseWidgetData(fileName, prefix, parent, v._name, v, widgets, nil, groups)
end

return roots, widgets, groups
Expand Down