diff --git a/Userland/Applets/Audio/main.cpp b/Userland/Applets/Audio/main.cpp index a06d2a09cb..20d7f40c94 100644 --- a/Userland/Applets/Audio/main.cpp +++ b/Userland/Applets/Audio/main.cpp @@ -23,10 +23,31 @@ #include class AudioWidget final : public GUI::Widget { - C_OBJECT(AudioWidget) + C_OBJECT_ABSTRACT(AudioWidget) + +private: + struct VolumeBitmapPair { + int volume_threshold { 0 }; + NonnullRefPtr bitmap; + }; + public: - AudioWidget() + static ErrorOr> try_create() + { + Vector volume_level_bitmaps = { + { 66, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-high.png")) }, + { 33, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-medium.png")) }, + { 1, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-low.png")) }, + { 0, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-zero.png")) }, + { 0, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-muted.png")) } + }; + return adopt_nonnull_ref_or_enomem(new (nothrow) AudioWidget(move(volume_level_bitmaps))); + } + +private: + AudioWidget(Vector volume_level_bitmaps) : m_audio_client(Audio::ClientConnection::construct()) + , m_volume_level_bitmaps(move(volume_level_bitmaps)) , m_show_percent(Config::read_bool("AudioApplet", "Applet", "ShowPercent", false)) { m_audio_volume = static_cast(m_audio_client->get_main_mix_volume() * 100); @@ -48,12 +69,6 @@ public: update(); }; - m_volume_level_bitmaps.append({ 66, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-high.png").release_value_but_fixme_should_propagate_errors() }); - m_volume_level_bitmaps.append({ 33, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-medium.png").release_value_but_fixme_should_propagate_errors() }); - m_volume_level_bitmaps.append({ 1, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-low.png").release_value_but_fixme_should_propagate_errors() }); - m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-zero.png").release_value_but_fixme_should_propagate_errors() }); - m_volume_level_bitmaps.append({ 0, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/audio-volume-muted.png").release_value_but_fixme_should_propagate_errors() }); - m_slider_window = add(window()); m_slider_window->set_frameless(true); m_slider_window->set_resizable(false); @@ -109,6 +124,7 @@ public: }; } +public: virtual ~AudioWidget() override { } void set_audio_widget_size(bool show_percent) @@ -192,11 +208,6 @@ private: m_slider_window->set_rect(applet_rect.x() - 20, applet_rect.y() - 106, 50, 100); } - struct VolumeBitmapPair { - int volume_threshold { 0 }; - RefPtr bitmap; - }; - NonnullRefPtr m_audio_client; Vector m_volume_level_bitmaps; bool m_show_percent { false };