diff options
Diffstat (limited to 'Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.cpp')
-rw-r--r-- | Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.cpp b/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.cpp new file mode 100644 index 0000000000..c4bee0352c --- /dev/null +++ b/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021, Cesar Torres <shortanemoia@protonmail.com> + * Copyright (c) 2022, the SerenityOS developers. + * Copyright (c) 2022, Nícolas F. R. A. Prado <n@nfraprado.net> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "AlbumCoverVisualizationWidget.h" +#include <AK/LexicalPath.h> +#include <LibCore/File.h> +#include <LibGUI/Painter.h> + +void AlbumCoverVisualizationWidget::paint_event(GUI::PaintEvent& event) +{ + Frame::paint_event(event); + GUI::Painter painter(*this); + + if (m_album_cover) { + painter.draw_scaled_bitmap(frame_inner_rect(), *m_album_cover, m_album_cover->rect(), 1.0f); + } else { + if (!m_serenity_bg) + m_serenity_bg = Gfx::Bitmap::try_load_from_file("/res/wallpapers/sunset-retro.png").release_value_but_fixme_should_propagate_errors(); + painter.draw_scaled_bitmap(frame_inner_rect(), *m_serenity_bg, m_serenity_bg->rect(), 1.0f); + } +} + +ErrorOr<NonnullRefPtr<Gfx::Bitmap>> AlbumCoverVisualizationWidget::get_album_cover(StringView const filename) +{ + auto directory = LexicalPath::dirname(filename); + + static constexpr auto possible_cover_filenames = Array { "cover.png"sv, "cover.jpg"sv }; + for (auto& it : possible_cover_filenames) { + LexicalPath cover_path = LexicalPath::join(directory, it); + if (Core::File::exists(cover_path.string())) + return Gfx::Bitmap::try_load_from_file(cover_path.string()); + } + + return Error::from_string_literal("No cover file found"); +} + +void AlbumCoverVisualizationWidget::start_new_file(StringView filename) +{ + auto album_cover_or_error = get_album_cover(filename); + if (album_cover_or_error.is_error()) + m_album_cover = nullptr; + else + m_album_cover = album_cover_or_error.value(); +} + +void AlbumCoverVisualizationWidget::set_buffer(RefPtr<Audio::Buffer>) +{ +} |