neft
Version:
Universal Platform
169 lines (136 loc) • 3.9 kB
text/coffeescript
'use strict'
utils = require 'src/utils'
signal = require 'src/signal'
PIXI = require '../pixi.lib.js'
isTouch = 'ontouchstart' of window
module.exports = (impl) ->
cssUtils = require '../../css/utils'
if utils.isEmpty PIXI
return require('../../base/level0/item') impl
{round} = Math
updateMask = (item) ->
data = item._impl
{elem} = data
{mask} = elem
mask.clear()
mask.beginFill()
mask.drawRect 0, 0, data.width, data.height
mask.endFill()
return
DATA = utils.merge
bindings: null
anchors: null
elem: null
linkUri: ''
linkUriListens: false
x: 0
y: 0
width: 0
height: 0
scale: 1
, impl.pointer.DATA
DATA: DATA
createData: impl.utils.createDataCloner DATA
create: (data) ->
elem = data.elem = new PIXI.Container
elem._data = data
elem.z = 0
return
setItemParent: (val) ->
item = .elem
parent = val?._impl.elem
item.parent?.removeChild item
if parent
parent.addChild item
impl._dirty = true
return
setItemBackground: (val) ->
if ?._impl.elem.parent is .elem
.elem.removeChild ._impl.elem
if val
.elem.addChildAt val._impl.elem, 0
impl._dirty = true
return
setItemVisible: (val) ->
.elem.visible = val
impl._dirty = true
return
setItemClip: (val) ->
{elem} =
if val
# add mask
mask = new PIXI.Graphics
elem.mask = mask
updateMask @
elem.addChild mask
else
# remove mask
elem.removeChild elem.mask
elem.mask = null
return
setItemWidth: (val) ->
{elem} =
.width = val
.contentElem?.width = val
if elem.mask?
updateMask @
impl._dirty = true
return
setItemHeight: (val) ->
{elem} =
.height = val
.contentElem?.height = val
if elem.mask?
updateMask @
impl._dirty = true
return
setItemX: (val) ->
.x = val
impl._dirty = true
return
setItemY: (val) ->
.y = val
impl._dirty = true
return
setItemScale: (val) ->
.scale = val
impl._dirty = true
setItemRotation: (val) ->
.elem.rotation = val
impl._dirty = true
setItemOpacity: (val) ->
.elem.alpha = val
impl._dirty = true
setItemLinkUri: do ->
hoverElements = 0
onClick = (event) ->
{linkUri} =
if linkUri
if ///^([a-z]+:)///.test linkUri
window.location.href = linkUri
else
impl.Renderer.onLinkUri.emit linkUri
else
event.stopPropagation = false
return
onEnter = ->
if .linkUri
if hoverElements++ is 0
document.body.style.cursor = 'pointer'
return
onExit = ->
if --hoverElements is 0
document.body.style.cursor = 'default'
return
(val) ->
.linkUri = val
unless .linkUriListens
.linkUriListens = true
.onClick onClick, @
.onEnter onEnter, @
.onExit onExit, @
return
attachItemSignal: (ns, signalName) ->
if ns is 'pointer'
impl.pointer.attachItemSignal.call @, signalName
return