From 5322dd19b264a55ab844cab042230ce825443780 Mon Sep 17 00:00:00 2001 From: hshristov Date: Mon, 3 Aug 2015 18:18:42 +0300 Subject: [PATCH] Fix Image source property to have None metadata for android - no need for layout invalidation from JS. ClipToBounds implementation added back. Optimization in style.ts to set native properties at once. Fix height of CommonLayoutParameters. --- ui/image/image-common.ts | 5 +++- ui/layouts/layout-base.ts | 17 ++++++++++--- ui/layouts/layout.ios.ts | 6 ----- ui/styling/style.ts | 46 ++++++++++++++++++++++++----------- ui/styling/stylers.android.ts | 4 +-- 5 files changed, 52 insertions(+), 26 deletions(-) diff --git a/ui/image/image-common.ts b/ui/image/image-common.ts index 096a44617..98ae93c8a 100644 --- a/ui/image/image-common.ts +++ b/ui/image/image-common.ts @@ -13,6 +13,9 @@ var IMAGE = "Image"; var ISLOADING = "isLoading"; var STRETCH = "stretch"; +// on Android we explicitly set propertySettings to None because android will invalidate its layout (skip unnecessary native call). +var AffectsLayout = global.android ? dependencyObservable.PropertyMetadataSettings.None : dependencyObservable.PropertyMetadataSettings.AffectsLayout; + function onSrcPropertyChanged(data: dependencyObservable.PropertyChangeData) { var image = data.object; var value = data.newValue; @@ -58,7 +61,7 @@ export class Image extends view.View implements definition.Image { new proxy.PropertyMetadata(false, dependencyObservable.PropertyMetadataSettings.None)); public static stretchProperty = new dependencyObservable.Property(STRETCH, IMAGE, - new proxy.PropertyMetadata(enums.Stretch.aspectFit, dependencyObservable.PropertyMetadataSettings.AffectsLayout)); + new proxy.PropertyMetadata(enums.Stretch.aspectFit, AffectsLayout)); constructor(options?: definition.Options) { super(options); diff --git a/ui/layouts/layout-base.ts b/ui/layouts/layout-base.ts index 66b29d44b..47c0587be 100644 --- a/ui/layouts/layout-base.ts +++ b/ui/layouts/layout-base.ts @@ -5,7 +5,7 @@ import proxy = require("ui/core/proxy"); export class LayoutBase extends view.CustomLayoutView implements definition.LayoutBase, view.AddChildFromBuilder { - public static clipToBoundsProperty = new dependencyObservable.Property("clipToBounds", "LayoutBase", + public static clipToBoundsProperty = new dependencyObservable.Property("clipToBounds", "LayoutBase", new proxy.PropertyMetadata(true, dependencyObservable.PropertyMetadataSettings.None, LayoutBase.onClipToBoundsPropertyChanged)); private _subViews: Array = new Array(); @@ -71,7 +71,7 @@ export class LayoutBase extends view.CustomLayoutView implements definition.Layo get padding(): string { return this.style.padding; - } + } set padding(value: string) { this.style.padding = value; } @@ -105,9 +105,20 @@ export class LayoutBase extends view.CustomLayoutView implements definition.Layo } protected onClipToBoundsChanged(oldValue: boolean, newValue: boolean) { - // + var nativeView = this._nativeView; + if (!nativeView) { + return; } + if (nativeView instanceof UIView) { + nativeView.clipsToBounds = newValue; + } + + else if (nativeView instanceof android.view.ViewGroup) { + nativeView.setClipChildren(newValue); + } + } + private static onClipToBoundsPropertyChanged(data: dependencyObservable.PropertyChangeData): void { var layout = data.object; layout.onClipToBoundsChanged(data.oldValue, data.newValue); diff --git a/ui/layouts/layout.ios.ts b/ui/layouts/layout.ios.ts index 618c4597c..34fc13a29 100644 --- a/ui/layouts/layout.ios.ts +++ b/ui/layouts/layout.ios.ts @@ -32,10 +32,4 @@ export class Layout extends layoutBase.LayoutBase implements definition.Layout { var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec); trace.write(this + " :onMeasure: " + utils.layout.getMode(widthMode) + " " + width + ", " + utils.layout.getMode(heightMode) + " " + height, trace.categories.Layout); } - - protected onClipToBoundsChanged(oldValue: boolean, newValue: boolean): void { - if (this._nativeView) { - this._nativeView.clipsToBounds = newValue; - } - } } \ No newline at end of file diff --git a/ui/styling/style.ts b/ui/styling/style.ts index afbc73cf1..dcaaef4b1 100644 --- a/ui/styling/style.ts +++ b/ui/styling/style.ts @@ -116,23 +116,35 @@ function onPaddingValueChanged(data: observable.PropertyChangeData) { function onPaddingChanged(data: observable.PropertyChangeData) { var thickness = parseThickness(data.newValue); var style =