icons.py

lunaengine/misc/icons.py

Themed Icon System for LunaEngine
- Supports PNG icons with white/transparent masks
- Flat color recoloring via BLEND_RGBA_MULT
- Gradient recoloring via ColorKeys (linear or radial)
- Optional scaling to a uniform size (square)
- Caching per (color, size) combination
- Factory class Icons with access to all built‑in icons

class Icon

Description

A theme‑aware icon that can be recoloured with a flat colour or a gradient.

The original PNG must be a white shape on a transparent background.
Scaling is performed once per requested size.

Methods
def __init__(self: Any, icon_filename: str, size: Optional[int] = None) -> Any
Args:
   icon_filename: name of the PNG file inside the icons folder.
   size: if given, the icon will be scaled to a square of this size.
         If None, the original dimensions are kept.
def get_surface(self: Any, color: Union[Color, Tuple[int, int, int], ColorKeys, None], gradient_type: Literal['linear', 'radial'] = 'linear', gradient_angle: float = 0.0) -> pygame.Surface
Return a recoloured (and optionally scaled) version of the icon.

Args:
   color: flat colour (Color or (r,g,b)) or a ColorKeys gradient.
   gradient_type: only used if color is a ColorKeys: 'linear' or 'radial'.
   gradient_angle: only used for linear gradients (degrees).
def _apply_flat_color(self: Any, color: Union[Color, Tuple[int, int, int], None]) -> pygame.Surface
Recolour with a flat RGB colour using multiply blending.
def _apply_gradient(self: Any, color_keys: ColorKeys, gradient_type: str = 'linear', angle: float = 0.0) -> pygame.Surface
Generate a gradient surface and multiply it with the icon mask.
def clear_cache(self: Any) -> None
Clear the internal cache, forcing fresh recolouring on next get_surface().

class Icons

Description

Factory class for all built‑in icons.

Each static method returns an Icon instance for the corresponding PNG.
The optional `size` parameter sets the desired square size.

Attributes
_ALL_ICON_NAMES: Any = ['success', 'info', 'warn', 'error', 'home', 'folder', 'plus', 'cross', 'search', 'settings', 'save', 'load', 'picture']
Methods
def SUCCESS(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def INFO(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def WARN(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def ERROR(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def HOME(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def HOUSE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def FOLDER(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def PLUS(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def CROSS(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def SETTINGS(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def SAVE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def LOAD(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def PICTURE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def UNLOCK(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def LOCK(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def KEY(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def FILE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def WRENCH(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def HAMMER(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def SHIELD(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def ENGINE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def BACK(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def STEAM(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def DISCORD(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def YOUTUBE(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def GITHUB(cls: Any, size: Optional[int] = None) -> Icon
No documentation
def get_icon(cls: Any, name: str, size: Optional[int] = None) -> Icon
Get an icon by its name (case‑insensitive).

Example:
   icon = Icons.get_icon('home', size=32)
def get_all(cls: Any, size: Optional[int] = None) -> List[Icon]
Return a list of Icon instances for all built‑in icons, all at the given size.
Order is: success, info, warn, error, home, folder, plus, cross,
         search, settings, save, load, picture.
def get_all_dict(cls: Any, size: Optional[int] = None) -> Dict[str, Icon]
No documentation
def get_all_names(cls: Any) -> List[str]
Return the list of available icon names (as strings).
Back to Misc Module