Fix broken icon layout when loading Cemu on Gnome (#171)

The icon view was all broken from having entries inserted with non
loaded icons, resulting in a layout that had the wrong size and no
obvious way to trigger a resizing without incurring a costly window
redraw.

Solution: When the icon is not yet loaded insert a transparent
placeholder icon.
This commit is contained in:
bitscher 2022-09-05 05:51:24 -07:00 committed by GitHub
parent 0ed4fdcd78
commit 917b80941e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -52,10 +52,17 @@ wxGameList::wxGameList(wxWindow* parent, wxWindowID id)
{
CreateListColumns();
const char transparent_bitmap[kIconWidth * kIconWidth * 4] = {0};
wxBitmap blank(transparent_bitmap, kIconWidth, kIconWidth);
blank.UseAlpha(true);
m_image_list = new wxImageList(kIconWidth, kIconWidth);
m_image_list->Add(blank);
wxListCtrl::SetImageList(m_image_list, wxIMAGE_LIST_NORMAL);
m_image_list_small = new wxImageList(kListIconWidth, kListIconWidth);
wxBitmap::Rescale(blank, {kListIconWidth, kListIconWidth});
m_image_list_small->Add(blank);
wxListCtrl::SetImageList(m_image_list_small, wxIMAGE_LIST_SMALL);
m_tooltip_window = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
@ -857,14 +864,13 @@ void wxGameList::OnGameEntryUpdatedByTitleId(wxTitleIdEvent& event)
isNewEntry = true;
}
int icon = 0;
int icon_small = 0;
bool hasIcon = QueryIconForTitle(baseTitleId, icon, icon_small);
int icon = 0; /* 0 is the default empty icon */
int icon_small = 0; /* 0 is the default empty icon */
QueryIconForTitle(baseTitleId, icon, icon_small);
if (m_style == Style::kList)
{
if(hasIcon)
SetItemColumnImage(index, ColumnIcon, icon_small);
SetItemColumnImage(index, ColumnIcon, icon_small);
SetItem(index, ColumnName, wxHelper::FromUtf8(GetNameByTitleId(baseTitleId)));
@ -912,13 +918,11 @@ void wxGameList::OnGameEntryUpdatedByTitleId(wxTitleIdEvent& event)
}
else if (m_style == Style::kIcons)
{
if(hasIcon)
SetItemImage(index, icon);
SetItemImage(index, icon);
}
else if (m_style == Style::kSmallIcons)
{
if (hasIcon)
SetItemImage(index, icon_small);
SetItemImage(index, icon_small);
}
if (isNewEntry)
UpdateItemColors(index);