MCPcopy Create free account
hub / github.com/defold/defold / AdjustPosScale

Function AdjustPosScale

engine/gui/src/gui.cpp:2994–3045  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2992 }
2993
2994 static void AdjustPosScale(HScene scene, InternalNode* n, const Vector4& reference_scale, Vector4& position, Vector4& scale)
2995 {
2996 if (scene->m_AdjustReference == ADJUST_REFERENCE_LEGACY && n->m_ParentIndex != INVALID_INDEX)
2997 {
2998 return;
2999 }
3000
3001 Node& node = n->m_Node;
3002 // Apply ref-scaling to scale uniformly, select the smallest scale component to make sure everything fits
3003 Vector4 adjust_scale = ApplyAdjustOnReferenceScale(reference_scale, node.m_AdjustMode);
3004
3005 Vector4 parent_dims;
3006
3007 if (scene->m_AdjustReference == ADJUST_REFERENCE_LEGACY || n->m_ParentIndex == INVALID_INDEX) {
3008 parent_dims = Vector4((float) scene->m_Width, (float) scene->m_Height, 0.0f, 1.0f);
3009 } else {
3010 InternalNode* parent = &scene->m_Nodes[n->m_ParentIndex];
3011 parent_dims = Vector4(parent->m_Node.m_Properties[dmGui::PROPERTY_SIZE].getX(), parent->m_Node.m_Properties[dmGui::PROPERTY_SIZE].getY(), 0.0f, 1.0f);
3012 }
3013
3014 Vector4 offset = Vector4(0.0f, 0.0f, 0.0f, 0.0f);
3015 Vector4 adjusted_dims = mulPerElem(parent_dims, adjust_scale);
3016 Vector4 ref_size;
3017 if (scene->m_AdjustReference == ADJUST_REFERENCE_LEGACY || n->m_ParentIndex == INVALID_INDEX) {
3018 ref_size = Vector4((float) scene->m_AdjustWidth, (float) scene->m_AdjustHeight, 0.0f, 1.0f);
3019
3020 // need to calculate offset for root nodes, since (0,0) is in middle of scene
3021 offset = (ref_size - adjusted_dims) * 0.5f;
3022 offset.setX(offset.getX() + scene->m_AdjustOffsetX);
3023 offset.setY(offset.getY() + scene->m_AdjustOffsetY);
3024 } else {
3025 InternalNode* parent = &scene->m_Nodes[n->m_ParentIndex];
3026 ref_size = Vector4(parent->m_Node.m_Properties[dmGui::PROPERTY_SIZE].getX() * reference_scale.getX(), parent->m_Node.m_Properties[dmGui::PROPERTY_SIZE].getY() * reference_scale.getY(), 0.0f, 1.0f);
3027 }
3028
3029 // Apply anchoring
3030 Vector4 scaled_position = mulPerElem(position, adjust_scale);
3031 if (node.m_XAnchor == XANCHOR_LEFT || node.m_XAnchor == XANCHOR_RIGHT)
3032 {
3033 offset.setX(0.0f);
3034 scaled_position.setX(position.getX() * reference_scale.getX());
3035 }
3036
3037 if (node.m_YAnchor == YANCHOR_TOP || node.m_YAnchor == YANCHOR_BOTTOM)
3038 {
3039 offset.setY(0.0f);
3040 scaled_position.setY(position.getY() * reference_scale.getY());
3041 }
3042
3043 position = scaled_position + offset;
3044 scale = mulPerElem(adjust_scale, scale);
3045 }
3046
3047 // Same euler checks as in gameobject.cpp
3048 static void UpdateEulerToRotation(Node& node)

Callers 1

UpdateLocalTransformFunction · 0.85

Calls 7

Vector4Class · 0.50
mulPerElemFunction · 0.50
getXMethod · 0.45
getYMethod · 0.45
setXMethod · 0.45
setYMethod · 0.45

Tested by

no test coverage detected