mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:22:45 +00:00 
			
		
		
		
	SoundPlayer: Move get_image_from_music_file to the advanced view
				
					
				
			This commit is contained in:
		
							parent
							
								
									dcc4868a3c
								
							
						
					
					
						commit
						4c49e0f4a3
					
				
					 3 changed files with 30 additions and 21 deletions
				
			
		|  | @ -6,9 +6,11 @@ | |||
|  */ | ||||
| 
 | ||||
| #include "SoundPlayerWidgetAdvancedView.h" | ||||
| #include "AlbumCoverVisualizationWidget.h" | ||||
| #include "BarsVisualizationWidget.h" | ||||
| #include "M3UParser.h" | ||||
| #include "PlaybackManager.h" | ||||
| #include "SampleWidget.h" | ||||
| #include <AK/DeprecatedString.h> | ||||
| #include <AK/LexicalPath.h> | ||||
| #include <AK/SIMD.h> | ||||
|  | @ -24,9 +26,10 @@ | |||
| #include <LibGUI/Window.h> | ||||
| #include <LibGfx/Bitmap.h> | ||||
| 
 | ||||
| SoundPlayerWidgetAdvancedView::SoundPlayerWidgetAdvancedView(GUI::Window& window, Audio::ConnectionToServer& connection) | ||||
| SoundPlayerWidgetAdvancedView::SoundPlayerWidgetAdvancedView(GUI::Window& window, Audio::ConnectionToServer& connection, ImageDecoderClient::Client& image_decoder_client) | ||||
|     : Player(connection) | ||||
|     , m_window(window) | ||||
|     , m_image_decoder_client(image_decoder_client) | ||||
| { | ||||
|     window.resize(455, 350); | ||||
|     window.set_resizable(true); | ||||
|  | @ -173,6 +176,22 @@ void SoundPlayerWidgetAdvancedView::set_playlist_visible(bool visible) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| RefPtr<Gfx::Bitmap> SoundPlayerWidgetAdvancedView::get_image_from_music_file() | ||||
| { | ||||
|     auto const& pictures = this->pictures(); | ||||
|     if (pictures.is_empty()) | ||||
|         return {}; | ||||
| 
 | ||||
|     // FIXME: We randomly select the first picture available for the track,
 | ||||
|     //        We might want to hardcode or let the user set a preference.
 | ||||
|     auto decoded_image_or_error = m_image_decoder_client.decode_image(pictures[0].data); | ||||
|     if (!decoded_image_or_error.has_value()) | ||||
|         return {}; | ||||
| 
 | ||||
|     auto const decoded_image = decoded_image_or_error.release_value(); | ||||
|     return decoded_image.frames[0].bitmap; | ||||
| } | ||||
| 
 | ||||
| void SoundPlayerWidgetAdvancedView::play_state_changed(Player::PlayState state) | ||||
| { | ||||
|     sync_previous_next_actions(); | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| #include <LibGUI/Slider.h> | ||||
| #include <LibGUI/Splitter.h> | ||||
| #include <LibGUI/Widget.h> | ||||
| #include <LibImageDecoderClient/Client.h> | ||||
| 
 | ||||
| class SoundPlayerWidgetAdvancedView final : public GUI::Widget | ||||
|     , public Player { | ||||
|  | @ -24,6 +25,7 @@ class SoundPlayerWidgetAdvancedView final : public GUI::Widget | |||
| public: | ||||
|     void set_nonlinear_volume_slider(bool nonlinear); | ||||
|     void set_playlist_visible(bool visible); | ||||
|     RefPtr<Gfx::Bitmap> get_image_from_music_file(); | ||||
| 
 | ||||
|     template<typename T, typename... Args> | ||||
|     void set_visualization(Args... args) | ||||
|  | @ -53,13 +55,14 @@ protected: | |||
|     void keydown_event(GUI::KeyEvent&) override; | ||||
| 
 | ||||
| private: | ||||
|     SoundPlayerWidgetAdvancedView(GUI::Window&, Audio::ConnectionToServer&); | ||||
|     SoundPlayerWidgetAdvancedView(GUI::Window&, Audio::ConnectionToServer&, ImageDecoderClient::Client&); | ||||
| 
 | ||||
|     void sync_previous_next_actions(); | ||||
| 
 | ||||
|     void drag_enter_event(GUI::DragEvent& event) override; | ||||
|     void drop_event(GUI::DropEvent& event) override; | ||||
|     GUI::Window& m_window; | ||||
|     ImageDecoderClient::Client& m_image_decoder_client; | ||||
| 
 | ||||
|     RefPtr<GUI::HorizontalSplitter> m_splitter; | ||||
|     RefPtr<GUI::Widget> m_player_view; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||
|  * Copyright (c) 2021, the SerenityOS developers. | ||||
|  * Copyright (c) 2021-2023, the SerenityOS developers. | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
|  | @ -48,7 +48,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments) | |||
|     window->set_icon(app_icon.bitmap_for_size(16)); | ||||
| 
 | ||||
|     // start in advanced view by default
 | ||||
|     Player* player = TRY(window->set_main_widget<SoundPlayerWidgetAdvancedView>(window, audio_client)); | ||||
|     Player* player = TRY(window->set_main_widget<SoundPlayerWidgetAdvancedView>(window, audio_client, decoder_client)); | ||||
| 
 | ||||
|     if (!file_path.is_empty()) { | ||||
|         player->play_file_path(file_path); | ||||
|  | @ -134,23 +134,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments) | |||
|     visualization_actions.add_action(samples); | ||||
| 
 | ||||
|     auto album_cover_visualization = GUI::Action::create_checkable("&Album Cover", [&](auto&) { | ||||
|         auto get_image_from_music_file = [&player, &decoder_client]() -> RefPtr<Gfx::Bitmap> { | ||||
|             auto const& pictures = player->pictures(); | ||||
| 
 | ||||
|             if (pictures.is_empty()) | ||||
|                 return {}; | ||||
| 
 | ||||
|             // FIXME: We randomly select the first picture available for the track,
 | ||||
|             //        We might want to hardcode or let the user set a preference.
 | ||||
|             auto decoded_image_or_error = decoder_client->decode_image(pictures[0].data); | ||||
|             if (!decoded_image_or_error.has_value()) | ||||
|                 return {}; | ||||
| 
 | ||||
|             auto const decoded_image = decoded_image_or_error.release_value(); | ||||
|             return decoded_image.frames[0].bitmap; | ||||
|         }; | ||||
| 
 | ||||
|         static_cast<SoundPlayerWidgetAdvancedView*>(player)->set_visualization<AlbumCoverVisualizationWidget>(get_image_from_music_file); | ||||
|         auto* view = static_cast<SoundPlayerWidgetAdvancedView*>(player); | ||||
|         view->set_visualization<AlbumCoverVisualizationWidget>([&view]() { | ||||
|             return view->get_image_from_music_file(); | ||||
|         }); | ||||
|     }); | ||||
|     TRY(visualization_menu->try_add_action(album_cover_visualization)); | ||||
|     visualization_actions.add_action(album_cover_visualization); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Caoimhe
						Caoimhe