Skip to content

Commit 3624df8

Browse files
committed
feat: padding support
1 parent 82a2cbd commit 3624df8

File tree

3 files changed

+122
-2
lines changed

3 files changed

+122
-2
lines changed

src/ui-pager/index.android.ts

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1-
import { ChangeType, ContentView, Device, KeyedTemplate, Property, ProxyViewContainer, StackLayout, Utils, View, ViewBase } from '@nativescript/core';
1+
import {
2+
ChangeType,
3+
ContentView,
4+
CoreTypes,
5+
Device,
6+
KeyedTemplate,
7+
Property,
8+
ProxyViewContainer,
9+
Utils,
10+
View,
11+
ViewBase,
12+
paddingBottomProperty,
13+
paddingLeftProperty,
14+
paddingRightProperty,
15+
paddingTopProperty
16+
} from '@nativescript/core';
217
import { isString } from '@nativescript/core/utils/types';
318
import {
419
ItemEventData,
@@ -311,6 +326,47 @@ export class Pager extends PagerBase {
311326
this.setObservableArrayInstance(value);
312327
}
313328

329+
private _setPadding(newPadding: { top?: number; right?: number; bottom?: number; left?: number }) {
330+
const nativeView = this.nativeViewProtected;
331+
const padding = {
332+
top: nativeView.getPaddingTop(),
333+
right: nativeView.getPaddingRight(),
334+
bottom: nativeView.getPaddingBottom(),
335+
left: nativeView.getPaddingLeft()
336+
};
337+
// tslint:disable-next-line:prefer-object-spread
338+
const newValue = Object.assign(padding, newPadding);
339+
nativeView.setClipToPadding(false);
340+
nativeView.setPadding(newValue.left, newValue.top, newValue.right, newValue.bottom);
341+
}
342+
[paddingTopProperty.getDefault](): CoreTypes.LengthType {
343+
return { value: this._defaultPaddingTop, unit: 'px' };
344+
}
345+
[paddingTopProperty.setNative](value: CoreTypes.LengthType) {
346+
this._setPadding({ top: this.effectivePaddingTop });
347+
}
348+
349+
[paddingRightProperty.getDefault](): CoreTypes.LengthType {
350+
return { value: this._defaultPaddingRight, unit: 'px' };
351+
}
352+
[paddingRightProperty.setNative](value: CoreTypes.LengthType) {
353+
this._setPadding({ right: this.effectivePaddingRight });
354+
}
355+
356+
[paddingBottomProperty.getDefault](): CoreTypes.LengthType {
357+
return { value: this._defaultPaddingBottom, unit: 'px' };
358+
}
359+
[paddingBottomProperty.setNative](value: CoreTypes.LengthType) {
360+
this._setPadding({ bottom: this.effectivePaddingBottom });
361+
}
362+
363+
[paddingLeftProperty.getDefault](): CoreTypes.LengthType {
364+
return { value: this._defaultPaddingLeft, unit: 'px' };
365+
}
366+
[paddingLeftProperty.setNative](value: CoreTypes.LengthType) {
367+
this._setPadding({ left: this.effectivePaddingLeft });
368+
}
369+
314370
private _updateScrollPosition() {
315371
const index = this.circularMode ? this.selectedIndex + 1 : this.selectedIndex;
316372
const nativeView = this.nativeViewProtected;

src/ui-pager/index.common.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,41 @@ export abstract class PagerBase extends View implements AddChildFromBuilder {
110110

111111
protected mObservableArrayInstance: ObservableArray<any>;
112112

113+
get padding(): string | CoreTypes.LengthType {
114+
return this.style.padding;
115+
}
116+
set padding(value: string | CoreTypes.LengthType) {
117+
this.style.padding = value;
118+
}
119+
120+
get paddingTop(): CoreTypes.LengthType {
121+
return this.style.paddingTop;
122+
}
123+
set paddingTop(value: CoreTypes.LengthType) {
124+
this.style.paddingTop = value;
125+
}
126+
127+
get paddingRight(): CoreTypes.LengthType {
128+
return this.style.paddingRight;
129+
}
130+
set paddingRight(value: CoreTypes.LengthType) {
131+
this.style.paddingRight = value;
132+
}
133+
134+
get paddingBottom(): CoreTypes.LengthType {
135+
return this.style.paddingBottom;
136+
}
137+
set paddingBottom(value: CoreTypes.LengthType) {
138+
this.style.paddingBottom = value;
139+
}
140+
141+
get paddingLeft(): CoreTypes.LengthType {
142+
return this.style.paddingLeft;
143+
}
144+
set paddingLeft(value: CoreTypes.LengthType) {
145+
this.style.paddingLeft = value;
146+
}
147+
113148
abstract refresh(): void;
114149

115150
public static registerTransformer(key: string, transformer) {

src/ui-pager/index.ios.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { ChangeType, EventData, KeyedTemplate, Observable, Property, ProxyViewContainer, StackLayout, Utils, View, ViewBase, profile } from '@nativescript/core';
1+
import { ChangeType, CoreTypes, EventData, KeyedTemplate, Observable, Property, ProxyViewContainer, StackLayout, Utils, View, ViewBase, profile } from '@nativescript/core';
2+
import { paddingBottomProperty, paddingLeftProperty, paddingRightProperty, paddingTopProperty } from '@nativescript/core/ui/styling/style-properties';
23
import {
34
ItemEventData,
45
Orientation,
@@ -338,6 +339,34 @@ export class Pager extends PagerBase {
338339
}
339340
}
340341

342+
private _setPadding(newPadding: { top?: number; right?: number; bottom?: number; left?: number }) {
343+
const layout = this.nativeViewProtected;
344+
const sectionInset = layout['contentInset'];
345+
const padding = {
346+
top: sectionInset.top,
347+
right: sectionInset.right,
348+
bottom: sectionInset.bottom,
349+
left: sectionInset.left
350+
};
351+
const newValue = Object.assign(padding, newPadding);
352+
layout['contentInset'] = newValue;
353+
}
354+
[paddingTopProperty.setNative](value: CoreTypes.LengthType) {
355+
this._setPadding({ top: Utils.layout.toDeviceIndependentPixels(this.effectivePaddingTop) });
356+
}
357+
358+
[paddingRightProperty.setNative](value: CoreTypes.LengthType) {
359+
this._setPadding({ right: Utils.layout.toDeviceIndependentPixels(this.effectivePaddingRight) });
360+
}
361+
362+
[paddingBottomProperty.setNative](value: CoreTypes.LengthType) {
363+
this._setPadding({ bottom: Utils.layout.toDeviceIndependentPixels(this.effectivePaddingBottom) });
364+
}
365+
366+
[paddingLeftProperty.setNative](value: CoreTypes.LengthType) {
367+
this._setPadding({ left: Utils.layout.toDeviceIndependentPixels(this.effectivePaddingLeft) });
368+
}
369+
341370
protected _observableArrayHandler = (args) => {
342371
if (!this.nativeViewProtected) {
343372
return;

0 commit comments

Comments
 (0)