NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()