23
23
from ..pmath import constrain
24
24
25
25
from .constants import colour_codes
26
+ from . import p5
26
27
27
- __all__ = [' color_mode' , ' Color' ]
28
+ __all__ = [" color_mode" , " Color" ]
28
29
29
- color_parse_mode = 'RGB'
30
- color_range = (255 , 255 , 255 , 255 )
31
30
32
31
33
32
def color_mode (mode , max_1 = 255 , max_2 = None , max_3 = None , max_alpha = 255 ):
@@ -54,17 +53,14 @@ def color_mode(mode, max_1=255, max_2=None, max_3=None, max_alpha=255):
54
53
:type max_alpha: int
55
54
56
55
"""
57
- global color_parse_mode
58
- global color_range
59
-
60
56
if max_2 is None :
61
57
max_2 = max_1
62
58
63
59
if max_3 is None :
64
60
max_3 = max_1
65
61
66
- color_range = (max_1 , max_2 , max_3 , max_alpha )
67
- color_parse_mode = mode
62
+ p5 . renderer . style . color_range = (max_1 , max_2 , max_3 , max_alpha )
63
+ p5 . renderer . style . color_parse_mode = mode
68
64
69
65
70
66
def parse_color (* args , color_mode = 'RGB' , normed = False , ** kwargs ):
@@ -109,7 +105,12 @@ def parse_color(*args, color_mode='RGB', normed=False, **kwargs):
109
105
elif 'a' in kwargs :
110
106
alpha = kwargs ['a' ]
111
107
else :
112
- alpha = 1 if normed else color_range [3 ]
108
+ if normed :
109
+ alpha = 1
110
+ else :
111
+ # Color object are sometimes created before we initialise the renderer
112
+ # So we have to check if the renderer is None or not
113
+ alpha = p5 .renderer .style .color_range [3 ] if p5 .renderer else 255
113
114
114
115
hsb = None
115
116
rgb = None
@@ -179,22 +180,22 @@ def parse_color(*args, color_mode='RGB', normed=False, **kwargs):
179
180
if not (hsb is None ):
180
181
h , s , b = hsb
181
182
if not normed :
182
- h = constrain (h / color_range [0 ], 0 , 1 )
183
- s = constrain (s / color_range [1 ], 0 , 1 )
184
- b = constrain (b / color_range [2 ], 0 , 1 )
183
+ h = constrain (h / p5 . renderer . style . color_range [0 ] if p5 . renderer else 255 , 0 , 1 )
184
+ s = constrain (s / p5 . renderer . style . color_range [1 ] if p5 . renderer else 255 , 0 , 1 )
185
+ b = constrain (b / p5 . renderer . style . color_range [2 ] if p5 . renderer else 255 , 0 , 1 )
185
186
red , green , blue = colorsys .hsv_to_rgb (h , s , b )
186
187
187
188
if not (rgb is None ):
188
189
r , g , b = rgb
189
190
if not normed :
190
- red = constrain (r / color_range [0 ], 0 , 1 )
191
- green = constrain (g / color_range [1 ], 0 , 1 )
192
- blue = constrain (b / color_range [2 ], 0 , 1 )
191
+ red = constrain (r / p5 . renderer . style . color_range [0 ] if p5 . renderer else 255 , 0 , 1 )
192
+ green = constrain (g / p5 . renderer . style . color_range [1 ] if p5 . renderer else 255 , 0 , 1 )
193
+ blue = constrain (b / p5 . renderer . style . color_range [2 ] if p5 . renderer else 255 , 0 , 1 )
193
194
else :
194
195
red , green , blue = r , g , b
195
196
196
197
if not normed :
197
- alpha = constrain (alpha / color_range [3 ], 0 , 1 )
198
+ alpha = constrain (alpha / p5 . renderer . style . color_range [3 ] if p5 . renderer else 255 , 0 , 1 )
198
199
199
200
return red , green , blue , alpha
200
201
@@ -204,8 +205,8 @@ class Color:
204
205
205
206
def __init__ (self , * args , color_mode = None , normed = False , ** kwargs ):
206
207
if color_mode is None :
207
- color_mode = color_parse_mode
208
-
208
+ color_mode = p5 . renderer . style . color_parse_mode if p5 . renderer else "RGB"
209
+
209
210
if (len (args ) == 1 ) and isinstance (args [0 ], Color ):
210
211
r = args [0 ]._red
211
212
g = args [0 ]._green
@@ -324,11 +325,11 @@ def gray(self, value):
324
325
@property
325
326
def alpha (self ):
326
327
"""The alpha value for the color."""
327
- return self ._alpha * color_range [3 ]
328
+ return self ._alpha * p5 . renderer . style . color_range [3 ]
328
329
329
330
@alpha .setter
330
331
def alpha (self , value ):
331
- self ._alpha = constrain (value / color_range [3 ], 0 , 1 )
332
+ self ._alpha = constrain (value / p5 . renderer . style . color_range [3 ], 0 , 1 )
332
333
333
334
@property
334
335
def rgb (self ):
@@ -349,31 +350,31 @@ def rgba(self):
349
350
@property
350
351
def red (self ):
351
352
"""The red component of the color"""
352
- return self ._red * color_range [0 ]
353
+ return self ._red * p5 . renderer . style . color_range [0 ]
353
354
354
355
@red .setter
355
356
def red (self , value ):
356
- self ._red = constrain (value / color_range [0 ], 0 , 1 )
357
+ self ._red = constrain (value / p5 . renderer . style . color_range [0 ], 0 , 1 )
357
358
self ._recompute_hsb ()
358
359
359
360
@property
360
361
def green (self ):
361
362
"""The green component of the color"""
362
- return self ._green * color_range [1 ]
363
+ return self ._green * p5 . renderer . style . color_range [1 ]
363
364
364
365
@green .setter
365
366
def green (self , value ):
366
- self ._green = constrain (value / color_range [1 ], 0 , 1 )
367
+ self ._green = constrain (value / p5 . renderer . style . color_range [1 ], 0 , 1 )
367
368
self ._recompute_hsb ()
368
369
369
370
@property
370
371
def blue (self ):
371
372
"""The blue component of the color"""
372
- return self ._blue * color_range [2 ]
373
+ return self ._blue * p5 . renderer . style . color_range [2 ]
373
374
374
375
@blue .setter
375
376
def blue (self , value ):
376
- self ._blue = constrain (value / color_range [2 ], 0 , 1 )
377
+ self ._blue = constrain (value / p5 . renderer . style . color_range [2 ], 0 , 1 )
377
378
self ._recompute_hsb ()
378
379
379
380
@property
@@ -395,31 +396,31 @@ def hsba(self):
395
396
@property
396
397
def hue (self ):
397
398
"""The hue component of the color"""
398
- return self ._hue * color_range [0 ]
399
+ return self ._hue * p5 . renderer . style . color_range [0 ]
399
400
400
401
@hue .setter
401
402
def hue (self , value ):
402
- self ._hue = constrain (value / color_range [0 ], 0 , 1 )
403
+ self ._hue = constrain (value / p5 . renderer . style . color_range [0 ], 0 , 1 )
403
404
self ._recompute_rgb ()
404
405
405
406
@property
406
407
def saturation (self ):
407
408
"""The saturation component of the color"""
408
- return self ._saturation * color_range [1 ]
409
+ return self ._saturation * p5 . renderer . style . color_range [1 ]
409
410
410
411
@saturation .setter
411
412
def saturation (self , value ):
412
- self ._saturation = constrain (value / color_range [1 ], 0 , 1 )
413
+ self ._saturation = constrain (value / p5 . renderer . style . color_range [1 ], 0 , 1 )
413
414
self ._recompute_rgb ()
414
415
415
416
@property
416
417
def brightness (self ):
417
418
"""The brightness component of the color"""
418
- return self ._brightness * color_range [2 ]
419
+ return self ._brightness * p5 . renderer . style . color_range [2 ]
419
420
420
421
@brightness .setter
421
422
def brightness (self , value ):
422
- self ._brightness = constrain (value / color_range [2 ], 0 , 1 )
423
+ self ._brightness = constrain (value / p5 . renderer . style . color_range [2 ], 0 , 1 )
423
424
self ._recompute_rgb ()
424
425
425
426
# ...and some convenient aliases
@@ -435,21 +436,21 @@ def brightness(self, value):
435
436
@property
436
437
def b (self ):
437
438
"""The blue or the brightness value (depending on the color mode)."""
438
- if color_parse_mode == 'RGB' :
439
+ if p5 . renderer . style . color_parse_mode == 'RGB' :
439
440
return self .blue
440
- elif color_parse_mode == 'HSB' :
441
+ elif p5 . renderer . style . color_parse_mode == 'HSB' :
441
442
return self .brightness
442
443
else :
443
- raise ValueError ("Unknown color mode {}" .format (color_parse_mode ))
444
+ raise ValueError ("Unknown color mode {}" .format (p5 . renderer . style . color_parse_mode ))
444
445
445
446
@b .setter
446
447
def b (self , value ):
447
- if color_parse_mode == 'RGB' :
448
+ if p5 . renderer . style . color_parse_mode == 'RGB' :
448
449
self .blue = value
449
- elif color_parse_mode == 'HSB' :
450
+ elif p5 . renderer . style . color_parse_mode == 'HSB' :
450
451
self .brightness = value
451
452
else :
452
- raise ValueError ("Unknown color mode {}" .format (color_parse_mode ))
453
+ raise ValueError ("Unknown color mode {}" .format (p5 . renderer . style . color_parse_mode ))
453
454
454
455
@property
455
456
def hex (self ):
0 commit comments