neft
Version:
Universal Platform
200 lines (158 loc) • 6.22 kB
text/coffeescript
# Text
```javascript
Text {
font.pixelSize: 30
font.family: 'monospace'
text: '<strong>Neft</strong> Renderer'
color: 'blue'
}
```
'use strict'
assert = require 'src/assert'
utils = require 'src/utils'
signal = require 'src/signal'
log = require 'src/log'
log = log.scope 'Renderer', 'Text'
module.exports = (Renderer, Impl, itemUtils) ->
class Text extends Renderer.Item
= 'Text'
= 'Renderer.Text'
=
b: true
strong: true
em: true
br: true
font: true
i: true
s: true
u: true
a: true
## *Text* Text.New([*Component* component, *Object* options])
= (component, opts) ->
item = new Text
itemUtils.Object.initialize item, component, opts
# set default font family
if name = Renderer.FontLoader.getInternalFontName('sans-serif', 0.4, false)
Impl.setTextFontFamily.call item, name
item
## *Text* Text::constructor() : *Item*
constructor: ->
super()
= ''
= 'black'
= 'blue'
= 1
= 0
= 0
= null
= null
= true
= true
= -1
= -1
## *Float* Text::width = `-1`
_width: -1
getter = utils.lookupGetter @::, 'width'
itemWidthSetter = utils.lookupSetter @::, 'width'
utils.defineProperty @::, 'width', null, getter, do (_super = itemWidthSetter) -> (val) ->
oldAutoWidth =
if = val is -1
_super.call @,
else
_super.call @, val
if or
Impl.updateTextContentSize.call @
if oldAutoWidth isnt
Impl.setTextWrap.call @, not
return
## *Float* Text::height = `-1`
_height: -1
getter = utils.lookupGetter @::, 'height'
itemHeightSetter = utils.lookupSetter @::, 'height'
utils.defineProperty @::, 'height', null, getter, do (_super = itemHeightSetter) -> (val) ->
if = val is -1
_super.call @,
Impl.updateTextContentSize.call @
else
_super.call @, val
return
## *String* Text::text
## *Signal* Text::onTextChange(*String* oldValue)
itemUtils.defineProperty
constructor: @
name: 'text'
defaultValue: ''
implementation: Impl.setText
setter: (_super) -> (val) ->
_super.call @, val+''
## *String* Text::color = `'black'`
## *Signal* Text::onColorChange(*String* oldValue)
itemUtils.defineProperty
constructor: @
name: 'color'
defaultValue: 'black'
implementation: Impl.setTextColor
implementationValue: do ->
RESOURCE_REQUEST =
property: 'color'
(val) ->
Renderer.resources?.resolve(val, RESOURCE_REQUEST) or val
developmentSetter: (val) ->
assert.isString val
## *String* Text::linkColor = `'blue'`
## *Signal* Text::onLinkColorChange(*String* oldValue)
itemUtils.defineProperty
constructor: @
name: 'linkColor'
defaultValue: 'blue'
implementation: Impl.setTextLinkColor
implementationValue: do ->
RESOURCE_REQUEST =
property: 'color'
(val) ->
Renderer.resources?.resolve(val, RESOURCE_REQUEST) or val
developmentSetter: (val) ->
assert.isString val
## Hidden *Float* Text::lineHeight = `1`
## Hidden *Signal* Text::onLineHeightChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'lineHeight'
defaultValue: 1
implementation: Impl.setTextLineHeight
developmentSetter: (val) ->
assert.isFloat val
## ReadOnly *Float* Text::contentWidth
## *Signal* Text::onContentWidthChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'contentWidth'
defaultValue: 0
developmentSetter: (val) ->
assert.isFloat val
setter: (_super) -> (val) ->
_super.call @, val
if
itemWidthSetter.call @, val
return
## ReadOnly *Float* Text::contentHeight
## *Signal* Text::onContentHeightChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'contentHeight'
defaultValue: 0
developmentSetter: (val) ->
assert.isFloat val
setter: (_super) -> (val) ->
_super.call @, val
if
itemHeightSetter.call @, val
return
## *Item.Alignment* Text::alignment
## *Signal* Text::onAlignmentChange(*String* property, *Any* oldValue)
Renderer.Item.createAlignment Text
## *Item.Text.Font* Text::font
## *Signal* Text::onFontChange(*String* property, *Any* oldValue)
= require('./text/font') Renderer, Impl, itemUtils
Text
Text