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 | float] = 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().
def as_image(self: Any, color: Any = None) -> Any
Return this icon as a common Image while retaining get_surface compatibility.

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', 'unlock', 'lock', 'key', 'file', 'wrench', 'hammer', 'shield', 'engine', 'back', 'steam', 'discord', 'youtube', 'github', 'audio', 'calendar', 'clock', 'cloud', 'database', 'brain', 'link', 'location', 'microphone', 'mute', 'unmute', 'python', 'synchronize', 'camera', 'wifi', 'trash', 'undo', 'redo', 'cube', 'sphere', 'rocket', 'notification', 'dialog', 'controller', 'hide', 'show', 'ranking', 'icons', 'selection', 'puzzle', 'light', 'id', 'card', 'target', 'aim', 'click', 'debug', 'timer', 'anvil', 'browser', 'omega', 'pi', 'options', 'plane', 'documentation', 'fire', 'stop', 'video', 'wall', 'worldmap', 'build', 'circuit', 'cpu', 'document', 'image', 'maintenance', 'music', 'pause', 'play', 'mouse', 'network', 'keyboard', 'lightbulb']
Methods
def SUCCESS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def INFO(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def WARN(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ERROR(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def HOME(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def HOUSE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def FOLDER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PLUS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CROSS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SETTINGS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SAVE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def LOAD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PICTURE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def UNLOCK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def LOCK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def KEY(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def FILE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def WRENCH(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def HAMMER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SHIELD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ENGINE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def BACK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def STEAM(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DISCORD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def YOUTUBE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def GITHUB(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def AUDIO(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CALENDAR(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CLOCK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CLOUD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DATABASE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def BRAIN(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def LOCATION(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def MICROPHONE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def MUTE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def UNMUTE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PYTHON(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SYNCHRONIZE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CAMERA(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def WIFI(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def TRASH(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def UNDO(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def REDO(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CUBE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SPHERE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ROCKET(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def NOTIFICATION(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DIALOG(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CONTROLLER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def HIDE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SHOW(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def RANKING(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ICONS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def SELECTION(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PUZZLE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def LIGHT(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ID(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CARD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def TARGET(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def AIM(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CLICK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DEBUG(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def ANVIL(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def TIMER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def TIMER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PI(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def OPTIONS(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PLANE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DOCUMENTATION(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def FIRE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def STOP(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def VIDEO(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def WALL(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def WORLDMAP(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def BUILD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CIRCUIT(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def CPU(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def DOCUMENT(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def IMAGE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def MAINTENANCE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def MUSIC(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PAUSE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def PLAY(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def MOUSE(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def NETWORK(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def KEYBOARD(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def BROWSER(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def LIGHTBULB(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def OMEGA(cls: Any, size: Optional[int | float] = None) -> Icon
No documentation
def get_icon(cls: Any, name: str, size: Optional[int | float] = 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 | float] = 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 | float] = 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