56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								Blender user interface icon handling.
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								import os.path
							 | 
						||
| 
								 | 
							
								from typing import Optional
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import bpy.utils.previews
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import lnx
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if lnx.is_reload(__name__):
							 | 
						||
| 
								 | 
							
								    # _unload_icons is not available in the module scope yet
							 | 
						||
| 
								 | 
							
								    def __unload():
							 | 
						||
| 
								 | 
							
								        _unload_icons()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Refresh icons after reload
							 | 
						||
| 
								 | 
							
								    __unload()
							 | 
						||
| 
								 | 
							
								else:
							 | 
						||
| 
								 | 
							
								    lnx.enable_reload(__name__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = ["get_id"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_ICONS_DICT: Optional[bpy.utils.previews.ImagePreviewCollection] = None
							 | 
						||
| 
								 | 
							
								"""Dictionary of all loaded icons, or `None` if not loaded"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_ICONS_DIR = os.path.join(os.path.dirname(__file__), "custom_icons")
							 | 
						||
| 
								 | 
							
								"""Directory of the icon files"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def _load_icons():
							 | 
						||
| 
								 | 
							
								    """(Re)loads all icons."""
							 | 
						||
| 
								 | 
							
								    global _ICONS_DICT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    _unload_icons()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    _ICONS_DICT = bpy.utils.previews.new()
							 | 
						||
| 
								 | 
							
								    _ICONS_DICT.load("bundle", os.path.join(_ICONS_DIR, "bundle.png"), 'IMAGE', force_reload=True)
							 | 
						||
| 
								 | 
							
								    _ICONS_DICT.load("haxe", os.path.join(_ICONS_DIR, "haxe.png"), 'IMAGE', force_reload=True)
							 | 
						||
| 
								 | 
							
								    _ICONS_DICT.load("wasm", os.path.join(_ICONS_DIR, "wasm.png"), 'IMAGE', force_reload=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def _unload_icons():
							 | 
						||
| 
								 | 
							
								    """Unloads all icons."""
							 | 
						||
| 
								 | 
							
								    global _ICONS_DICT
							 | 
						||
| 
								 | 
							
								    if _ICONS_DICT is not None:
							 | 
						||
| 
								 | 
							
								        bpy.utils.previews.remove(_ICONS_DICT)
							 | 
						||
| 
								 | 
							
								    _ICONS_DICT = None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def get_id(identifier: str) -> int:
							 | 
						||
| 
								 | 
							
								    """Returns the icon ID from the given identifier."""
							 | 
						||
| 
								 | 
							
								    if _ICONS_DICT is None:
							 | 
						||
| 
								 | 
							
								        _load_icons()
							 | 
						||
| 
								 | 
							
								    return _ICONS_DICT[identifier].icon_id
							 |