forked from NativeScript/NativeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathborder-common.ts
More file actions
84 lines (69 loc) · 3.32 KB
/
border-common.ts
File metadata and controls
84 lines (69 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import definition = require("ui/border");
import color = require("color");
import proxy = require("ui/core/proxy");
import contentView = require("ui/content-view");
import dependencyObservable = require("ui/core/dependency-observable");
import types = require("utils/types");
import viewModule = require("ui/core/view");
import utils = require("utils/utils");
var cornerRadiusProperty = new dependencyObservable.Property(
"cornerRadius",
"Border",
new proxy.PropertyMetadata(0, dependencyObservable.PropertyMetadataSettings.AffectsStyle)
);
var borderWidthProperty = new dependencyObservable.Property(
"borderWidth",
"Border",
new proxy.PropertyMetadata(0, dependencyObservable.PropertyMetadataSettings.AffectsStyle)
);
var borderColorProperty = new dependencyObservable.Property(
"borderColor",
"Border",
new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.AffectsStyle)
);
export class Border extends contentView.ContentView implements definition.Border {
public static cornerRadiusProperty = cornerRadiusProperty;
public static borderWidthProperty = borderWidthProperty;
public static borderColorProperty = borderColorProperty;
get cornerRadius(): number {
return this._getValue(Border.cornerRadiusProperty);
}
set cornerRadius(value: number) {
this._setValue(Border.cornerRadiusProperty, value);
}
get borderWidth(): number {
return this._getValue(Border.borderWidthProperty);
}
set borderWidth(value: number) {
this._setValue(Border.borderWidthProperty, value);
}
get borderColor(): color.Color {
return this._getValue(Border.borderColorProperty);
}
set borderColor(value: color.Color) {
if (types.isString(value) || types.isNumber(value)) {
this._setValue(Border.borderColorProperty, new color.Color(<any>value));
} else {
this._setValue(Border.borderColorProperty, value);
}
}
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
var density = utils.layout.getDisplayDensity();
var borderSize = (2 * this.borderWidth) * density;
var result = viewModule.View.measureChild(this, this.content,
utils.layout.makeMeasureSpec(width - borderSize, widthMode),
utils.layout.makeMeasureSpec(height - borderSize, heightMode));
var widthAndState = viewModule.View.resolveSizeAndState(result.measuredWidth + borderSize, width, widthMode, 0);
var heightAndState = viewModule.View.resolveSizeAndState(result.measuredHeight + borderSize, height, heightMode, 0);
this.setMeasuredDimension(widthAndState, heightAndState);
}
public onLayout(left: number, top: number, right: number, bottom: number): void {
var density = utils.layout.getDisplayDensity();
var borderSize = this.borderWidth * density;
viewModule.View.layoutChild(this, this.content, borderSize, borderSize, right - left - borderSize, bottom - top - borderSize);
}
}