mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-21 05:06:29 +00:00
Start rewriting plugin on top of new sync protocol
This commit is contained in:
@@ -9,6 +9,7 @@ local e = Roact.createElement
|
||||
local FitText = Roact.Component:extend("FitText")
|
||||
|
||||
function FitText:init()
|
||||
self.ref = Roact.createRef()
|
||||
self.sizeBinding, self.setSize = Roact.createBinding(UDim2.new())
|
||||
end
|
||||
|
||||
@@ -16,10 +17,15 @@ function FitText:render()
|
||||
local kind = self.props.Kind or "TextLabel"
|
||||
|
||||
local containerProps = Dictionary.merge(self.props, {
|
||||
FitAxis = Dictionary.None,
|
||||
Kind = Dictionary.None,
|
||||
Padding = Dictionary.None,
|
||||
MinSize = Dictionary.None,
|
||||
Size = self.sizeBinding
|
||||
Size = self.sizeBinding,
|
||||
[Roact.Ref] = self.ref,
|
||||
[Roact.Change.AbsoluteSize] = function()
|
||||
self:updateTextMeasurements()
|
||||
end
|
||||
})
|
||||
|
||||
return e(kind, containerProps)
|
||||
@@ -36,15 +42,45 @@ end
|
||||
function FitText:updateTextMeasurements()
|
||||
local minSize = self.props.MinSize or Vector2.new(0, 0)
|
||||
local padding = self.props.Padding or Vector2.new(0, 0)
|
||||
local fitAxis = self.props.FitAxis or "XY"
|
||||
local baseSize = self.props.Size
|
||||
|
||||
local text = self.props.Text or ""
|
||||
local font = self.props.Font or Enum.Font.Legacy
|
||||
local textSize = self.props.TextSize or 12
|
||||
|
||||
local measuredText = TextService:GetTextSize(text, textSize, font, Vector2.new(9e6, 9e6))
|
||||
local totalSize = UDim2.new(
|
||||
0, math.max(minSize.X, padding.X * 2 + measuredText.X),
|
||||
0, math.max(minSize.Y, padding.Y * 2 + measuredText.Y))
|
||||
local containerSize = self.ref.current.AbsoluteSize
|
||||
|
||||
local textBounds
|
||||
|
||||
if fitAxis == "XY" then
|
||||
textBounds = Vector2.new(9e6, 9e6)
|
||||
elseif fitAxis == "X" then
|
||||
textBounds = Vector2.new(9e6, containerSize.Y - padding.Y * 2)
|
||||
elseif fitAxis == "Y" then
|
||||
textBounds = Vector2.new(containerSize.X - padding.X * 2, 9e6)
|
||||
end
|
||||
|
||||
local measuredText = TextService:GetTextSize(text, textSize, font, textBounds)
|
||||
|
||||
local computedX = math.max(minSize.X, padding.X * 2 + measuredText.X)
|
||||
local computedY = math.max(minSize.Y, padding.Y * 2 + measuredText.Y)
|
||||
|
||||
local totalSize
|
||||
|
||||
if fitAxis == "XY" then
|
||||
totalSize = UDim2.new(
|
||||
0, computedX,
|
||||
0, computedY)
|
||||
elseif fitAxis == "X" then
|
||||
totalSize = UDim2.new(
|
||||
0, computedX,
|
||||
baseSize.Y.Scale, baseSize.Y.Offset)
|
||||
elseif fitAxis == "Y" then
|
||||
totalSize = UDim2.new(
|
||||
baseSize.X.Scale, baseSize.X.Offset,
|
||||
0, computedY)
|
||||
end
|
||||
|
||||
self.setSize(totalSize)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user