Files
pico-launcher/arm9/source/romBrowser/Theme/Material/MaterialFileInfoCardView.cpp
2025-11-25 17:41:31 +01:00

85 lines
3.3 KiB
C++

#include "common.h"
#include "gui/GraphicsContext.h"
#include "gui/OamBuilder.h"
#include "gui/IVramManager.h"
#include "gui/VramContext.h"
#include "core/math/RgbMixer.h"
#include "core/math/ColorConverter.h"
#include "iconCell.h"
#include "gui/palette/GradientPalette.h"
#include "themes/material/MaterialColorScheme.h"
#include "themes/IFontRepository.h"
#include "MaterialFileInfoCardView.h"
MaterialFileInfoCardView::MaterialFileInfoCardView(const MaterialColorScheme* materialColorScheme,
const IFontRepository* fontRepository)
: _firstLine(176, 16, 50, fontRepository->GetFont(FontType::Medium11))
, _secondLine(176, 16, 50, fontRepository->GetFont(FontType::Regular10))
, _thirdLine(176, 16, 50, fontRepository->GetFont(FontType::Regular10))
, _filenameLabelView(220, 16, 200, fontRepository->GetFont(FontType::Medium7_5))
, _materialColorScheme(materialColorScheme)
{
AddChildTail(&_firstLine);
AddChildTail(&_secondLine);
AddChildTail(&_thirdLine);
_filenameLabelView.SetEllipsis(true);
AddChildTail(&_filenameLabelView);
}
void MaterialFileInfoCardView::InitVram(const VramContext& vramContext)
{
BannerView::InitVram(vramContext);
const auto objVramManager = vramContext.GetObjVramManager();
if (objVramManager)
{
_iconCellVramOffset = objVramManager->Alloc(iconCellTilesLen);
dma_ntrCopy32(3, iconCellTiles, objVramManager->GetVramAddress(_iconCellVramOffset), iconCellTilesLen);
}
}
void MaterialFileInfoCardView::Update()
{
BannerView::Update();
_firstLine.SetPosition(_position.x + 70, _position.y + 130 - 8);
_secondLine.SetPosition(_position.x + 70, _position.y + 145 - 8);
_thirdLine.SetPosition(_position.x + 70, _position.y + 159 - 8);
_filenameLabelView.SetPosition(_position.x + 18, _position.y + 168);
if (_icon)
{
_icon->SetPosition(_position.x + 24, _position.y + 136 - 8);
_icon->Update();
}
}
void MaterialFileInfoCardView::Draw(GraphicsContext& graphicsContext)
{
_firstLine.SetBackgroundColor(_materialColorScheme->secondaryContainer);
_firstLine.SetForegroundColor(_materialColorScheme->onSecondaryContainer);
_secondLine.SetBackgroundColor(_materialColorScheme->secondaryContainer);
_secondLine.SetForegroundColor(_materialColorScheme->onSecondaryContainer);
_thirdLine.SetBackgroundColor(_materialColorScheme->secondaryContainer);
_thirdLine.SetForegroundColor(_materialColorScheme->onSecondaryContainer);
_filenameLabelView.SetBackgroundColor(_materialColorScheme->secondaryContainer);
_filenameLabelView.SetForegroundColor(_materialColorScheme->onSurfaceVariant);
BannerView::Draw(graphicsContext);
const auto& bgColor = _materialColorScheme->secondaryContainer;
const auto& fgColor = _materialColorScheme->mainIconBg;
u32 iconCellPlttRow = graphicsContext.GetPaletteManager().AllocRow(
GradientPalette(bgColor, fgColor));
gfx_oam_entry_t* oam = graphicsContext.GetOamManager().AllocOams(1);
OamBuilder::OamWithSize<64, 64>(_position.x + 18, _position.y + 130 - 8, _iconCellVramOffset >> 7)
.WithPalette16(iconCellPlttRow)
.WithPriority(3)
.Build(oam[0]);
if (_icon)
{
_icon->SetObjVramOffset(_iconVramOffset);
_icon->Draw(graphicsContext, fgColor);
}
}