neft
Version:
Universal Platform
156 lines (126 loc) • 4.79 kB
text/coffeescript
# Font
'use strict'
assert = require 'src/assert'
utils = require 'src/utils'
log = require 'src/log'
log = log.scope 'Renderer', 'Font'
module.exports = (Renderer, Impl, itemUtils) -> (ctor) -> class Font extends itemUtils.DeepObject
= 'Font'
itemUtils.defineProperty
constructor: ctor
name: 'font'
defaultValue: null
valueConstructor: Font
developmentSetter: (val) ->
if val?
assert.isObject val
setter: (_super) -> (val) ->
_super.call @, val
if utils.isObject(val)
{font} = @
font.family = val.family if val.family?
font.pixelSize = val.pixelSize if val.pixelSize?
font.weight = val.weight if val.weight?
font.wordSpacing = val.wordSpacing if val.wordSpacing?
font.letterSpacing = val.letterSpacing if val.letterSpacing?
font.italic = val.italic if val.italic?
return
constructor: (ref) ->
super ref
= 'sans-serif'
= 14
= 0.4
= 0
= 0
= false
Object.preventExtensions @
setFontFamilyImpl = Impl["set#{ctor.__name__}FontFamily"]
reloadFontFamily = (font) ->
name = Renderer.FontLoader.getInternalFontName font._family, font._weight, font._italic
name ||= 'sans-serif'
setFontFamilyImpl.call font._ref, name
## *String* Font.family = `'sans-serif'`
## *Signal* Font.onFamilyChange(*String* oldValue)
`//<development>`
checkingFamily = {}
`//</development>`
itemUtils.defineProperty
constructor: @
name: 'family'
defaultValue: 'sans-serif'
namespace: 'font'
parentConstructor: ctor
developmentSetter: (val) ->
assert.isString val
setter: (_super) -> (val) ->
_super.call @, val
reloadFontFamily @
## *Float* Font.pixelSize = `14`
## *Signal* Font.onPixelSizeChange(*String* oldValue)
itemUtils.defineProperty
constructor: @
name: 'pixelSize'
defaultValue: 14
namespace: 'font'
parentConstructor: ctor
implementation: Impl["set#{ctor.__name__}FontPixelSize"]
developmentSetter: (val) ->
assert.isFloat val
## *Float* Font.weight = `0.4`
In range from 0 to 1.
## *Signal* Font.onWeightChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'weight'
defaultValue: 0.4
namespace: 'font'
parentConstructor: ctor
developmentSetter: (val) ->
assert.isFloat val
assert.operator val, '>=', 0
assert.operator val, '<=', 1
setter: (_super) -> (val) ->
_super.call @, val
reloadFontFamily @
## Hidden *Float* Font.wordSpacing = `0`
## Hidden *Signal* Font.onWordSpacingChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'wordSpacing'
defaultValue: 0
namespace: 'font'
parentConstructor: ctor
implementation: Impl["set#{ctor.__name__}FontWordSpacing"]
developmentSetter: (val) ->
assert.isFloat val
## Hidden *Float* Font.letterSpacing = `0`
## Hidden *Signal* Font.onLetterSpacingChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'letterSpacing'
defaultValue: 0
namespace: 'font'
parentConstructor: ctor
implementation: Impl["set#{ctor.__name__}FontLetterSpacing"]
developmentSetter: (val) ->
assert.isFloat val
## *Boolean* Font.italic = `false`
## *Signal* Font.onItalicChange(*Boolean* oldValue)
itemUtils.defineProperty
constructor: @
name: 'italic'
defaultValue: false
namespace: 'font'
parentConstructor: ctor
developmentSetter: (val) ->
assert.isBoolean val
setter: (_super) -> (val) ->
_super.call @, val
reloadFontFamily @
toJSON: ->
family:
pixelSize:
weight:
wordSpacing:
letterSpacing:
italic: