hey there, I’ve been working on a username system that includes a device icon beside the tag. I’ve wrote a script to offset the icon frame, this is how it basically works:
- calculate length of username using TextService:GetTextSize()
- get the textlabel’s x absolutesize, then add that with the iconSize’s half
- convert offset to scale
- clamp the value so it doesn’t go beyond the gui’s bounds
although this seemed kinda simple to me, it’s yielding very inconsistent results, sometimes it’ll yield 0.69, 0.7, 0.83000001 or 0.63
source code:
local textService = game:GetService("TextService")
local playerTag = script.Parent
local deviceIcon = playerTag.Parent:WaitForChild("DeviceIcon")
local displayName, displayText = playerTag.Display, playerTag.Display:WaitForChild("TextLabel")
local userName, userText = playerTag.Username, playerTag.Username:WaitForChild("TextLabel")
local iconSize = deviceIcon.AbsoluteSize
local function getTextBounds()
local message = displayText.Text
local size = displayText.AbsoluteSize
local bounds = textService:GetTextSize(message, 26, Enum.Font.Montserrat, size)
return (bounds + Vector2.new(1, 1)) / 2
end
local function convertOffset(offset, absSize)
local scale = offset / absSize
scale = scale * 100
scale = math.ceil(scale)
scale = scale / 100
return scale --round up to 2 decimals
end
local function offsetDeviceIcon()
repeat task.wait() until displayName.AbsoluteSize.X ~= 0
print("X not 0")
print("double checking: ".. displayName.AbsoluteSize.X)
local absX = displayName.AbsoluteSize.X
local absY = displayName.AbsoluteSize.Y
local offset1 = getTextBounds().X + (iconSize.X / 2)
local offset2 = convertOffset(offset1, absX) + 0.5
local offset3 = math.clamp(offset2, 0.5, 1)
print("Offset 1: ".. offset1)
print("Offset 2: ".. offset2)
print("Offset 3: ".. offset3)
return offset3
end
deviceIcon.Position = UDim2.new(offsetDeviceIcon(), 0, deviceIcon.Position.Y.Scale, 0)
--for i = 1, 5 do
-- deviceIcon.Position = UDim2.new(offsetDeviceIcon(), 0, deviceIcon.Position.Y.Scale, 0)
-- task.wait(3 * i)
--end
--print("abs size: ".. absX)
--print(offset2)
--deviceIcon.Position = UDim2.
results:
I have no idea why this happens, and I’ve spent so long trying to debug it, so if anyone could help me out, that’d be great, thank you!

