mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-21 05:06:29 +00:00
52 lines
1.3 KiB
Lua
52 lines
1.3 KiB
Lua
local TextService = game:GetService("TextService")
|
|
|
|
local Roact = require(script:FindFirstAncestor("Rojo").Roact)
|
|
|
|
local Dictionary = require(script.Parent.Parent.Dictionary)
|
|
|
|
local e = Roact.createElement
|
|
|
|
local FitText = Roact.Component:extend("FitText")
|
|
|
|
function FitText:init()
|
|
self.sizeBinding, self.setSize = Roact.createBinding(UDim2.new())
|
|
end
|
|
|
|
function FitText:render()
|
|
local kind = self.props.Kind
|
|
|
|
local containerProps = Dictionary.merge(self.props, {
|
|
Kind = Dictionary.None,
|
|
Padding = Dictionary.None,
|
|
MinSize = Dictionary.None,
|
|
Size = self.sizeBinding
|
|
})
|
|
|
|
return e(kind, containerProps)
|
|
end
|
|
|
|
function FitText:didMount()
|
|
self:updateTextMeasurements()
|
|
end
|
|
|
|
function FitText:didUpdate()
|
|
self:updateTextMeasurements()
|
|
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 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))
|
|
|
|
self.setSize(totalSize)
|
|
end
|
|
|
|
return FitText |