mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Merge pull request #1332 from Azaezel/guiRelativeYresizes
initial aspect ratio maintaining relative gui scaling
This commit is contained in:
commit
9acf487f03
|
|
@ -175,6 +175,9 @@ ImplementEnumType( GuiHorizontalSizing,
|
|||
{ GuiControl::horizResizeLeft, "left" },
|
||||
{ GuiControl::horizResizeCenter, "center" },
|
||||
{ GuiControl::horizResizeRelative, "relative" },
|
||||
{ GuiControl::horizResizeAspectLeft, "aspectLeft" },
|
||||
{ GuiControl::horizResizeAspectRight, "aspectRight" },
|
||||
{ GuiControl::horizResizeAspectCenter, "aspectCenter" },
|
||||
{ GuiControl::horizResizeWindowRelative, "windowRelative" }
|
||||
EndImplementEnumType;
|
||||
|
||||
|
|
@ -186,6 +189,9 @@ ImplementEnumType( GuiVerticalSizing,
|
|||
{ GuiControl::vertResizeTop, "top" },
|
||||
{ GuiControl::vertResizeCenter, "center" },
|
||||
{ GuiControl::vertResizeRelative, "relative" },
|
||||
{ GuiControl::vertResizeAspectTop, "aspectTop" },
|
||||
{ GuiControl::vertResizeAspectBottom, "aspectBottom" },
|
||||
{ GuiControl::vertResizeAspectCenter, "aspectCenter" },
|
||||
{ GuiControl::vertResizeWindowRelative, "windowRelative" }
|
||||
EndImplementEnumType;
|
||||
|
||||
|
|
@ -1370,6 +1376,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen
|
|||
newPosition.x = newLeft;
|
||||
newExtent.x = newWidth;
|
||||
}
|
||||
else if (mHorizSizing == horizResizeAspectLeft && oldParentRect.extent.x != 0)
|
||||
{
|
||||
S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x));
|
||||
S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y));
|
||||
|
||||
newPosition.x = newLeft;
|
||||
newExtent.x = newWidth;
|
||||
}
|
||||
else if (mHorizSizing == horizResizeAspectRight && oldParentRect.extent.x != 0)
|
||||
{
|
||||
S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x));
|
||||
S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width
|
||||
S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width
|
||||
|
||||
S32 offset = rWidth - newWidth; // account for change in relative width
|
||||
newLeft += offset;
|
||||
newPosition.x = newLeft;
|
||||
newExtent.x = newWidth;
|
||||
}
|
||||
else if (mHorizSizing == horizResizeAspectCenter && oldParentRect.extent.x != 0)
|
||||
{
|
||||
S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x));
|
||||
S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width
|
||||
S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width
|
||||
|
||||
S32 offset = rWidth - newWidth; // account for change in relative width
|
||||
newLeft += offset/2;
|
||||
newPosition.x = newLeft;
|
||||
newExtent.x = newWidth;
|
||||
}
|
||||
|
||||
if (mVertSizing == vertResizeCenter)
|
||||
newPosition.y = (newParentRect.extent.y - getHeight()) >> 1;
|
||||
|
|
@ -1385,6 +1421,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen
|
|||
newPosition.y = newTop;
|
||||
newExtent.y = newHeight;
|
||||
}
|
||||
else if (mVertSizing == vertResizeAspectTop && oldParentRect.extent.y != 0)
|
||||
{
|
||||
S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y));
|
||||
S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x));
|
||||
|
||||
newPosition.y = newTop;
|
||||
newExtent.y = newHeight;
|
||||
}
|
||||
else if (mVertSizing == vertResizeAspectBottom && oldParentRect.extent.y != 0)
|
||||
{
|
||||
S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y));
|
||||
S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght
|
||||
S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght
|
||||
|
||||
S32 offset = rHeight - newHeight; // account for change in relative hieght
|
||||
newTop += offset;
|
||||
newPosition.y = newTop;
|
||||
newExtent.y = newHeight;
|
||||
}
|
||||
else if (mVertSizing == vertResizeAspectCenter && oldParentRect.extent.y != 0)
|
||||
{
|
||||
S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y));
|
||||
S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght
|
||||
S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght
|
||||
|
||||
S32 offset = rHeight - newHeight; // account for change in relative hieght
|
||||
newTop += offset / 2;
|
||||
newPosition.y = newTop;
|
||||
newExtent.y = newHeight;
|
||||
}
|
||||
|
||||
// Resizing Re factor [9/18/2006]
|
||||
// Only resize if our minExtent is satisfied with it.
|
||||
|
|
|
|||
|
|
@ -121,6 +121,9 @@ class GuiControl : public SimGroup
|
|||
horizResizeLeft, ///< fixed on the right and width
|
||||
horizResizeCenter,
|
||||
horizResizeRelative, ///< resize relative
|
||||
horizResizeAspectLeft, ///< resize relative to height delta (offset Left)
|
||||
horizResizeAspectRight, ///< resize relative to height delta (offset Right)
|
||||
horizResizeAspectCenter, ///< resize relative to height delta (Centered)
|
||||
horizResizeWindowRelative ///< resize window relative
|
||||
};
|
||||
enum vertSizingOptions
|
||||
|
|
@ -130,6 +133,9 @@ class GuiControl : public SimGroup
|
|||
vertResizeTop, ///< fixed in height and on the bottom
|
||||
vertResizeCenter,
|
||||
vertResizeRelative, ///< resize relative
|
||||
vertResizeAspectTop, ///< resize relative to width delta (offset Left)
|
||||
vertResizeAspectBottom, ///< resize relative to width delta (offset Right)
|
||||
vertResizeAspectCenter, ///< resize relative to width delta Centered)
|
||||
vertResizeWindowRelative ///< resize window relative
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue