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

colorpicker.py (5772B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\colorpicker.py
      2 from future.utils import raise_
      3 import trinity
      4 import log
      5 from carbonui import uiconst
      6 from carbonui.control.contextMenu.menuUtil import ClearMenuLayer
      7 from carbonui.primitives.frame import Frame
      8 from carbonui.window.underlay import WindowUnderlay
      9 from carbonui.primitives.container import Container
     10 from carbonui.primitives.fill import Fill
     11 from carbonui.uicore import uicore
     12 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     13 
     14 class ColorSwatch(Container):
     15     swatches = [('faf5e1', None),
     16      ('ebd492', None),
     17      ('cb9133', None),
     18      ('825830', None),
     19      ('f6e631', None),
     20      ('f59122', None),
     21      ('d95100', None),
     22      ('bf1616', None),
     23      ('790000', None),
     24      ('7f1157', None),
     25      ('abc8e2', None),
     26      ('598cb9', None),
     27      ('375d81', None),
     28      ('3b8bd1', None),
     29      ('124d8c', None),
     30      ('183152', None),
     31      ('185662', None),
     32      ('6e9058', None),
     33      ('3f740b', None),
     34      ('516324', None),
     35      ('384328', None),
     36      ('bfb7aa', None),
     37      ('625e57', None),
     38      ('19191c', None)]
     39     swatchsize = 16
     40 
     41     def hex_to_rgb(self, colorstring):
     42         colorstring = colorstring.strip()
     43         if len(colorstring) != 6:
     44             raise_(ValueError, 'input #%s is not in #RRGGBB format' % colorstring)
     45         r, g, b = colorstring[:2], colorstring[2:4], colorstring[4:]
     46         r, g, b = [ int(n, 16) for n in (r, g, b) ]
     47         return (r / 255.0, g / 255.0, b / 255.0)
     48 
     49     def Startup(self, frameColor = (0.5, 0.5, 0.5, 1.0), padding = 0, *args):
     50         l, t, w, h = self.GetAbsolute()
     51         swatchesperrow = abs(w / self.swatchsize)
     52         x, y = (0, 0)
     53         for hex, swatchID in self.swatches:
     54             sc = Container(name='bottom', parent=self, align=uiconst.TOPLEFT, pos=(x * self.swatchsize,
     55              y * self.swatchsize,
     56              self.swatchsize,
     57              self.swatchsize), state=uiconst.UI_NORMAL, padding=(padding,
     58              padding,
     59              padding,
     60              padding))
     61             sc.OnClick = (self.OnPickColor, sc)
     62             sc.swatchID = swatchID
     63             Frame(parent=sc, color=frameColor)
     64             color = self.hex_to_rgb(hex)
     65             Fill(parent=sc, color=color)
     66             x += 1
     67             if x == swatchesperrow:
     68                 x = 0
     69                 y += 1
     70 
     71     def OnPickColor(self, obj, *args):
     72         fill = obj.FindChild('fill')
     73         if fill and self.sr.dad is not None:
     74             if hasattr(self.sr.dad, 'SetHSV'):
     75                 self.sr.dad.SetHSV(fill.color.GetHSV())
     76 
     77 
     78 class ColorPreview(Container):
     79     expanding = 0
     80     expanded = 0
     81 
     82     def Startup(self):
     83         self.sr.preview = preview = Container(parent=self, align=uiconst.TOALL, pos=(0, 0, 0, 0), state=uiconst.UI_NORMAL)
     84         self.sr.preview.OnClick = self.OnPickColor
     85         self.sr.colorfill = Fill(parent=preview, color=(0.0, 1.0, 0.0, 1.0))
     86 
     87     def OnPickColor(self, *args):
     88         if not self.expanding and not self.expanded:
     89             self.Expand()
     90 
     91     def Expand(self, *args):
     92         self.expanding = 1
     93         if sm.GetService('connection').IsConnected():
     94             prompt_player_fsd_dialog('ComboExpand')
     95         log.LogInfo('ColorPreview', self.name, 'expanding')
     96         colorpar = Container(name='colors', align=uiconst.TOPLEFT, width=112, height=62)
     97         uicore.layer.menu.children.insert(0, colorpar)
     98         colorSwatch = ColorSwatch(name='colorSwatch', align=uiconst.TOALL, parent=colorpar)
     99         colorSwatch.Startup()
    100         colorSwatch.sr.dad = self
    101         self.sr.wndUnderlay = WindowUnderlay(parent=colorpar)
    102         self.sr.wndUnderlay.padding = -6
    103         l, t, w, h = self.sr.preview.GetAbsolute()
    104         colorpar.left = [l + w, l - colorpar.width][l + w + colorpar.width > uicore.desktop.width]
    105         colorpar.top = [t + h, t - colorpar.height][t + h + colorpar.height > uicore.desktop.height]
    106         colorpar.state = uiconst.UI_NORMAL
    107         self.colorpar = colorpar
    108         self.sr.cookie = uicore.event.RegisterForTriuiEvents(uiconst.UI_MOUSEUP, self.OnGlobalClick)
    109         self.expanding = 0
    110         self.expanded = 1
    111         log.LogInfo('ColorPreview', self.name, 'expanded')
    112 
    113     def OnGlobalClick(self, fromwhere, *etc):
    114         if self.colorpar:
    115             if uicore.uilib.mouseOver == self.colorpar or fromwhere.IsUnder(self.colorpar):
    116                 log.LogInfo('ColorPreview.OnGlobalClick Ignoring all clicks from colorpar')
    117                 return 1
    118             self.Cleanup()
    119         return 0
    120 
    121     def Cleanup(self, setfocus = 1):
    122         if self.sr.cookie:
    123             uicore.event.UnregisterForTriuiEvents(self.sr.cookie)
    124             self.sr.cookie = None
    125             self.colorpar = None
    126             ClearMenuLayer()
    127             self.expanded = 0
    128         if setfocus:
    129             uicore.registry.SetFocus(self)
    130 
    131     def OnGlobalMouseDown(self, downOn):
    132         if not downOn.IsUnder(self.colorpar):
    133             ClearMenuLayer()
    134 
    135     def SetHSV(self, hsv):
    136         self.sr.colorfill.color.SetHSV(*hsv)
    137         if self.sr.dad and hasattr(self.sr.dad, 'SetHSV'):
    138             if self.sr.layerid is not None:
    139                 self.sr.dad.SetHSV(self.sr.layerid, self.sr.colorfill.color.GetHSV())
    140             else:
    141                 self.sr.dad.SetHSV(self.sr.colorfill.color.GetHSV())
    142 
    143     def FromInt(self, val):
    144         c = trinity.TriColor()
    145         c.FromInt(val)
    146         self.sr.colorfill.SetRGBA(c.r, c.g, c.b, c.a)
    147         self.SetHSV(c.GetHSV())
    148 
    149     def AsInt(self):
    150         self.sr.colorfill.color.AsInt()
    151 
    152     def FromSwatch(self, swatch):
    153         cswatch = ColorSwatch()
    154         ccolor = cswatch.hex_to_rgb(cswatch.swatches[swatch])
    155         self.sr.colorfill.SetRGBA(*ccolor)