Cubyz/src/gui/windows/sound.zig
IntegratedQuantum c2ef9aba62 Remove the root . . . . . . . . . . import, replacing it with @import("main")
To fully solve the ZLS issues I had to also add the import to the other executables.
2025-03-27 21:16:35 +01:00

57 lines
1.7 KiB
Zig

const std = @import("std");
const main = @import("main");
const settings = main.settings;
const Vec2f = main.vec.Vec2f;
const NeverFailingAllocator = main.heap.NeverFailingAllocator;
const gui = @import("../gui.zig");
const GuiComponent = gui.GuiComponent;
const GuiWindow = gui.GuiWindow;
const Button = @import("../components/Button.zig");
const ContinuousSlider = @import("../components/ContinuousSlider.zig");
const VerticalList = @import("../components/VerticalList.zig");
pub var window = GuiWindow{
.contentSize = Vec2f{128, 256},
};
fn musicCallback(newValue: f32) void {
settings.musicVolume = deziBelToLinear(newValue);
settings.save();
}
fn deziBelToLinear(x: f32) f32 {
if(x < -59.95) return 0;
return std.math.pow(f32, 10, x/20);
}
fn linearToDezibel(x: f32) f32 {
const db = 20*std.math.log10(x);
if(db < -59.95) return -60;
return db;
}
fn musicFormatter(allocator: NeverFailingAllocator, value: f32) []const u8 {
const percentage = 100*deziBelToLinear(value);
if(percentage == 0) return allocator.dupe(u8, "Music volume: Off");
return std.fmt.allocPrint(allocator.allocator, "Music volume:", .{}) catch unreachable;
}
const padding: f32 = 8;
pub fn onOpen() void {
const list = VerticalList.init(.{padding, 16 + padding}, 300, 16);
list.add(ContinuousSlider.init(.{0, 0}, 128, -60, 0, linearToDezibel(settings.musicVolume), &musicCallback, &musicFormatter));
list.finish(.center);
window.rootComponent = list.toComponent();
window.contentSize = window.rootComponent.?.pos() + window.rootComponent.?.size() + @as(Vec2f, @splat(padding));
gui.updateWindowPositions();
}
pub fn onClose() void {
if(window.rootComponent) |*comp| {
comp.deinit();
}
}