liveIconRenderer.py (4475B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\liveIconRenderer.py 2 from __future__ import absolute_import 3 import logging 4 from carbonui import Align, SpriteEffect, PickState 5 from cosmetics.client.liveIconRendererQueue import LiveIconRenderQueue 6 from carbonui.primitives.container import Container 7 from carbonui.primitives.sprite import RenderTargetSprite, Sprite 8 import trinity 9 from signals import Signal 10 from .liveIconCacheUtils import cached_render_available, get_unique_filename, is_low_spec 11 log = logging.getLogger(__name__) 12 13 class LiveIconSprite(Container): 14 __guid__ = 'form.LiveIconSprite' 15 default_glow = True 16 default_mask_texture_path = 'res:/UI/Texture/classes/Cosmetics/Ship/cards/skin_design/mask.png' 17 18 def ApplyAttributes(self, attributes): 19 super(LiveIconSprite, self).ApplyAttributes(attributes) 20 self._viewport_width = attributes.viewportWidth 21 self._viewport_height = attributes.viewportHeight 22 self.bg_texture_path = attributes.bg_texture_path 23 self._glow = attributes.get('glow', self.default_glow) 24 mask_texture_path = attributes.get('mask_texture_path', self.default_mask_texture_path) 25 self.queued_function_call = None 26 self.on_rendered = Signal('on_rendered') 27 self.last_skin_design = None 28 self.space_object = None 29 self.sprite = Sprite(name='LiveIconSprite_Cached', parent=self, align=Align.CENTER, width=self._viewport_width, height=self._viewport_height, spriteEffect=trinity.TR2_SFX_MASK, texturePath=None, textureSecondaryPath=mask_texture_path) 30 31 def _construct_fallback_sprite(self): 32 self.sprite = Sprite(name='LiveIconSprite_Backup', parent=self, align=Align.CENTER, width=32, height=32, texturePath='res:/UI/Texture/WindowIcons/paint_tool.png') 33 34 def apply_skin_design(self, skin_design, bg_texture_path = None, skip_queue = False): 35 if bg_texture_path: 36 self.bg_texture_path = bg_texture_path 37 log.info('LIVE ICONS - Apply SKIN design {name}, skip_queue={skip_queue}'.format(name=skin_design.name.encode('utf-8'), skip_queue=skip_queue)) 38 if cached_render_available(skin_design, self.bg_texture_path): 39 skip_queue = True 40 self.queued_function_call = lambda : self._apply_skin_design(skin_design, self.bg_texture_path) 41 if skip_queue: 42 self.queued_function_call() 43 else: 44 LiveIconRenderQueue.get_instance().add_to_queue(self.queued_function_call) 45 46 def Close(self): 47 self.space_object = None 48 try: 49 if self.queued_function_call: 50 LiveIconRenderQueue.get_instance().remove_from_queue(self.queued_function_call) 51 finally: 52 super(LiveIconSprite, self).Close() 53 54 def _apply_skin_design(self, skin_design, bg_texture_path): 55 self.bg_texture_path = bg_texture_path 56 design_name = skin_design.name.encode('utf-8') 57 icon_generator = LiveIconRenderQueue.get_instance().get_icon_generator(self._viewport_width, self._viewport_height, skin_design, bg_texture_path) 58 if cached_render_available(skin_design, bg_texture_path): 59 texturePath = get_unique_filename(skin_design, bg_texture_path) 60 self.sprite.LoadTexture(texturePath) 61 self.on_rendered() 62 return 63 icon_generator.construct_render_job() 64 icon_generator.set_skin_design(skin_design) 65 log.info('LIVE ICONS - Rendering SKIN design {name}: icon generator created'.format(name=design_name)) 66 log.info('LIVE ICONS - Rendering SKIN design {name}: started'.format(name=design_name)) 67 self.queued_function_call = None 68 if not self.IsVisible(): 69 return 70 if self.last_skin_design != skin_design or not self.space_object: 71 log.info('LIVE ICONS - Rendering SKIN design {name}: DNA update required'.format(name=design_name)) 72 log.info('LIVE ICONS - Rendering SKIN design {name}: DNA update done'.format(name=design_name)) 73 self.last_skin_design = skin_design 74 cachedTexturePath = icon_generator.render_icon(skin_design, bg_texture_path, self._glow) 75 self.sprite.texturePath = cachedTexturePath 76 log.info('LIVE ICONS - Rendering SKIN design {name}: icon rendering done'.format(name=design_name)) 77 self.on_rendered() 78 log.info('LIVE ICONS - Rendering SKIN design {name}: finished'.format(name=design_name))