Skip to content
This repository was archived by the owner on Aug 20, 2024. It is now read-only.

Commit 9c37b6c

Browse files
committed
New selection visual handling.
1 parent 17fa733 commit 9c37b6c

File tree

2 files changed

+74
-151
lines changed

2 files changed

+74
-151
lines changed

src/Workspace/SignsInternal/StudioWidgets/LabeledButton.lua

Lines changed: 51 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,11 @@ local kMinLabelWidth = GuiUtilities.kCheckboxMinLabelWidth
1313
local kMinMargin = GuiUtilities.kCheckboxMinMargin
1414
local kMinButtonWidth = kCheckboxWidth;
1515

16-
local kMinLabelSize = UDim2.new(0, kMinLabelWidth, 0, kMinHeight)
17-
local kMinLabelPos = UDim2.new(0, kMinButtonWidth + kMinMargin, 0, kMinHeight/2)
18-
19-
local kMinButtonSize = UDim2.new(0, kMinButtonWidth, 0, kMinButtonWidth)
20-
local kMinButtonPos = UDim2.new(0, 0, 0, kMinHeight/2)
21-
22-
local kCheckImageWidth = kMinMargin
23-
local kMinCheckImageWidth = kCheckImageWidth
24-
25-
local kCheckImageSize = UDim2.new(0, kCheckImageWidth, 0, kCheckImageWidth)
26-
local kMinCheckImageSize = UDim2.new(0, kMinCheckImageWidth, 0, kMinCheckImageWidth)
27-
28-
local kEnabledCheckImage = "rbxasset://textures/DeveloperFramework/checkbox_checked_light.png"
29-
local kDisabledCheckImage = "rbxasset://textures/DeveloperFramework/checkbox_indeterminate_light.png"
30-
local kHoverCheckImage = "rbxasset://textures/DeveloperFramework/checkbox_unchecked_hover_light.png"
31-
local kCheckboxFrameImage = "rbxasset://textures/DeveloperFramework/checkbox_unchecked_light.png"
32-
33-
local kEnabledCheckImageDark = "rbxasset://textures/DeveloperFramework/checkbox_checked_dark.png"
34-
local kDisabledCheckImageDark = "rbxasset://textures/DeveloperFramework/checkbox_indeterminate_dark.png"
35-
local kHoverCheckImageDark = "rbxasset://textures/DeveloperFramework/checkbox_unchecked_hover_dark.png"
36-
local kCheckboxFrameImageDark = "rbxasset://textures/DeveloperFramework/checkbox_unchecked_dark.png"
37-
3816
LabeledButtonClass = {}
3917
LabeledButtonClass.__index = LabeledButtonClass
4018

4119
LabeledButtonClass.kMinFrameSize = UDim2.new(0, kMinLabelWidth + kMinMargin + kMinButtonWidth, 0, kMinHeight)
4220

43-
4421
function LabeledButtonClass.new(nameSuffix, labelText, initValue, initDisabled)
4522
local self = {}
4623
setmetatable(self, LabeledButtonClass)
@@ -49,47 +26,39 @@ function LabeledButtonClass.new(nameSuffix, labelText, initValue, initDisabled)
4926
local initDisabled = not not initDisabled
5027

5128
local frame = GuiUtilities.MakeDefaultFixedHeightFrame("CBF" .. nameSuffix)
29+
frame.Size = UDim2.new(1, 0, GuiUtilities.kDefaultPropertyHeight, 0)
5230

5331
local fullBackgroundButton = Instance.new("TextButton")
5432
fullBackgroundButton.Name = "FullBackground"
5533
fullBackgroundButton.Parent = frame
56-
fullBackgroundButton.BackgroundTransparency = 1
57-
fullBackgroundButton.Size = UDim2.new(1, 0, 1, 0)
34+
fullBackgroundButton.BorderSizePixel = 0
35+
fullBackgroundButton.BackgroundTransparency = 0
36+
fullBackgroundButton.Size = UDim2.new(0, GuiUtilities.DefaultLineLabelWidth, 1, 0)
5837
fullBackgroundButton.Position = UDim2.new(0, 0, 0, 0)
5938
fullBackgroundButton.Text = ""
60-
61-
local label = GuiUtilities.MakeDefaultPropertyLabel(labelText, true)
39+
fullBackgroundButton.AutoButtonColor = false
40+
41+
local label = Instance.new("TextButton")
42+
label.Text = labelText
43+
label.RichText = true
44+
label.Name = 'Label'
45+
label.Font = GuiUtilities.kDefaultFontFace
46+
label.TextSize = GuiUtilities.kDefaultFontSize
47+
label.BackgroundTransparency = 1
48+
label.TextXAlignment = Enum.TextXAlignment.Center
49+
label.AnchorPoint = Vector2.new(0.5, 0.5)
50+
label.AutoButtonColor = false
51+
label.Position = UDim2.new(0.5, 0, 0.5, GuiUtilities.kTextVerticalFudge)
52+
label.Size = UDim2.new(1, 0, 1, 0)
6253
label.Parent = fullBackgroundButton
6354

64-
local button = Instance.new('ImageButton')
65-
button.Name = 'Button'
66-
button.Size = UDim2.new(0, kCheckboxWidth, 0, kCheckboxWidth)
67-
button.AnchorPoint = Vector2.new(0, .5)
68-
button.BackgroundTransparency = 1
69-
button.Position = UDim2.new(0, GuiUtilities.DefaultLineElementLeftMargin, .5, 0)
70-
button.Parent = fullBackgroundButton
71-
button.BorderSizePixel = 0
72-
button.AutoButtonColor = false
73-
74-
local checkImage = Instance.new("ImageLabel")
75-
checkImage.Name = "CheckImage"
76-
checkImage.Parent = button
77-
checkImage.Visible = false
78-
checkImage.Size = kCheckImageSize
79-
checkImage.AnchorPoint = Vector2.new(0.5, 0.5)
80-
checkImage.Position = UDim2.new(0.5, 0, 0.5, 0)
81-
checkImage.BackgroundTransparency = 1
82-
checkImage.BorderSizePixel = 0
83-
8455
self._frame = frame
85-
self._button = button
8656
self._label = label
8757

8858
self._clicked = false
8959
self._hovered = false
9060

91-
self._checkImage = checkImage
92-
self._fullBackgroundButton = fullBackgroundButton
61+
self._button = fullBackgroundButton
9362
self._useDisabledOverride = false
9463
self._disabledOverride = false
9564
self:SetDisabled(initDisabled)
@@ -99,26 +68,6 @@ function LabeledButtonClass.new(nameSuffix, labelText, initValue, initDisabled)
9968

10069
self:_SetupMouseClickHandling()
10170

102-
local function updateImages()
103-
if (GuiUtilities:ShouldUseIconsForDarkerBackgrounds()) then
104-
self._button.Image = kCheckboxFrameImageDark
105-
if self._checkImage.Image == kDisabledCheckImage then
106-
self._checkImage.Image = kDisabledCheckImageDark
107-
else
108-
self._checkImage.Image = kEnabledCheckImageDark
109-
end
110-
else
111-
self._button.Image = kCheckboxFrameImage
112-
if self._checkImage.Image == kDisabledCheckImageDark then
113-
self._checkImage.Image = kDisabledCheckImage
114-
else
115-
self._checkImage.Image = kEnabledCheckImage
116-
end
117-
end
118-
end
119-
settings().Studio.ThemeChanged:Connect(updateImages)
120-
updateImages()
121-
12271
local function updateFontColors()
12372
self:UpdateFontColors()
12473
end
@@ -132,72 +81,69 @@ function LabeledButtonClass:_MaybeToggleState()
13281
if not self._disabled then
13382
self:SetValue(not self._value)
13483
end
84+
13585
end
13686

13787
function LabeledButtonClass:_SetupMouseClickHandling()
138-
self._button.MouseButton1Down:Connect(function()
139-
self._clicked = true
140-
self:_MaybeToggleState()
141-
end)
142-
143-
self._fullBackgroundButton.InputBegan:Connect(function(input)
88+
self._label.InputBegan:Connect(function(input)
14489
if (input.UserInputType == Enum.UserInputType.MouseMovement) then
14590
self._hovered = true
14691
self:_updateCheckboxVisual()
14792
end
14893
end)
14994

150-
self._fullBackgroundButton.InputEnded:Connect(function(input)
95+
self._label.InputEnded:Connect(function(input)
15196
if (input.UserInputType == Enum.UserInputType.MouseMovement) then
15297
self._hovered = false
15398
self._clicked = false
15499
self:_updateCheckboxVisual()
155100
end
156101
end)
157102

158-
self._fullBackgroundButton.MouseButton1Down:Connect(function()
103+
self._label.MouseButton1Down:Connect(function()
159104
self._clicked = true
160105
self:_updateCheckboxVisual()
161106
self:_MaybeToggleState()
162107
end)
163108
end
164109

165-
-- Too buggy with other GuiObjects to be used.
166-
function LabeledButtonClass:_updateCheckboxVisual()
167-
-- if (self._clicked) then
168-
-- self._button.Image = kCheckboxFrameImage
169-
-- elseif (self._hovered) then
170-
-- self._button.Image = kHoverCheckImage
171-
-- else
172-
-- self._button.Image = kCheckboxFrameImage
173-
-- end
174-
end
175-
176110
function LabeledButtonClass:_HandleUpdatedValue()
177-
self._checkImage.Visible = self:GetValue()
111+
self._button.Visible = self:GetValue()
178112

179113
if (self._valueChangedFunction) then
180114
self._valueChangedFunction(self:GetValue())
181115
end
182116
end
183117

184-
-- Small checkboxes are a different entity.
185-
-- All the bits are smaller.
186-
-- Fixed width instead of flood-fill.
187-
-- Box comes first, then label.
188-
function LabeledButtonClass:UseSmallSize()
189-
self._label.TextSize = kMinTextSize
190-
self._label.Size = kMinLabelSize
191-
self._label.Position = kMinLabelPos
192-
self._label.TextXAlignment = Enum.TextXAlignment.Left
193-
194-
self._button.Size = kMinButtonSize
195-
self._button.Position = kMinButtonPos
118+
-- Too buggy with other GuiObjects to be used.
119+
function LabeledButtonClass:_updateCheckboxVisual()
120+
local kButtonDefaultBackgroundColor = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button, Enum.StudioStyleGuideModifier.Default)
121+
local kButtonHoverBackgroundColor = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button, Enum.StudioStyleGuideModifier.Hover)
122+
local kButtonPressedBackgroundColor = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button, Enum.StudioStyleGuideModifier.Pressed)
123+
124+
if (self._value) then
125+
self._button.BackgroundColor3 = kButtonPressedBackgroundColor
126+
elseif (self._clicked) then
127+
self._button.BackgroundColor3 = kButtonPressedBackgroundColor
128+
elseif (self._hovered) then
129+
self._button.BackgroundColor3 = kButtonHoverBackgroundColor
130+
else
131+
self._button.BackgroundColor3 = kButtonDefaultBackgroundColor
132+
end
133+
end
196134

197-
self._checkImage.Size = kMinCheckImageSize
135+
function LabeledButtonClass:_HandleUpdatedValue()
136+
if (self:GetValue())then
137+
kButtonBackgroundColor = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button, Enum.StudioStyleGuideModifier.Pressed)
138+
self._button.BackgroundColor3 = kButtonBackgroundColor
139+
else
140+
kButtonBackgroundColor = settings().Studio.Theme:GetColor(Enum.StudioStyleGuideColor.Button, Enum.StudioStyleGuideModifier.Default)
141+
self._button.BackgroundColor3 = kButtonBackgroundColor
142+
end
198143

199-
self._frame.Size = LabeledButtonClass.kMinFrameSize
200-
self._frame.BackgroundTransparency = 1
144+
if (self._valueChangedFunction) then
145+
self._valueChangedFunction(self:GetValue())
146+
end
201147
end
202148

203149
function LabeledButtonClass:GetFrame()
@@ -240,20 +186,6 @@ function LabeledButtonClass:SetDisabled(newDisabled)
240186
self._useDisabledOverride = false
241187
end
242188

243-
if (newDisabled) then
244-
if (GuiUtilities:ShouldUseIconsForDarkerBackgrounds()) then
245-
self._checkImage.Image = kDisabledCheckImageDark
246-
else
247-
self._checkImage.Image = kDisabledCheckImage
248-
end
249-
else
250-
if (GuiUtilities:ShouldUseIconsForDarkerBackgrounds()) then
251-
self._checkImage.Image = kEnabledCheckImageDark
252-
else
253-
self._checkImage.Image = kEnabledCheckImage
254-
end
255-
end
256-
257189
self:UpdateFontColors()
258190
self._button.BackgroundColor3 = self._disabled and GuiUtilities.kButtonDisabledBackgroundColor or GuiUtilities.kButtonDefaultBackgroundColor
259191
self._button.BorderColor3 = self._disabled and GuiUtilities.kButtonDisabledBorderColor or GuiUtilities.kButtonDefaultBorderColor

src/Workspace/SignsInternal/StudioWidgets/LabeledRadioButton.lua

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,36 @@
66
--
77
----------------------------------------
88
GuiUtilities = require(script.Parent.GuiUtilities)
9-
LabeledCheckbox = require(script.Parent.LabeledButton)
10-
11-
local kButtonImage = "rbxasset://textures/RoactStudioWidgets/slider_caret.png"
12-
local kBulletImage = "rbxasset://textures/RoactStudioWidgets/button_radiobutton_chosen.png"
13-
14-
local kButtonImageDark = "rbxasset://textures/RoactStudioWidgets/slider_caret.png"
15-
local kBulletImageDark = "rbxasset://textures/RoactStudioWidgets/button_radiobutton_chosen.png"
16-
17-
local kFrameSize = 14
18-
local kBulletSize = 6
9+
LabeledButton = require(script.Parent.LabeledButton)
1910

2011
LabeledRadioButtonClass = {}
2112
LabeledRadioButtonClass.__index = LabeledRadioButtonClass
22-
setmetatable(LabeledRadioButtonClass, LabeledCheckbox)
13+
setmetatable(LabeledRadioButtonClass, LabeledButton)
2314

2415
function LabeledRadioButtonClass.new(nameSuffix, labelText)
25-
local newButton = LabeledCheckbox.new(nameSuffix, labelText, false)
16+
local newButton = LabeledButton.new(nameSuffix, labelText, false)
2617
setmetatable(newButton, LabeledRadioButtonClass)
2718

28-
newButton:UseSmallSize()
29-
newButton._checkImage.Position = UDim2.new(0.5, 0, 0.5, 0)
30-
newButton._checkImage.Image = kBulletImage
31-
newButton._checkImage.Size = UDim2.new(0, kBulletSize, 0, kBulletSize)
32-
33-
newButton._button.Image = kButtonImage
34-
newButton._button.Size = UDim2.new(0, kFrameSize, 0, kFrameSize)
35-
newButton._button.BackgroundTransparency = 1
36-
37-
local function updateImages()
38-
if (GuiUtilities:ShouldUseIconsForDarkerBackgrounds()) then
39-
newButton._checkImage.Image = kBulletImageDark
40-
newButton._button.Image = kButtonImageDark
41-
else
42-
newButton._checkImage.Image = kBulletImage
43-
newButton._button.Image = kButtonImage
44-
end
45-
end
46-
settings().Studio.ThemeChanged:Connect(updateImages)
47-
updateImages()
19+
-- newButton:UseSmallSize()
20+
-- newButton._checkImage.Position = UDim2.new(0.5, 0, 0.5, 0)
21+
-- newButton._checkImage.Image = kBulletImage
22+
-- newButton._checkImage.Size = UDim2.new(0, kBulletSize, 0, kBulletSize)
23+
24+
-- newButton._button.Image = kButtonImage
25+
-- newButton._button.Size = UDim2.new(0, kFrameSize, 0, kFrameSize)
26+
-- newButton._button.BackgroundTransparency = 1
27+
28+
-- local function updateImages()
29+
-- if (GuiUtilities:ShouldUseIconsForDarkerBackgrounds()) then
30+
-- newButton._checkImage.Image = kBulletImageDark
31+
-- newButton._button.Image = kButtonImageDark
32+
-- else
33+
-- newButton._checkImage.Image = kBulletImage
34+
-- newButton._button.Image = kButtonImage
35+
-- end
36+
-- end
37+
-- settings().Studio.ThemeChanged:Connect(updateImages)
38+
-- updateImages()
4839

4940
return newButton
5041
end

0 commit comments

Comments
 (0)