use flex
This commit is contained in:
parent
0fe55fdec4
commit
ef88d9c092
100
dist/index.js
vendored
100
dist/index.js
vendored
@ -3545,6 +3545,7 @@ return __module.exports;
|
|||||||
|
|
||||||
class ShaderPlugin extends DoricPlugin {
|
class ShaderPlugin extends DoricPlugin {
|
||||||
render(ret) {
|
render(ret) {
|
||||||
|
this.context.rootNode.viewId = ret.id;
|
||||||
this.context.rootNode.blend(ret.props);
|
this.context.rootNode.blend(ret.props);
|
||||||
this.context.rootNode.layout();
|
this.context.rootNode.layout();
|
||||||
}
|
}
|
||||||
@ -3689,6 +3690,11 @@ return __module.exports;
|
|||||||
case 'y':
|
case 'y':
|
||||||
this.offsetY = prop;
|
this.offsetY = prop;
|
||||||
break;
|
break;
|
||||||
|
case 'onClick':
|
||||||
|
this.view.onclick = () => {
|
||||||
|
this.callJSResponse(prop);
|
||||||
|
};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set width(v) {
|
set width(v) {
|
||||||
@ -3730,6 +3736,22 @@ return __module.exports;
|
|||||||
ret.viewType = type;
|
ret.viewType = type;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
getIdList() {
|
||||||
|
const ids = [];
|
||||||
|
let viewNode = this;
|
||||||
|
do {
|
||||||
|
ids.push(viewNode.viewId);
|
||||||
|
viewNode = viewNode.superNode;
|
||||||
|
} while (viewNode);
|
||||||
|
return ids.reverse();
|
||||||
|
}
|
||||||
|
callJSResponse(funcId, ...args) {
|
||||||
|
const argumentsList = ['__response__', this.getIdList(), funcId];
|
||||||
|
for (let i = 1; i < arguments.length; i++) {
|
||||||
|
argumentsList.push(arguments[i]);
|
||||||
|
}
|
||||||
|
Reflect.apply(this.context.invokeEntityMethod, this.context, argumentsList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class DoricSuperViewNode extends DoricViewNode {
|
class DoricSuperViewNode extends DoricViewNode {
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -4004,7 +4026,11 @@ return __module.exports;
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
return document.createElement('div');
|
const ret = document.createElement('div');
|
||||||
|
ret.style.display = "flex";
|
||||||
|
ret.style.flexDirection = "column";
|
||||||
|
ret.style.flexWrap = "nowrap";
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
blendProps(v, propName, prop) {
|
blendProps(v, propName, prop) {
|
||||||
if (propName === 'space') {
|
if (propName === 'space') {
|
||||||
@ -4012,17 +4038,29 @@ return __module.exports;
|
|||||||
}
|
}
|
||||||
else if (propName === 'gravity') {
|
else if (propName === 'gravity') {
|
||||||
this.gravity = prop;
|
this.gravity = prop;
|
||||||
|
if ((this.gravity & LEFT) === LEFT) {
|
||||||
|
this.view.style.justifyContent = "flex-start";
|
||||||
|
}
|
||||||
|
else if ((this.gravity & RIGHT) === RIGHT) {
|
||||||
|
this.view.style.justifyContent = "flex-end";
|
||||||
|
}
|
||||||
|
else if ((this.gravity & CENTER_X) === CENTER_X) {
|
||||||
|
this.view.style.justifyContent = "center";
|
||||||
|
}
|
||||||
|
if ((this.gravity & TOP) === TOP) {
|
||||||
|
this.view.style.alignItems = "flex-start";
|
||||||
|
}
|
||||||
|
else if ((this.gravity & BOTTOM) === BOTTOM) {
|
||||||
|
this.view.style.alignItems = "flex-end";
|
||||||
|
}
|
||||||
|
else if ((this.gravity & CENTER_Y) === CENTER_Y) {
|
||||||
|
this.view.style.alignItems = "center";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
super.blendProps(v, propName, prop);
|
super.blendProps(v, propName, prop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blend(props) {
|
|
||||||
super.blend(props);
|
|
||||||
this.childNodes.forEach(e => {
|
|
||||||
e.view.style.position = "absolute";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
measureContentSize(targetSize) {
|
measureContentSize(targetSize) {
|
||||||
let width = this.frameWidth;
|
let width = this.frameWidth;
|
||||||
let height = this.frameHeight;
|
let height = this.frameHeight;
|
||||||
@ -4069,54 +4107,6 @@ return __module.exports;
|
|||||||
const { width, height } = this.measureContentSize(targetSize);
|
const { width, height } = this.measureContentSize(targetSize);
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
let yStart = this.paddingTop;
|
|
||||||
if ((this.gravity & TOP) == TOP) {
|
|
||||||
yStart = this.paddingTop;
|
|
||||||
}
|
|
||||||
else if ((this.gravity & BOTTOM) == BOTTOM) {
|
|
||||||
yStart = targetSize.height - this.contentSize.height - this.paddingBottom;
|
|
||||||
}
|
|
||||||
else if ((this.gravity & CENTER_Y) == CENTER_Y) {
|
|
||||||
yStart = (targetSize.height - this.contentSize.height - this.paddingTop - this.paddingBottom) / 2 + this.paddingTop;
|
|
||||||
}
|
|
||||||
let remain = targetSize.height - this.contentSize.height - this.paddingTop - this.paddingBottom;
|
|
||||||
this.childNodes.forEach(e => {
|
|
||||||
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
||||||
const childTargetSize = {
|
|
||||||
width: width - this.paddingLeft - this.paddingRight,
|
|
||||||
height: height - yStart - this.paddingBottom,
|
|
||||||
};
|
|
||||||
if (((_a = e.layoutConfig) === null || _a === void 0 ? void 0 : _a.weight) > 0) {
|
|
||||||
childTargetSize.height += remain / this.contentSize.weight * e.layoutConfig.weight;
|
|
||||||
}
|
|
||||||
e.layoutSelf(childTargetSize);
|
|
||||||
let gravity = ((_b = e.layoutConfig) === null || _b === void 0 ? void 0 : _b.alignment) | this.gravity;
|
|
||||||
if ((gravity & LEFT) === LEFT) {
|
|
||||||
e.x = 0;
|
|
||||||
}
|
|
||||||
else if ((gravity & RIGHT) === RIGHT) {
|
|
||||||
e.x = width - e.width + this.paddingLeft - this.paddingRight;
|
|
||||||
}
|
|
||||||
else if ((gravity & CENTER_X) === CENTER_X) {
|
|
||||||
e.x = width / 2 - e.width / 2 - this.paddingLeft;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ((_c = e.layoutConfig.margin) === null || _c === void 0 ? void 0 : _c.left) {
|
|
||||||
e.x = (_d = e.layoutConfig.margin) === null || _d === void 0 ? void 0 : _d.left;
|
|
||||||
}
|
|
||||||
else if ((_e = e.layoutConfig.margin) === null || _e === void 0 ? void 0 : _e.right) {
|
|
||||||
e.x = width - e.width + this.paddingLeft - this.paddingRight - ((_f = e.layoutConfig.margin) === null || _f === void 0 ? void 0 : _f.right);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (((_g = e.layoutConfig.margin) === null || _g === void 0 ? void 0 : _g.top) !== undefined) {
|
|
||||||
yStart += e.layoutConfig.margin.top;
|
|
||||||
}
|
|
||||||
e.y = yStart - this.paddingTop;
|
|
||||||
yStart += e.height + this.space;
|
|
||||||
if (((_h = e.layoutConfig.margin) === null || _h === void 0 ? void 0 : _h.bottom) !== undefined) {
|
|
||||||
yStart += e.layoutConfig.margin.bottom;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
@ -3,6 +3,7 @@ import { DVModel } from "../shader/DoricViewNode";
|
|||||||
|
|
||||||
export class ShaderPlugin extends DoricPlugin {
|
export class ShaderPlugin extends DoricPlugin {
|
||||||
render(ret: DVModel) {
|
render(ret: DVModel) {
|
||||||
|
this.context.rootNode.viewId = ret.id
|
||||||
this.context.rootNode.blend(ret.props)
|
this.context.rootNode.blend(ret.props)
|
||||||
this.context.rootNode.layout()
|
this.context.rootNode.layout()
|
||||||
}
|
}
|
||||||
|
@ -9,23 +9,35 @@ export class DoricVLayoutNode extends DoricGroupViewNode {
|
|||||||
weight: 0,
|
weight: 0,
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
return document.createElement('div')
|
const ret = document.createElement('div')
|
||||||
|
ret.style.display = "flex"
|
||||||
|
ret.style.flexDirection = "column"
|
||||||
|
ret.style.flexWrap = "nowrap"
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
blendProps(v: HTMLElement, propName: string, prop: any) {
|
blendProps(v: HTMLElement, propName: string, prop: any) {
|
||||||
if (propName === 'space') {
|
if (propName === 'space') {
|
||||||
this.space = prop
|
this.space = prop
|
||||||
} else if (propName === 'gravity') {
|
} else if (propName === 'gravity') {
|
||||||
this.gravity = prop
|
this.gravity = prop
|
||||||
|
if ((this.gravity & LEFT) === LEFT) {
|
||||||
|
this.view.style.justifyContent = "flex-start"
|
||||||
|
} else if ((this.gravity & RIGHT) === RIGHT) {
|
||||||
|
this.view.style.justifyContent = "flex-end"
|
||||||
|
} else if ((this.gravity & CENTER_X) === CENTER_X) {
|
||||||
|
this.view.style.justifyContent = "center"
|
||||||
|
}
|
||||||
|
if ((this.gravity & TOP) === TOP) {
|
||||||
|
this.view.style.alignItems = "flex-start"
|
||||||
|
} else if ((this.gravity & BOTTOM) === BOTTOM) {
|
||||||
|
this.view.style.alignItems = "flex-end"
|
||||||
|
} else if ((this.gravity & CENTER_Y) === CENTER_Y) {
|
||||||
|
this.view.style.alignItems = "center"
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
super.blendProps(v, propName, prop)
|
super.blendProps(v, propName, prop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blend(props: { [index: string]: any }) {
|
|
||||||
super.blend(props)
|
|
||||||
this.childNodes.forEach(e => {
|
|
||||||
e.view.style.position = "absolute"
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
measureContentSize(targetSize: { width: number, height: number }) {
|
measureContentSize(targetSize: { width: number, height: number }) {
|
||||||
let width = this.frameWidth
|
let width = this.frameWidth
|
||||||
@ -77,46 +89,5 @@ export class DoricVLayoutNode extends DoricGroupViewNode {
|
|||||||
const { width, height } = this.measureContentSize(targetSize)
|
const { width, height } = this.measureContentSize(targetSize)
|
||||||
this.width = width
|
this.width = width
|
||||||
this.height = height
|
this.height = height
|
||||||
let yStart = this.paddingTop;
|
|
||||||
if ((this.gravity & TOP) == TOP) {
|
|
||||||
yStart = this.paddingTop
|
|
||||||
} else if ((this.gravity & BOTTOM) == BOTTOM) {
|
|
||||||
yStart = targetSize.height - this.contentSize.height - this.paddingBottom;
|
|
||||||
} else if ((this.gravity & CENTER_Y) == CENTER_Y) {
|
|
||||||
yStart = (targetSize.height - this.contentSize.height - this.paddingTop - this.paddingBottom) / 2 + this.paddingTop
|
|
||||||
}
|
|
||||||
let remain = targetSize.height - this.contentSize.height - this.paddingTop - this.paddingBottom
|
|
||||||
this.childNodes.forEach(e => {
|
|
||||||
const childTargetSize = {
|
|
||||||
width: width - this.paddingLeft - this.paddingRight,
|
|
||||||
height: height - yStart - this.paddingBottom,
|
|
||||||
}
|
|
||||||
if (e.layoutConfig?.weight > 0) {
|
|
||||||
childTargetSize.height += remain / this.contentSize.weight * e.layoutConfig.weight
|
|
||||||
}
|
|
||||||
e.layoutSelf(childTargetSize)
|
|
||||||
let gravity = e.layoutConfig?.alignment | this.gravity
|
|
||||||
if ((gravity & LEFT) === LEFT) {
|
|
||||||
e.x = 0
|
|
||||||
} else if ((gravity & RIGHT) === RIGHT) {
|
|
||||||
e.x = width - e.width + this.paddingLeft - this.paddingRight
|
|
||||||
} else if ((gravity & CENTER_X) === CENTER_X) {
|
|
||||||
e.x = width / 2 - e.width / 2 - this.paddingLeft
|
|
||||||
} else {
|
|
||||||
if (e.layoutConfig.margin?.left) {
|
|
||||||
e.x = e.layoutConfig.margin?.left
|
|
||||||
} else if (e.layoutConfig.margin?.right) {
|
|
||||||
e.x = width - e.width + this.paddingLeft - this.paddingRight - e.layoutConfig.margin?.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (e.layoutConfig.margin?.top !== undefined) {
|
|
||||||
yStart += e.layoutConfig.margin.top
|
|
||||||
}
|
|
||||||
e.y = yStart - this.paddingTop
|
|
||||||
yStart += e.height + this.space
|
|
||||||
if (e.layoutConfig.margin?.bottom !== undefined) {
|
|
||||||
yStart += e.layoutConfig.margin.bottom
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -191,6 +191,11 @@ export abstract class DoricViewNode {
|
|||||||
case 'y':
|
case 'y':
|
||||||
this.offsetY = prop as number
|
this.offsetY = prop as number
|
||||||
break
|
break
|
||||||
|
case 'onClick':
|
||||||
|
this.view.onclick = () => {
|
||||||
|
this.callJSResponse(prop as string)
|
||||||
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,6 +240,24 @@ export abstract class DoricViewNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract measureContentSize(targetSize: FrameSize): FrameSize
|
abstract measureContentSize(targetSize: FrameSize): FrameSize
|
||||||
|
|
||||||
|
getIdList() {
|
||||||
|
const ids: string[] = []
|
||||||
|
let viewNode: DoricViewNode | undefined = this
|
||||||
|
do {
|
||||||
|
ids.push(viewNode.viewId)
|
||||||
|
viewNode = viewNode.superNode
|
||||||
|
} while (viewNode)
|
||||||
|
return ids.reverse()
|
||||||
|
}
|
||||||
|
|
||||||
|
callJSResponse(funcId: string, ...args: any) {
|
||||||
|
const argumentsList: any = ['__response__', this.getIdList(), funcId]
|
||||||
|
for (let i = 1; i < arguments.length; i++) {
|
||||||
|
argumentsList.push(arguments[i])
|
||||||
|
}
|
||||||
|
Reflect.apply(this.context.invokeEntityMethod, this.context, argumentsList)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user