1- import dependencyObservable = require ( "ui/core/dependency-observable" ) ;
1+ import { Property , PropertyMetadataSettings , PropertyChangeData } from "ui/core/dependency-observable" ;
22import view = require( "ui/core/view" ) ;
33import definition = require( "ui/button" ) ;
44import proxy = require( "ui/core/proxy" ) ;
55import formattedString = require( "text/formatted-string" ) ;
66import observable = require( "data/observable" ) ;
77import * as weakEventListenerModule from "ui/core/weak-event-listener" ;
8- import * as enumsModule from "ui/enums" ;
8+ import { WhiteSpace } from "ui/enums" ;
9+
10+ import { isAndroid } from "platform" ;
11+
12+ // on Android we explicitly set propertySettings to None because android will invalidate its layout (skip unnecessary native call).
13+ let AffectsLayout = isAndroid ? PropertyMetadataSettings . None : PropertyMetadataSettings . AffectsLayout ;
914
1015var weakEvents : typeof weakEventListenerModule ;
1116function ensureWeakEvents ( ) {
@@ -14,35 +19,20 @@ function ensureWeakEvents() {
1419 }
1520}
1621
17- var enums : typeof enumsModule ;
18- function ensureEnums ( ) {
19- if ( ! enums ) {
20- enums = require ( "ui/enums" ) ;
21- }
22- }
23-
24- var textProperty = new dependencyObservable . Property (
25- "text" ,
26- "Button" ,
27- new proxy . PropertyMetadata ( "" , dependencyObservable . PropertyMetadataSettings . AffectsLayout )
28- ) ;
29-
30- var formattedTextProperty = new dependencyObservable . Property (
31- "formattedText" ,
32- "Button" ,
33- new proxy . PropertyMetadata ( "" , dependencyObservable . PropertyMetadataSettings . AffectsLayout )
34- ) ;
22+ const textProperty = new Property ( "text" , "Button" , new proxy . PropertyMetadata ( "" , AffectsLayout ) ) ;
23+ const formattedTextProperty = new Property ( "formattedText" , "Button" , new proxy . PropertyMetadata ( "" , AffectsLayout ) ) ;
24+ const textWrapProperty = new Property ( "textWrap" , "Button" , new proxy . PropertyMetadata ( false , AffectsLayout ) ) ;
3525
36- function onTextPropertyChanged ( data : dependencyObservable . PropertyChangeData ) {
26+ function onTextPropertyChanged ( data : PropertyChangeData ) {
3727 var button = < Button > data . object ;
38-
28+
3929 button . _onTextPropertyChanged ( data ) ;
4030
4131 button . style . _updateTextDecoration ( ) ;
42- button . style . _updateTextTransform ( ) ;
32+ button . style . _updateTextTransform ( ) ;
4333}
4434
45- function onFormattedTextPropertyChanged ( data : dependencyObservable . PropertyChangeData ) {
35+ function onFormattedTextPropertyChanged ( data : PropertyChangeData ) {
4636 var button = < Button > data . object ;
4737 button . _onFormattedTextPropertyChanged ( data ) ;
4838}
@@ -55,12 +45,7 @@ export class Button extends view.View implements definition.Button {
5545 public static tapEvent = "tap" ;
5646 public static textProperty = textProperty ;
5747 public static formattedTextProperty = formattedTextProperty ;
58-
59- public static textWrapProperty = new dependencyObservable . Property (
60- "textWrap" ,
61- "Button" ,
62- new proxy . PropertyMetadata ( false , dependencyObservable . PropertyMetadataSettings . AffectsLayout )
63- ) ;
48+ public static textWrapProperty = textWrapProperty ;
6449
6550 public _onBindingContextChanged ( oldValue : any , newValue : any ) {
6651 super . _onBindingContextChanged ( oldValue , newValue ) ;
@@ -105,22 +90,29 @@ export class Button extends view.View implements definition.Button {
10590 this . _setValue ( Button . textWrapProperty , value ) ;
10691 }
10792
93+ get whiteSpace ( ) : string {
94+ return this . style . whiteSpace ;
95+ }
96+ set whiteSpace ( value : string ) {
97+ this . style . whiteSpace = value ;
98+ }
99+
108100 private onFormattedTextChanged ( eventData : observable . PropertyChangeData ) {
109101 var value = < formattedString . FormattedString > eventData . value ;
110102 this . _setFormattedTextPropertyToNative ( value ) ;
111103
112104 this . _onPropertyChangedFromNative ( Button . textProperty , value . toString ( ) ) ;
113105 }
114106
115- public _onTextPropertyChanged ( data : dependencyObservable . PropertyChangeData ) {
107+ public _onTextPropertyChanged ( data : PropertyChangeData ) {
116108 //
117109 }
118110
119111 public _setFormattedTextPropertyToNative ( value ) {
120112 //
121113 }
122114
123- public _onFormattedTextPropertyChanged ( data : dependencyObservable . PropertyChangeData ) {
115+ public _onFormattedTextPropertyChanged ( data : PropertyChangeData ) {
124116 var newValue = < formattedString . FormattedString > data . newValue ;
125117 if ( newValue ) {
126118 newValue . parent = this ;
@@ -136,11 +128,9 @@ export class Button extends view.View implements definition.Button {
136128 }
137129}
138130
139- function onTextWrapPropertyChanged ( data : dependencyObservable . PropertyChangeData ) {
131+ function onTextWrapPropertyChanged ( data : PropertyChangeData ) {
140132 var v = < view . View > data . object ;
141- ensureEnums ( ) ;
142-
143- v . style . whiteSpace = data . newValue ? enums . WhiteSpace . normal : enums . WhiteSpace . nowrap ;
133+ v . style . whiteSpace = data . newValue ? WhiteSpace . normal : WhiteSpace . nowrap ;
144134}
145135
146136( < proxy . PropertyMetadata > Button . textWrapProperty . metadata ) . onSetNativeValue = onTextWrapPropertyChanged ;
0 commit comments