phaser4-rex-plugins
Version:
128 lines (108 loc) • 3.74 kB
JavaScript
import BaseSizer from '../basesizer/BaseSizer.js';
import Methods from './Methods.js';
import GetOrientationMode from '../utils/GetOrientationMode.js';
import GetMaxChildWidth from './GetMaxChildWidth.js';
import GetMaxChildHeight from './GetMaxChildHeight.js';
const IsPlainObject = Phaser.Utils.Objects.IsPlainObject;
const GetValue = Phaser.Utils.Objects.GetValue;
class FixWidthSizer extends BaseSizer {
constructor(scene, x, y, minWidth, minHeight, config) {
if (IsPlainObject(x)) {
config = x;
x = GetValue(config, 'x', 0);
y = GetValue(config, 'y', 0);
minWidth = GetValue(config, 'width', undefined);
minHeight = GetValue(config, 'height', undefined);
} else if (IsPlainObject(minWidth)) {
config = minWidth;
minWidth = GetValue(config, 'width', undefined);
minHeight = GetValue(config, 'height', undefined);
}
super(scene, x, y, minWidth, minHeight, config);
this.type = 'rexFixWidthSizer';
this.sizerChildren = [];
this.runChildrenWrapFlag = true;
this.setOrientation(GetValue(config, 'orientation', 0));
this.setItemSpacing(GetValue(config, 'space.item', 0));
this.setLineSpacing(GetValue(config, 'space.line', 0));
this.setIntentLeft(
GetValue(config, 'space.indentLeftOdd', 0),
GetValue(config, 'space.indentLeftEven', 0)
);
this.setIntentTop(
GetValue(config, 'space.indentTopOdd', 0),
GetValue(config, 'space.indentTopEven', 0)
);
this.setAlign(GetValue(config, 'align', 0));
this.setJustifyPercentage(GetValue(config, 'justifyPercentage', 0.25));
this.setRTL(GetValue(config, 'rtl', false));
this.wrapResult = undefined; // {lines, width, height}
this.addChildrenMap('items', this.sizerChildren);
}
setOrientation(orientation) {
this.orientation = GetOrientationMode(orientation);
return this;
}
setItemSpacing(space) {
this.space.item = space;
return this;
}
setLineSpacing(space) {
this.space.line = space;
return this;
}
setIntentLeft(odd, even) {
this.space.indentLeftOdd = odd;
this.space.indentLeftEven = even;
return this;
}
setIntentTop(odd, even) {
this.space.indentTopOdd = odd;
this.space.indentTopEven = even;
return this;
}
setAlign(align) {
if (typeof (align) === 'string') {
align = ALIGN[align];
}
this.align = align;
return this;
}
setJustifyPercentage(value) {
this.justifyPercentage = value;
return this;
}
setRTL(enabled) {
if (enabled === undefined) {
enabled = true;
}
this.rtl = enabled;
return this;
}
get maxChildWidth() {
if (this._maxChildWidth === undefined) {
this._maxChildWidth = GetMaxChildWidth.call(this);
}
return this._maxChildWidth;
}
get maxChildHeight() {
if (this._maxChildHeight === undefined) {
this._maxChildHeight = GetMaxChildHeight.call(this);
}
return this._maxChildHeight;
}
}
const ALIGN = {
left: 0, top: 0,
right: 1, bottom: 1,
center: 2,
justify: 3,
'justify-left': 3, 'justify-top': 3,
'justify-right': 4, 'justify-bottom': 4,
'justify-center': 5
}
Object.assign(
FixWidthSizer.prototype,
Methods
);
export default FixWidthSizer;