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)