Features/Enhanced color selector/Patch-xocolor
Jump to navigation
Jump to search
diff --git a/src/sugar/graphics/xocolor.py b/src/sugar/graphics/xocolor.py index 75b5400..57b5712 100644 --- a/src/sugar/graphics/xocolor.py +++ b/src/sugar/graphics/xocolor.py @@ -221,10 +221,12 @@ def _parse_string(color_string): else: return None - def is_valid(color_string): return (_parse_string(color_string) != None) +def get_random_color(): + color_index = int(random.random() * (len(colors) - 1)) + return "%s,%s" % (colors[color_index][0], colors[color_index][1]) class XoColor: @@ -232,8 +234,9 @@ class XoColor: if color_string == None: randomize = True elif not is_valid(color_string): - logging.debug('Color string is not valid: %s, ' - 'fallback to default', color_string) + logging.error( + 'Color string is not valid: %s; fallback to default', + color_string) client = gconf.client_get_default() color_string = client.get_string('/desktop/sugar/user/color') randomize = False @@ -241,11 +244,9 @@ class XoColor: randomize = False if randomize: - [self.strole, self.fill] = self.get_random_color() - else: - [self.stroke, self.fill] = _parse_string(color_string) - # save an index to our color in the list - self.n = self.find_index() + color_string = get_random_color() + [self.stroke, self.fill] = _parse_string(color_string) + self._current_color_index = self._find_index() def __cmp__(self, other): if isinstance(other, XoColor): @@ -261,40 +262,32 @@ class XoColor: def set_color(self, color_string): if color_string == None or not is_valid(color_string): - logging.debug('Color string is not valid: %s, ' - 'fallback to default', color_string) - [self.stroke,self.fill] = _parse_string(color_string) - self.n = self.find_index() - - def get_random_color(self): - my_n = int(random.random() * (len(colors) - 1)) - [my_stroke, my_fill] = colors[my_n] - return "%s,%s" % (my_stroke, my_fill) + logging.error( + 'Color string is not valid: %s; fallback to default', + color_string) + else: + [self.stroke, self.fill] = _parse_string(color_string) + self._current_color_index = self._find_index() def get_next_color(self): - my_n = self.n - my_n += 1 - if my_n == len(colors): - my_n = 0 - [my_stroke, my_fill] = colors[my_n] - return "%s,%s" % (my_stroke, my_fill) + next_index = self._current_color_index + 1 + if next_index == len(colors): + next_index = 0 + return "%s,%s" % (colors[next_index][0], colors[next_index][1]) def get_prev_color(self): - my_n = self.n - my_n -= 1 - if my_n < 0: - my_n = len(colors)-1 - [my_stroke, my_fill] = colors[my_n] - return "%s,%s" % (my_stroke, my_fill) + prev_index = self._current_color_index - 1 + if prev_index < 0: + prev_index = len(colors)-1 + return "%s,%s" % (colors[prev_index][0], colors[prev_index][1]) def to_string(self): return '%s,%s' % (self.stroke, self.fill) - def find_index(self): - for c in range(0,len(colors)): - if colors[c] == [self.stroke, self.fill]: - return c - # if the color is not found, then return 0 + def _find_index(self): + for color in range(0,len(colors)): + if colors[color] == [self.stroke, self.fill]: + return color return 0 if __name__ == "__main__":