Skip to content

Commit 06e679b

Browse files
committed
Handle horizontal and vertical anchors in one property.
1 parent 20111d7 commit 06e679b

File tree

1 file changed

+65
-35
lines changed

1 file changed

+65
-35
lines changed

newIDE/app/src/ObjectsRendering/Renderers/RenderedCustomObjectInstance.js

Lines changed: 65 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -163,25 +163,35 @@ const layoutFields = [
163163
'HorizontalAnchorTarget',
164164
'VerticalAnchorOrigin',
165165
'VerticalAnchorTarget',
166+
'AnchorOrigin',
167+
'AnchorTarget',
166168
'AnchorDeltaX',
167169
'AnchorDeltaY',
168170
];
169171

170172
const getHorizontalAnchorValue = (anchorName: string) => {
171-
return anchorName === 'Left'
173+
const horizontalAnchorName = (anchorName.includes('-')
174+
? anchorName.split('-')[1]
175+
: anchorName
176+
).toLowerCase();
177+
return horizontalAnchorName === 'left'
172178
? 0
173-
: anchorName === 'Right'
179+
: horizontalAnchorName === 'right'
174180
? 1
175-
: anchorName === 'Center'
181+
: horizontalAnchorName === 'center'
176182
? 0.5
177183
: null;
178184
};
179185
const getVerticalAnchorValue = (anchorName: string) => {
180-
return anchorName === 'Top'
186+
const verticalAnchorName = (anchorName.includes('-')
187+
? anchorName.split('-')[0]
188+
: anchorName
189+
).toLowerCase();
190+
return verticalAnchorName === 'top'
181191
? 0
182-
: anchorName === 'Bottom'
192+
: verticalAnchorName === 'bottom'
183193
? 1
184-
: anchorName === 'Center'
194+
: verticalAnchorName === 'center'
185195
? 0.5
186196
: null;
187197
};
@@ -214,10 +224,12 @@ const getLayouts = (
214224
const layoutField = layoutFields.find(field => name.includes(field));
215225

216226
let targetObjectName = '';
217-
let anchorTarget: ?number = null;
227+
let horizontalAnchorTarget: ?number = null;
228+
let verticalAnchorTarget: ?number = null;
218229
if (
219230
layoutField === 'HorizontalAnchorOrigin' ||
220-
layoutField === 'VerticalAnchorOrigin'
231+
layoutField === 'VerticalAnchorOrigin' ||
232+
layoutField === 'AnchorOrigin'
221233
) {
222234
const targetPropertyName = name.replace('AnchorOrigin', 'AnchorTarget');
223235
const targetProperty = properties.get(targetPropertyName);
@@ -230,12 +242,19 @@ const getLayouts = (
230242
.getValue();
231243
const anchorTargetValueNumber =
232244
Number.parseFloat(anchorTargetStringValue) || 0;
233-
if (layoutField === 'HorizontalAnchorOrigin') {
234-
anchorTarget =
245+
if (
246+
layoutField === 'HorizontalAnchorOrigin' ||
247+
layoutField === 'AnchorOrigin'
248+
) {
249+
horizontalAnchorTarget =
235250
getHorizontalAnchorValue(anchorTargetStringValue) ||
236251
anchorTargetValueNumber;
237-
} else {
238-
anchorTarget =
252+
}
253+
if (
254+
layoutField === 'VerticalAnchorOrigin' ||
255+
layoutField === 'AnchorOrigin'
256+
) {
257+
verticalAnchorTarget =
239258
getVerticalAnchorValue(anchorTargetStringValue) ||
240259
anchorTargetValueNumber;
241260
}
@@ -264,34 +283,43 @@ const getLayouts = (
264283
layout.verticalLayout.minSideAbsoluteMargin = propertyValueNumber;
265284
} else if (layoutField === 'BottomPadding') {
266285
layout.verticalLayout.maxSideAbsoluteMargin = propertyValueNumber;
267-
} else if (layoutField === 'HorizontalAnchorOrigin') {
268-
const anchorOrigin =
269-
getHorizontalAnchorValue(propertyValueString) || propertyValueNumber;
270-
if (anchorOrigin !== null) {
271-
layout.horizontalLayout.anchorOrigin = anchorOrigin;
272-
}
273-
if (anchorTarget !== null) {
274-
layout.horizontalLayout.anchorTarget = anchorTarget;
275-
}
276-
layout.horizontalLayout.anchorTargetObject = targetObjectName;
277-
} else if (layoutField === 'VerticalAnchorOrigin') {
278-
const anchorOrigin =
279-
getVerticalAnchorValue(propertyValueString) || propertyValueNumber;
280-
if (anchorOrigin !== null) {
281-
layout.verticalLayout.anchorOrigin = anchorOrigin;
282-
}
283-
if (anchorTarget !== null) {
284-
layout.verticalLayout.anchorTarget = anchorTarget;
285-
}
286-
layout.verticalLayout.anchorTargetObject = targetObjectName;
287286
} else if (layoutField === 'AnchorDeltaX') {
288287
layout.horizontalLayout.anchorDelta = propertyValueNumber;
289288
} else if (layoutField === 'AnchorDeltaY') {
290289
layout.verticalLayout.anchorDelta = propertyValueNumber;
290+
} else {
291+
if (
292+
layoutField === 'HorizontalAnchorOrigin' ||
293+
layoutField === 'AnchorOrigin'
294+
) {
295+
const anchorOrigin =
296+
getHorizontalAnchorValue(propertyValueString) ||
297+
propertyValueNumber;
298+
if (anchorOrigin !== null) {
299+
layout.horizontalLayout.anchorOrigin = anchorOrigin;
300+
}
301+
if (horizontalAnchorTarget !== null) {
302+
layout.horizontalLayout.anchorTarget = horizontalAnchorTarget;
303+
}
304+
layout.horizontalLayout.anchorTargetObject = targetObjectName;
305+
}
306+
if (
307+
layoutField === 'VerticalAnchorOrigin' ||
308+
layoutField === 'AnchorOrigin'
309+
) {
310+
const anchorOrigin =
311+
getVerticalAnchorValue(propertyValueString) || propertyValueNumber;
312+
if (anchorOrigin !== null) {
313+
layout.verticalLayout.anchorOrigin = anchorOrigin;
314+
}
315+
if (verticalAnchorTarget !== null) {
316+
layout.verticalLayout.anchorTarget = verticalAnchorTarget;
317+
}
318+
layout.verticalLayout.anchorTargetObject = targetObjectName;
319+
}
291320
}
292321
}
293322
}
294-
295323
return layouts;
296324
};
297325

@@ -471,7 +499,8 @@ export default class RenderedCustomObjectInstance extends RenderedInstance {
471499
const anchorOrigin = childLayout.horizontalLayout.anchorOrigin || 0;
472500
const anchorTarget = childLayout.horizontalLayout.anchorTarget || 0;
473501
// TODO Use anchorTargetObject instead of defaulting on the background
474-
childInstance.x = childLayout.horizontalLayout.anchorDelta || 0 +
502+
childInstance.x =
503+
(childLayout.horizontalLayout.anchorDelta || 0) +
475504
anchorTarget * width -
476505
anchorOrigin * renderedInstance.getDefaultWidth();
477506
}
@@ -482,7 +511,8 @@ export default class RenderedCustomObjectInstance extends RenderedInstance {
482511
const anchorOrigin = childLayout.verticalLayout.anchorOrigin || 0;
483512
const anchorTarget = childLayout.verticalLayout.anchorTarget || 0;
484513
// TODO Use anchorTargetObject instead of defaulting on the background
485-
childInstance.y = childLayout.verticalLayout.anchorDelta || 0 +
514+
childInstance.y =
515+
(childLayout.verticalLayout.anchorDelta || 0) +
486516
anchorTarget * height -
487517
anchorOrigin * renderedInstance.getDefaultHeight();
488518
}

0 commit comments

Comments
 (0)