mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 10:28:32 +00:00
* chore: savepoint * chore: code style * refactor: add std::string_view constructor for NativeIcon::Spec * chore: add TODO comment * feat: honor per-desktop HIG on when to show menu icons * chore: remove Faenza system-run icon unused sinceb58e95910b* chore: remove Faenza view-refresh icon not needed due tob58e95910b* chore: remove Faenza media-playback-pause icon not needed due tob58e95910b* chore: remove Faenza media-playback-start icon not needed due tob58e95910b* chore: add a safeguard against merging with incomplete TODO items * feat: add more icons refactor: remove some tracer cerr statements * refactor: remove IconCache use from MainWindow * chore: remove Faenza icon set * chore: re-enable remote session network icon * fix: FTBFS on Windows * refactor: use symbolic names for Segoe icons * docs: add links to Segoe MDL2 Assets icon list * chore: savepoint segoe icons work still a WIP; includes test code that should not ship * feat: use segoe::FastForward for action_StartNow feat: use segoe::Move for action_SetLocation refactor: make it easier for devs to force a font at compile time for development work segoe license does not allow bundling but does allow dev work chore: code_style.sh * refactor: remove unused addEmblem() * docs: add code comment on how to force an icon font * fix: Win 10, 11 icons play nicely with dark mode * chore: savepoint add draft of SF Symbol -> QPixmap loader * chore: remove dangling font reference from qrc file * fix: FTBFS * refactor: use bribri code for NSImage -> QPixmap * feat: support dark, light mode when rendering SF Symbol monochrome icons * fixup! feat: support dark, light mode when rendering SF Symbol monochrome icons fix: fail gracefully on macOS 11 * chore: code style * chore: tweak some SF Symbol icon choices * chore: consistent uppercase for hex segoe QChars * chore: undefine DEV_FORCE_FONT_FAMILY and DEV_FORCE_FONT_RESOURCE * chore: savepoint * refactor: clean up NativeIcon impl * refactor: remove unused MenuMode::Other * refactor: DRY in FilterBar::createActivityCombo() * chore: remove obsolete code comment * refactor: rename icons::Facet as icons::Type * fix: oops * refactor: minor cleanup * fix: tyop * chore: remove unused #includes * fix: add modes for some icons * refactor: tweak some icon choices on macOS * fix: ensure icons are visible on File, Help menus fix: remove unused local variable * refactor: tweak some icon choices for XDG * refactor: remove the fallback QStyle::StandardPixmaps These interfere with deciding whether an icon is well-defined and unambiguous as per the macOS and Windows HIG guidelines. If a standard or unambiguous icon exists in the native icon sets, specify it with an SF Symbols name, a Segoe codepoint, or XDG standard icon name. Otherwise, leave those fields blank. * refactor: remove unused #includes * docs: add "choosing icons" section in NativeIcons.cc * refactor: simplify icons::shouldBeShownInMenu() * refactor: reduce unnecessary code shear from main * refactor: make TorrentDelegate::warning_emblem_ const * refactor: extract-method MainWindow::updateActionIcons() * feat: update MainWindow icons when light/dark theme changes * feat: restore the QStyle::StandardPixmaps as fallbacks Can be used on older Windows / macOS if Segoe or SF Symbols are unavailable * refactor: add button text for add/edit/remove tracker buttons QStyle::StandardPixmap doesn't have good icons for these, so let's ensure that these buttons have visible text. * fix: building NativeIconMac.mm on mac even if not clang * chore: iwyu in new code * docs: tweak the "Choosing Icons" comments again * fix: handle changed QStyles in icons::icon() do not cache point_sizes set between calls refactor: const correctness * fixup! refactor: simplify icons::shouldBeShownInMenu() refactor: minor code tweak, declare vars in order that they are used
71 lines
1.8 KiB
C++
71 lines
1.8 KiB
C++
// This file Copyright © Mnemosyne LLC.
|
|
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
|
|
// or any future license endorsed by Mnemosyne LLC.
|
|
// License text can be found in the licenses/ folder.
|
|
|
|
#pragma once
|
|
|
|
#if !defined(_WIN32)
|
|
#include <unordered_set>
|
|
#endif
|
|
|
|
#include <optional>
|
|
#include <unordered_map>
|
|
|
|
#include <QFileIconProvider>
|
|
#include <QIcon>
|
|
#include <QString>
|
|
#include <QStyle>
|
|
|
|
#include "Utils.h" // std::hash<QString>()
|
|
|
|
#if defined(_WIN32)
|
|
class QFileInfo;
|
|
#endif
|
|
|
|
class QModelIndex;
|
|
|
|
class IconCache
|
|
{
|
|
public:
|
|
static IconCache& get();
|
|
|
|
[[nodiscard]] constexpr auto const& folderIcon() const noexcept
|
|
{
|
|
return folder_icon_;
|
|
}
|
|
|
|
[[nodiscard]] constexpr auto const& fileIcon() const noexcept
|
|
{
|
|
return file_icon_;
|
|
}
|
|
|
|
QIcon guessMimeIcon(QString const& filename, QIcon fallback = {}) const;
|
|
QIcon getMimeTypeIcon(QString const& mime_type, bool multifile) const;
|
|
|
|
protected:
|
|
IconCache() = default;
|
|
|
|
private:
|
|
QIcon const folder_icon_ = QFileIconProvider().icon(QFileIconProvider::Folder);
|
|
QIcon const file_icon_ = QFileIconProvider().icon(QFileIconProvider::File);
|
|
|
|
mutable std::unordered_map<QString, QIcon> name_to_icon_;
|
|
mutable std::unordered_map<QString, QIcon> name_to_emblem_icon_;
|
|
|
|
#if defined(_WIN32)
|
|
void addAssociatedFileIcon(QFileInfo const& file_info, unsigned int icon_size, QIcon& icon) const;
|
|
#else
|
|
mutable std::unordered_set<QString> suffixes_;
|
|
mutable std::unordered_map<QString, QIcon> ext_to_icon_;
|
|
QIcon getMimeIcon(QString const& filename) const;
|
|
#endif
|
|
|
|
QIcon getThemeIcon(QString const& name, std::optional<QStyle::StandardPixmap> const& fallback = {}) const;
|
|
|
|
QIcon getThemeIcon(
|
|
QString const& name,
|
|
QString const& fallbackName,
|
|
std::optional<QStyle::StandardPixmap> const& fallbackPixmap) const;
|
|
};
|