diff --git a/packages/core/ui/core/view/index.d.ts b/packages/core/ui/core/view/index.d.ts index 7186aaeb6b..fde013be7c 100644 --- a/packages/core/ui/core/view/index.d.ts +++ b/packages/core/ui/core/view/index.d.ts @@ -587,8 +587,6 @@ export abstract class View extends ViewCommon { */ scaleY: number; - //END Style property shortcuts - /** * Gets or sets the X component of the origin point around which the view will be transformed. The default value is 0.5 representing the center of the view. * @@ -603,6 +601,8 @@ export abstract class View extends ViewCommon { */ originY: number; + //END Style property shortcuts + /** * The flex-flow Shorthand property specifies the direction of a flex container, as well as its wrapping behavior. * @nsProperty diff --git a/packages/core/ui/core/view/view-common.ts b/packages/core/ui/core/view/view-common.ts index 1bb2b50fe5..551078499f 100644 --- a/packages/core/ui/core/view/view-common.ts +++ b/packages/core/ui/core/view/view-common.ts @@ -871,6 +871,20 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition { this.style.translateY = value; } + get originX(): number { + return this.style.originX; + } + set originX(value: number) { + this.style.originX = value; + } + + get originY(): number { + return this.style.originY; + } + set originY(value: number) { + this.style.originY = value; + } + get scaleX(): number { return this.style.scaleX; } @@ -979,8 +993,6 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition { //END Style property shortcuts - public originX: number; - public originY: number; public isEnabled: boolean; public isUserInteractionEnabled: boolean; public iosOverflowSafeArea: boolean; @@ -1256,20 +1268,6 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition { } } -export const originXProperty = new Property({ - name: 'originX', - defaultValue: 0.5, - valueConverter: (v) => parseFloat(v), -}); -originXProperty.register(ViewCommon); - -export const originYProperty = new Property({ - name: 'originY', - defaultValue: 0.5, - valueConverter: (v) => parseFloat(v), -}); -originYProperty.register(ViewCommon); - export const isEnabledProperty = new Property({ name: 'isEnabled', defaultValue: true, diff --git a/packages/core/ui/styling/style-properties.ts b/packages/core/ui/styling/style-properties.ts index 4326e41107..f9e9d45e78 100644 --- a/packages/core/ui/styling/style-properties.ts +++ b/packages/core/ui/styling/style-properties.ts @@ -639,6 +639,22 @@ export const perspectiveProperty = new CssAnimationProperty({ }); perspectiveProperty.register(Style); +export const originXProperty = new CssProperty({ + name: 'originX', + cssName: 'origin-x', + defaultValue: 0.5, + valueConverter: parseFloat, +}); +originXProperty.register(Style); + +export const originYProperty = new CssProperty({ + name: 'originY', + cssName: 'origin-y', + defaultValue: 0.5, + valueConverter: parseFloat, +}); +originYProperty.register(Style); + export const scaleXProperty = new CssAnimationProperty({ name: 'scaleX', cssName: 'scaleX', @@ -673,6 +689,25 @@ export const translateYProperty = new CssAnimationProperty({ + name: 'transformOrigin', + cssName: 'transform-origin', + + getter(this: Style) { + return `${this.originX} ${this.originY}`; + }, + + converter(value: string) { + const [x, y] = value.trim().split(/\s+/).map(parseFloat); + return [ + [originXProperty, isNaN(x) ? 0.5 : x], + [originYProperty, isNaN(y) ? 0.5 : y], + ]; + }, +}); + +transformOriginProperty.register(Style); + const transformProperty = new ShorthandProperty({ name: 'transform', cssName: 'transform', diff --git a/packages/core/ui/styling/style/index.ts b/packages/core/ui/styling/style/index.ts index 8002a42861..55ab383add 100644 --- a/packages/core/ui/styling/style/index.ts +++ b/packages/core/ui/styling/style/index.ts @@ -112,6 +112,9 @@ export class Style extends Observable { public fontScaleInternal: number; public backgroundInternal: Background; + public originX: number; + public originY: number; + public rotate: number; public rotateX: number; public rotateY: number;