From 2a97cd761e2e46fa19b47b847561fbdb7d7bda90 Mon Sep 17 00:00:00 2001 From: frank <420@shampoo.ooo> Date: Thu, 27 May 2021 16:45:57 -0400 Subject: [PATCH] clamp hsla values --- pgfw/Sprite.py | 3 +-- pgfw/extension.py | 32 ++++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pgfw/Sprite.py b/pgfw/Sprite.py index e9a09e8..07babd9 100644 --- a/pgfw/Sprite.py +++ b/pgfw/Sprite.py @@ -87,8 +87,7 @@ class Sprite(Animation): self.get_current_frameset().set_framerate(framerate) self.register_interval() - def load_from_path(self, path, transparency=False, ppa=True, key=None, - query=None, omit=False): + def load_from_path(self, path, transparency=False, ppa=True, key=None, query=None, omit=False): for frame in load_frames(self.get_resource(path), transparency, ppa, key, query): self.add_frame(frame, omit) diff --git a/pgfw/extension.py b/pgfw/extension.py index b3e3762..3c87970 100644 --- a/pgfw/extension.py +++ b/pgfw/extension.py @@ -90,8 +90,8 @@ def get_point_on_circle(center, radius, angle, translate_angle=True): def get_range_steps(start, end, count, omit=[]): ''' - Iterator that yields `count` number of steps from `start` to `end` as floats. Indicies in the - omit parameter will be skipped + Iterator that yields evenly spaced steps from `start` to `end` as floats based on step `count`. Indicies in the + omit parameter will be skipped. ''' # normalize array indicies (for example -1 becomes count - 1) for ii in range(len(omit)): @@ -298,16 +298,25 @@ def get_wrapped_text_surface(font, text, width, antialias=True, color=(0, 0, 0), return get_boxed_surface(surface, background, border, border_width, padding) def replace_color(surface, color, replacement): + ''' + Replace a color on a surface without creating a copy + ''' pixels = PixelArray(surface) pixels.replace(color, replacement) del pixels def get_color_swapped_surface(surface, color, replacement): + ''' + Get a copy of given Surface with given color replaced by given replacement + ''' swapped = surface.copy() replace_color(swapped, color, replacement) return swapped def get_busy_channel_count(): + ''' + Return count of audio channels currently playing audio + ''' count = 0 for index in range(get_num_channels()): count += Channel(index).get_busy() @@ -434,24 +443,35 @@ def get_blinds_frames(surface, step=.05, count=4, fill=(0, 0, 0, 0)): return frames def get_hsla_color(hue, saturation=100, lightness=50, alpha=100): + ''' + Get a pygame Color object from HSLA value + ''' color = Color(0, 0, 0, 0) - color.hsla = hue % 360, saturation, lightness, alpha + color.hsla = hue % 360, clamp(saturation, 0, 100), clamp(lightness, 0, 100), clamp(alpha, 0, 100) return color -def get_random_hsla_color(hue_range=(0, 359), saturation_range=(0, 100), - lightness_range=(0, 100), alpha_range=(100, 100)): +def get_random_hsla_color(hue_range=(0, 359), saturation_range=(0, 100), lightness_range=(0, 100), alpha_range=(100, 100)): + ''' + Get a random color with constrained hue, saturation, lightness and alpha + ''' return get_hsla_color( random.randint(*hue_range), random.randint(*saturation_range), random.randint(*lightness_range), random.randint(*alpha_range)) def get_hsva_color(hue, saturation=100, value=100, alpha=100): + ''' + Get a pygame Color object from HSVA value + ''' color = Color(0, 0, 0, 0) color.hsva = hue % 360, saturation, value, alpha return color def get_lightened_color(color, lightness): + ''' + Return a copy of the provided color with specified lightness + ''' h, s, _, a = color.hsla - return get_hsla_color(h, s, lightness, a) + return get_hsla_color(h, s, clamp(lightness, 0, 100), a) def get_glow_frames(radius, segments, colors=[(0, 0, 0), (255, 255, 255)], minsize=4, transparency=True): frames = []