[v3!] TopbarPlus v3.0.0 | Construct intuitive topbar icons; customise them with themes, dropdowns, captions, labels and much more

@ForeverHD Can you add support for the background transparency setting? It would be nice lol :slight_smile:

Screenshot 2025-02-22 201600

1 Like

I don’t know if I’m just stupid, but is it possible to make a dropdown icon autoDeselect upon selecting a normal icon or menu? Also, aren’t notifications supposed to go to the parent of the dropdown?

I’m sure you can temporarily add this yourself with the UserSettings() Global, (until ForeverHD implmenets it officially)

(It’s not in UserSettings, its in GuiService: GuiService | Documentation - Roblox Creator Hub)

…But yeah, ig so.

What? I’m sorry I have no idea what you’re talking about. Just look up UserSettings() you can most likely find the transparency setting in there, and apply the background accordingly.

I checked, it’s not in UserSettings(), it’s in game.GuiService.PreferredTransparency.

Roblox changed the topbar’s colour and transparency. You can be able to change it to the new using the code below until TopbarPlus is updated to account for this

local ReplicatedFirst = game:GetService("ReplicatedFirst")
local GuiService = game:GetService("GuiService")
local Icon = require(ReplicatedFirst:WaitForChild("Icon")) -- Change this to where your TopBarPlus module is
Icon.modifyBaseTheme{
	{"IconButton", "BackgroundColor3", Color3.fromRGB(18, 18, 20)};
	{"IconButton", "BackgroundTransparency", (0.08*GuiService.PreferredTransparency)};
}
GuiService:GetPropertyChangedSignal("PreferredTransparency"):Connect(function()
	Icon.modifyBaseTheme{"IconButton", "BackgroundTransparency", (0.08*GuiService.PreferredTransparency)}
end)

I took the values directly from what was shown in CoreGui. Hope that these values get applied to the default set in future releases.

Unfortunately, the caption colour cannot be changes as far as I know and cannot be converted to the new colour

5 Likes

How did you get the values from CoreGui?

hey @ForeverHD could u check ur pull requests for wally / type support in topbar+, I also added a pull request for convertLabelToNumberSpinner support for NumberSpinner Module compatibility. If you want numberspinner support add this method to the Icon module:

function Icon:convertLabelToNumberSpinner(numberSpinner)
	local label = self:getInstance("IconLabel")
	label.Transparency = 1
	numberSpinner.Parent = label

	local propertiesToChange = {
		"FontFace",
		"BorderSizePixel",
		"Position",
		"BorderColor3",
		"Rotation",
		"TextScaled",
		"TextStrokeTransparency",
		"TextStrokeColor3",
		"TextStrokeTransparency",
		"TextYAlignment",
		"Size",
		"TextSize",
		"TextXAlignment",
		"TextColor3",
		"AnchorPoint",
	}
	for i, property in propertiesToChange do
		numberSpinner[property] = label[property]
	end

	local invalidProperties = {
		"TextBounds",
		"TextFits",
		"AbsolutePosition",
		"AbsoluteSize",
		"OpenTypeFeaturesError",
                "GuiState"
	}
	self:addToJanitor(label.Changed:Connect(function(property)
		if table.find(invalidProperties, property) then
			return
		end
		numberSpinner[property] = label[property]
	end))

	self:updateParent()
	return self
end

When you press play on Studio, open up CoreGui and you can find the values within the topbar GUI inside of it. You can search for the menu icon or the unibar and use the values from there with preferred transparency set to transparent. If you do not see the CoreGui service, you need to go into your Studio settings to make it visible

put the localscript inside replicatedStorage

If possible, could you please update the gui colors/theme and the dropdowns and add more animations to make it match the current roblox gui? Thanks

local Icon = require(game.ReplicatedStorage.Icon)

local sound = script.Parent:WaitForChild("ButtonClick")
local bindable = game:GetService("ReplicatedStorage"):WaitForChild("Events"):WaitForChild("MenuOff")

Icon.new()
	:setLabel("Menu")
	:setCaption("Menu")
	:bindEvent("selected", function()
		sound:Play()
	end)
	:setOrder(0)
	:oneClick(true)
	:align("Right")
	:setEnabled(false)

bindable.Event:Connect(function(Icon)
	Icon:setEnabled(true)
end)

Why won’t this work?

You’re using Icon:SetEnabled on the module, not the icon

Pretty sure you can use
:call(icon) in the chain since itll return the icon, allowing you to excend the functionality there

1 Like

Alright 1 moment, if it errors I’ll reply to your post again

Thanks, it fixed it.

EDIT: For anyone who is having this issue in the future, here is the updated script:

local Icon = require(game.ReplicatedStorage.Icon)

local sound = script.Parent:WaitForChild("ButtonClick")

Icon.new()
	:setLabel("Menu")
	:setCaption("Menu")
	:bindEvent("selected", function()
		sound:Play()
	end)
	:setOrder(0)
	:oneClick(true)
	:align("Right")
	:setEnabled(false)
	:call(function(icon) -- changed from here and below
		local bindable = game:GetService("ReplicatedStorage"):WaitForChild("Events"):WaitForChild("MenuOff")
		
		bindable.Event:Connect(function()
			icon:setEnabled(true)
		end)
	end)
1 Like

Is there any way to customize a theme for captions?

First thing when i saw this post:

  • I love the new ui (simple, clean and amazing)
  • The scripting thing was really buggy to handle but I tried my best to figuring out
  • V3 more better because there are many features you can do than V2.

Love the new version. Hope you’re doing well :fist:t2:

How do you change the size of each bar?

Using multiple buttons. How do I make the buttons stay selected when another is pressed? I’m bad at reading, sorry

Hey! Sorry for the insignificant post, but I’ve found a typo on the API page - Listed below.
methods>setName’s code block reads icon:set(name) and not icon:setName(string)

This is also my first post of the Roblox Devforum so please excuse any mistakes.

1 Like