#include "ArtworkCard.h" #include #include "AppLayers/ScreenLayer.h" #include "Label.h" #include "Screens/ProjectsScreen.h" #include "UserInterface/Engine/Geometry.h" namespace UI { namespace { constexpr float ThumbnailHeight = 160.0f; constexpr float ThumbnailWidth = 220.0f; constexpr float NameHeight = 32.0f; constexpr float NameGap = 8.0f; } Size ArtworkCard::GetThumbnailSize(const Artwork* artwork) { if (!artwork || artwork->GetWidth() <= 0 || artwork->GetHeight() <= 0) { return {ThumbnailWidth, ThumbnailHeight}; } const float aspect = static_cast(artwork->GetWidth()) / static_cast(artwork->GetHeight()); float width = ThumbnailWidth; float height = width / aspect; if (height > ThumbnailHeight) { height = ThumbnailHeight; width = height * aspect; } return {std::max(1.0f, width), std::max(1.0f, height)}; } Size ArtworkCard::GetSizeForArtwork(const Artwork* artwork, bool showName, ArtworkCardSizeMode sizeMode) { if (sizeMode >= ArtworkCardSizeMode::Fill) { return { ThumbnailWidth, ThumbnailHeight + (showName ? NameGap + NameHeight : 0.0f) }; } Size thumbnailSize = GetThumbnailSize(artwork); return { showName ? ThumbnailWidth : thumbnailSize.width, thumbnailSize.height + (showName ? NameGap + NameHeight : 0.0f) }; } // TODO: get rid of showName, generally sizemode fill implies showName false ArtworkCard::ArtworkCard(Artwork* artwork, bool showName, ArtworkCardSizeMode sizeMode) : artwork(artwork), showName(showName), sizeMode(sizeMode), thumbnail(std::make_unique(GetThumbnailSize(artwork))) { focusable = false; thumbnail->SetBgColor(Color(1.0f, 1.0f, 1.0f, 1.0f)); thumbnail->SetBorder(Color(0.0f, 0.0f, 0.0f, 0.54772256f), 2.0f, 0.0f); AddChild(std::move(thumbnail)); if (showName) { auto nameLabel = std::make_unique