toggleButtonUnderlay.py (6801B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\toggleButtonUnderlay.py 2 from carbonui import Density, uiconst 3 from carbonui.primitives.container import Container 4 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal 5 from carbonui.uianimations import animations 6 from chroma import Color 7 from eve.client.script.ui import eveColor, eveThemeColor 8 9 class FrameType(object): 10 LEFT = 1 11 MIDDLE = 2 12 RIGHT = 3 13 14 15 FRAME_TEXTURE_BY_DENSITY_AND_TYPE = {Density.NORMAL: {FrameType.LEFT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_left_32px.png', 16 FrameType.MIDDLE: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_32px.png', 17 FrameType.RIGHT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_right_32px.png'}, 18 Density.COMPACT: {FrameType.LEFT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_left_24px.png', 19 FrameType.MIDDLE: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_24px.png', 20 FrameType.RIGHT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_right_24px.png'}, 21 Density.EXPANDED: {FrameType.LEFT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_left_40px.png', 22 FrameType.MIDDLE: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_40px.png', 23 FrameType.RIGHT: 'res:/UI/Texture/classes/ToggleButtonGroup/toggle_button_frame_right_40px.png'}} 24 25 class ToggleButtonUnderlay(Container): 26 default_name = 'ToggleButtonUnderlay' 27 _background = None 28 _hovered = False 29 _pressed = False 30 31 def __init__(self, density = Density.NORMAL, enabled = True, frame_type = FrameType.MIDDLE, selected = False, selected_color_override = None, **kwargs): 32 self._density = density 33 self._enabled = enabled 34 self._frame_type = frame_type 35 self._selected = selected 36 self._selected_color_override = selected_color_override 37 super(ToggleButtonUnderlay, self).__init__(**kwargs) 38 self._layout() 39 40 def _layout(self): 41 self._background = StretchSpriteHorizontal(bgParent=self, leftEdgeSize=self.get_edge_size(), rightEdgeSize=self.get_edge_size(), texturePath=self._get_texture_path(), color=self._get_color(), outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=self._get_glow_brightness()) 42 43 def get_edge_size(self): 44 return 9 45 46 @property 47 def density(self): 48 return self._density 49 50 @density.setter 51 def density(self, value): 52 if self._density != value: 53 self._density = value 54 self._update_texture_path() 55 56 @property 57 def enabled(self): 58 return self._enabled 59 60 @enabled.setter 61 def enabled(self, value): 62 if self._enabled != value: 63 self._enabled = value 64 self._update_color(duration=uiconst.TIME_EXIT) 65 66 @property 67 def frame_type(self): 68 return self._frame_type 69 70 @frame_type.setter 71 def frame_type(self, value): 72 if self._frame_type != value: 73 self._frame_type = value 74 self._update_texture_path() 75 76 @property 77 def hovered(self): 78 return self._hovered 79 80 @hovered.setter 81 def hovered(self, value): 82 if self._hovered != value: 83 self._hovered = value 84 duration = uiconst.TIME_ENTRY if value else uiconst.TIME_EXIT 85 self._update_color(duration) 86 self._update_glow_brightness(duration) 87 88 @property 89 def pressed(self): 90 return self._pressed 91 92 @pressed.setter 93 def pressed(self, value): 94 if self._pressed != value: 95 self._pressed = value 96 duration = uiconst.TIME_MOUSEDOWN if value else uiconst.TIME_MOUSEUP 97 self._update_color(duration) 98 self._update_glow_brightness(duration) 99 100 @property 101 def selected(self): 102 return self._selected 103 104 @selected.setter 105 def selected(self, value): 106 self.set_selected(value) 107 108 def set_selected(self, value, animate = True): 109 if self._selected != value: 110 self._selected = value 111 if animate: 112 duration = uiconst.TIME_SELECT 113 else: 114 duration = 0.0 115 self._update_color(duration) 116 self._update_glow_brightness(duration) 117 118 def _get_color(self): 119 if not self.enabled: 120 return (1.0, 1.0, 1.0, 0.05) 121 if self.selected: 122 if self._selected_color_override is not None: 123 return self._selected_color_override 124 else: 125 return Color.from_any(eveThemeColor.THEME_FOCUSDARK).with_alpha(0.6) 126 else: 127 if self.pressed: 128 return eveColor.TUNGSTEN_GREY 129 if self.hovered: 130 if self._selected_color_override is not None: 131 color = Color.from_any(self._selected_color_override) 132 return color.with_alpha(color.alpha * 0.6) 133 else: 134 return (1.0, 1.0, 1.0, 0.3) 135 else: 136 return self._get_unselected_color() 137 138 def _get_unselected_color(self): 139 if self._selected_color_override is not None: 140 color = Color.from_any(self._selected_color_override) 141 return color.with_alpha(color.alpha * 0.3) 142 else: 143 return (1.0, 1.0, 1.0, 0.1) 144 145 def _update_color(self, duration = 0.0): 146 if self._background: 147 if duration > 0.0: 148 animations.SpColorMorphTo(self._background, endColor=self._get_color(), duration=duration) 149 else: 150 animations.StopAnimation(self._background, 'color') 151 self._background.SetRGBA(*self._get_color()) 152 153 def _get_glow_brightness(self): 154 if self.enabled and (self.pressed or self.hovered) and not self.selected: 155 return 0.3 156 else: 157 return 0.0 158 159 def _update_glow_brightness(self, duration = 0.0): 160 if self._background: 161 if duration > 0.0: 162 animations.MorphScalar(self._background, 'glowBrightness', startVal=self._background.glowBrightness, endVal=self._get_glow_brightness(), duration=duration) 163 else: 164 animations.StopAnimation(self._background, 'glowBrightness') 165 self._background.glowBrightness = self._get_glow_brightness() 166 167 def _get_texture_path(self): 168 return FRAME_TEXTURE_BY_DENSITY_AND_TYPE[self._density][self._frame_type] 169 170 def _update_texture_path(self): 171 if self._background: 172 self._background.texturePath = self._get_texture_path() 173 174 def OnColorThemeChanged(self): 175 self._update_color()