erythros/Applets/VolumeSlider.applet/Run.HC

71 lines
No EOL
2.2 KiB
HolyC

Gui.App();
Window* win = Compositor.CreateWindow(Display.Width(), 32, 256, 32,
WIN_FLAGS_NOHILIGHT | WIN_FLAGS_SKIP);
Context2DWidget* volume_slider_icon = Gui.CreateWidget(win, WIDGET_TYPE_CONTEXT2D, 0, 0, 24, 24);
volume_slider_icon->ctx = NewContext2D(24, 24);
HorizontalSliderWidget* volume_slider = Gui.CreateWidget(win, WIDGET_TYPE_HORZ_SLIDER, 32, 4, 212, 24);
volume_slider->max = 100;
volume_slider->scroll = volume_slider->width;
Context2DWidget* tray_icon = SystemTray.RegisterItem();
Context2D* ctx_volume_muted = Image.FileToContext2D(
"M:/Media/Themes/Umami/Icon/status/audio-volume-muted.png");
Context2D* ctx_volume_low = Image.FileToContext2D(
"M:/Media/Themes/Umami/Icon/status/audio-volume-low.png");
Context2D* ctx_volume_medium = Image.FileToContext2D(
"M:/Media/Themes/Umami/Icon/status/audio-volume-medium.png");
Context2D* ctx_volume_high = Image.FileToContext2D(
"M:/Media/Themes/Umami/Icon/status/audio-volume-high.png");
U0 @volumeslider_show(Widget*)
{
win->x = Display.Width() - 256;
Compositor.ShowWindow(win);
Gui.Window.SetFocus(win);
}
U0 @volumeslider_change(Widget*)
{
I64 volume = Min(ToI64(volume_slider->scroll * 0.47), 100);
Audio.mixer.left = volume;
Audio.mixer.right = volume;
Context2D* update_slider_icon = NULL;
switch (volume) {
case 0:
update_slider_icon = ctx_volume_muted;
break;
case 1...24:
update_slider_icon = ctx_volume_low;
break;
case 25...74:
update_slider_icon = ctx_volume_medium;
break;
case 75...100:
default:
update_slider_icon = ctx_volume_high;
break;
}
CopyRect2D(volume_slider_icon->ctx, 0, 0, update_slider_icon);
CopyRect2D(tray_icon->ctx, 0, 0, update_slider_icon);
Gui.Window.Refresh(Compositor.menubar.win);
}
@volumeslider_change(NULL);
U0 Main()
{
Gui.Window.SetTitle(win, "VolumeSlider");
Compositor.HideWindow(win);
Gui.Widget.SetCallback(tray_icon, "clicked", &@volumeslider_show);
Gui.Widget.SetCallback(volume_slider, "change", &@volumeslider_change);
while (1) {
if (Gui.Window.IsVisible(win) && Compositor.active_win != win)
Compositor.HideWindow(win);
Sleep(1);
}
}
Main;