Files
NativeScript/ui/layouts/absolute-layout/absolute-layout.ios.ts
Hristo Deshev 77838ae9c6 Change from "classic" TS 1.6 imports to the default resolution scheme.
- Use relative imports in place of most of our absolute ones.
- Add "private" ambient modules for modules that we need to import using
an absolute path (e.g. when app/.../test-something.ts needs to import
ui/styling/style-scope)
2015-09-29 16:25:49 +03:00

79 lines
3.2 KiB
TypeScript

import utils = require("utils/utils");
import view = require("ui/core/view");
import common = require("./absolute-layout-common");
global.moduleMerge(common, exports);
export class AbsoluteLayout extends common.AbsoluteLayout {
protected onLeftChanged(view: view.View, oldValue: number, newValue: number) {
this.requestLayout();
}
protected onTopChanged(view: view.View, oldValue: number, newValue: number) {
this.requestLayout();
}
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
var measureWidth = 0;
var measureHeight = 0;
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 childMeasureSpec = utils.layout.makeMeasureSpec(0, utils.layout.UNSPECIFIED);
var density = utils.layout.getDisplayDensity();
var count = this.getChildrenCount();
for (var i = 0; i < count; i++) {
var child = this.getChildAt(i);
if (!child || !child._isVisible) {
continue;
}
var childSize = view.View.measureChild(this, child, childMeasureSpec, childMeasureSpec);
measureWidth = Math.max(measureWidth, AbsoluteLayout.getLeft(child) * density + childSize.measuredWidth);
measureHeight = Math.max(measureHeight, AbsoluteLayout.getTop(child) * density + childSize.measuredHeight);
}
measureWidth += (this.paddingLeft + this.paddingRight) * density;
measureHeight += (this.paddingTop + this.paddingBottom) * density;
measureWidth = Math.max(measureWidth, this.minWidth * density);
measureHeight = Math.max(measureHeight, this.minHeight * density);
var widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0);
var heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0);
this.setMeasuredDimension(widthAndState, heightAndState);
}
public onLayout(left: number, top: number, right: number, bottom: number): void {
super.onLayout(left, top, right, bottom);
var density = utils.layout.getDisplayDensity();
var count = this.getChildrenCount();
for (var i = 0; i < count; i++) {
var child = this.getChildAt(i);
if (!child || !child._isVisible) {
continue;
}
var childWidth = child.getMeasuredWidth();
var childHeight = child.getMeasuredHeight();
var childLeft = (this.paddingLeft + AbsoluteLayout.getLeft(child)) * density;
var childTop = (this.paddingTop + AbsoluteLayout.getTop(child)) * density;
var childRight = childLeft + childWidth + (child.marginLeft + child.marginRight) * density;
var childBottom = childTop + childHeight + (child.marginTop + child.marginBottom) * density;
view.View.layoutChild(this, child, childLeft, childTop, childRight, childBottom);
}
}
}