def fill_missing_colors(self): """ Generates any missing colors based on average saturation and value, and the sum and difference of the default hue and average hue difference (between adjacent colors). """ assert len(self) >= 2, "Need at least 2 colors in palette to continue" hue_diff = self.get_average_difference_from_target("hue") avg_saturation, avg_value = map(self.get_average_value, ("saturation", "value")) colors = sorted(self.target.items(), key=lambda (name, rgb): rgb) for index in range(len(colors)): name, rgb = colors[index] if name in self: continue default_color = Color(*rgb) candidates = [] if (default_color.hue - hue_diff) >= 0: candidates.append(Color.from_hsv([default_color.hue - hue_diff, avg_saturation, avg_value])) if (default_color.hue + hue_diff) <= 360: candidates.append(Color.from_hsv([default_color.hue + hue_diff, avg_saturation, avg_value])) elif (default_color.hue + hue_diff) > 360: print name, (default_color.hue - hue_diff) % 360 self[name] = map(lambda candidate: (candidate, default_color.distance(candidate)), candidates)
def read(self, filename): self.rc = SimpleResourceCollection(filename) colors = map(lambda i: find_key("color" + str(i), self.rc.db), range(16)) if not any(colors): raise ConverterError("xrdb does not contain any color info") for index, color in enumerate(colors): self._palette.set_color(Color.from_string(color), index) return self._palette
def on_file_new_activate(self, widget): self.set_palette( NumberedPalette( 16, colors=map(lambda color: Color(*HTML4_COLORS[color]), ("black", "maroon", "green", "olive", "navy", "purple", "teal", "silver", "gray", "red", "lime", "yellow", "blue", "magenta", "cyan", "white")))) self.current_file = ()
def get_palette(self): palette = NumberedPalette(16) for index in range(16): button = self.builder.get_object("colorbutton" + str(index + 1)) color = button.get_color() palette.set_color( Color(*map(lambda c: round(c / 256), (color.red, color.green, color.blue))), index) return palette