add gs
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
--[[
|
||||
// TextBox.lua
|
||||
|
||||
// Creates a custom TextBox object that uses the platform virtual keyboard.
|
||||
]]
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
local Modules = GuiRoot:FindFirstChild("Modules")
|
||||
local ShellModules = Modules:FindFirstChild("Shell")
|
||||
|
||||
local PlatformService = nil
|
||||
pcall(function() PlatformService = game:GetService('PlatformService') end)
|
||||
|
||||
local GlobalSettings = require(ShellModules:FindFirstChild('GlobalSettings'))
|
||||
local SoundManager = require(ShellModules:FindFirstChild('SoundManager'))
|
||||
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
||||
|
||||
local function createTextBox(size)
|
||||
local this = {}
|
||||
|
||||
local spacing = Vector2.new()
|
||||
local defaultText = ""
|
||||
|
||||
local keyboardTitle = ""
|
||||
local keyboardDescription = ""
|
||||
local keyboardType = not UserSettings().GameSettings:InStudioMode() and Enum.XboxKeyBoardType.Default
|
||||
local currentInputText = ""
|
||||
|
||||
local keyboardClosedCn = nil
|
||||
local isEnabled = true
|
||||
|
||||
this.OnTextChanged = Utility.Signal()
|
||||
|
||||
-- need custom selection box to fit with the spacing
|
||||
local SelectionBox = Utility.Create'ImageLabel'
|
||||
{
|
||||
Name = "SelectionBox";
|
||||
Image = 'rbxasset://textures/ui/SelectionBox.png';
|
||||
ScaleType = Enum.ScaleType.Slice;
|
||||
SliceCenter = Rect.new(21,21,41,41);
|
||||
BackgroundTransparency = 1;
|
||||
}
|
||||
|
||||
local TextBoxFrame = Utility.Create'ImageButton'
|
||||
{
|
||||
Name = "TextBoxFrame";
|
||||
Size = size;
|
||||
BackgroundTransparency = 1;
|
||||
ImageColor3 = GlobalSettings.TextBoxColor;
|
||||
ImageTransparency = GlobalSettings.TextBoxDefaultTransparency;
|
||||
Image = GlobalSettings.RoundCornerButtonImage;
|
||||
ScaleType = Enum.ScaleType.Slice;
|
||||
SliceCenter = Rect.new(Vector2.new(4, 4), Vector2.new(28, 28));
|
||||
|
||||
SoundManager:CreateSound('MoveSelection');
|
||||
}
|
||||
local DefaultTextLabel = Utility.Create'TextLabel'
|
||||
{
|
||||
Name = "DefaultTextLabel";
|
||||
Size = UDim2.new(1, -spacing.x * 2, 1, -spacing.y * 2);
|
||||
Position = UDim2.new(0, spacing.x, 0, spacing.y);
|
||||
BackgroundTransparency = 1;
|
||||
Font = GlobalSettings.RegularFont;
|
||||
FontSize = GlobalSettings.ButtonSize;
|
||||
TextColor3 = GlobalSettings.TextSelectedColor;
|
||||
TextXAlignment = Enum.TextXAlignment.Left;
|
||||
ZIndex = 2;
|
||||
Parent = TextBoxFrame;
|
||||
}
|
||||
|
||||
local function setTextBoxSizeAndPosition()
|
||||
DefaultTextLabel.Size = UDim2.new(1, -spacing.x * 2, 1, -spacing.y * 2)
|
||||
DefaultTextLabel.Position = UDim2.new(0, spacing.x, 0, spacing.y)
|
||||
SelectionBox.Size = UDim2.new(1, spacing.x * 2 + 24, 1, spacing.y * 2 + 24)
|
||||
SelectionBox.Position = UDim2.new(0, -spacing.x - 12, 0, -spacing.y - 12)
|
||||
end
|
||||
setTextBoxSizeAndPosition()
|
||||
|
||||
--[[ Input ]]--
|
||||
local function onKeyboardClosed(inputText)
|
||||
if UserSettings().GameSettings:InStudioMode() then
|
||||
return
|
||||
end
|
||||
currentInputText = inputText
|
||||
if #currentInputText == 0 then
|
||||
DefaultTextLabel.Text = this:GetDefaultText()
|
||||
elseif keyboardType == Enum.XboxKeyBoardType.Password then
|
||||
DefaultTextLabel.Text = string.rep("*", #currentInputText)
|
||||
else
|
||||
DefaultTextLabel.Text = currentInputText
|
||||
end
|
||||
DefaultTextLabel.Visible = true
|
||||
Utility.DisconnectEvent(keyboardClosedCn)
|
||||
this.OnTextChanged:fire(currentInputText)
|
||||
end
|
||||
|
||||
TextBoxFrame.MouseButton1Click:connect(function()
|
||||
if isEnabled then
|
||||
if UserSettings().GameSettings:InStudioMode() or game:GetService('UserInputService'):GetPlatform() == Enum.Platform.Windows then
|
||||
Utility.DebugLog('Warning: virtual keyboard not accessable in studio')
|
||||
elseif PlatformService then
|
||||
DefaultTextLabel.Visible = false
|
||||
PlatformService:ShowKeyboard(keyboardTitle, keyboardDescription,
|
||||
currentInputText or "", keyboardType)
|
||||
end
|
||||
Utility.DisconnectEvent(keyboardClosedCn)
|
||||
if PlatformService then
|
||||
keyboardClosedCn = PlatformService.KeyboardClosed:connect(onKeyboardClosed)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
TextBoxFrame.SelectionGained:connect(function()
|
||||
Utility.PropertyTweener(TextBoxFrame, "ImageTransparency", GlobalSettings.TextBoxSelectedTransparency,
|
||||
GlobalSettings.TextBoxSelectedTransparency, 0, Utility.EaseInOutQuad, true)
|
||||
end)
|
||||
TextBoxFrame.SelectionLost:connect(function()
|
||||
Utility.PropertyTweener(TextBoxFrame, "ImageTransparency", GlobalSettings.TextBoxDefaultTransparency,
|
||||
GlobalSettings.TextBoxDefaultTransparency, 0, Utility.EaseInOutQuad, true)
|
||||
end)
|
||||
|
||||
function this:SetKeyboardTitle(newTitle)
|
||||
keyboardTitle = newTitle
|
||||
end
|
||||
function this:SetKeyboardDescription(newDescription)
|
||||
keyboardDescription = newDescription
|
||||
end
|
||||
function this:SetKeyboardType(newType)
|
||||
keyboardType = newType
|
||||
end
|
||||
function this:SetEnabled(value)
|
||||
isEnabled = value
|
||||
end
|
||||
function this:SetParent(newParent)
|
||||
TextBoxFrame.Parent = newParent
|
||||
end
|
||||
function this:SetPosition(newPosition)
|
||||
TextBoxFrame.Position = newPosition
|
||||
end
|
||||
function this:SetSpacing(newSpacing)
|
||||
spacing = newSpacing
|
||||
setTextBoxSizeAndPosition()
|
||||
end
|
||||
function this:SetDefaultText(newText)
|
||||
defaultText = newText
|
||||
DefaultTextLabel.Text = defaultText
|
||||
end
|
||||
function this:SetFont(newFont)
|
||||
DefaultTextLabel.Font = newFont
|
||||
end
|
||||
function this:SetFontSize(newFontSize)
|
||||
DefaultTextLabel.FontSize = newFontSize
|
||||
end
|
||||
function this:SetClipsDescendants(clipsDescendants)
|
||||
DefaultTextLabel.ClipsDescendants = clipsDescendants
|
||||
end
|
||||
|
||||
function this:GetContainer()
|
||||
return TextBoxFrame
|
||||
end
|
||||
function this:GetTextBox()
|
||||
return DefaultTextLabel
|
||||
end
|
||||
function this:GetDefaultText()
|
||||
return defaultText
|
||||
end
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return createTextBox
|
||||
Reference in New Issue
Block a user