Esempio n. 1
0
    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)
Esempio n. 2
0
 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
Esempio n. 3
0
 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 = ()
Esempio n. 4
0
 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