Example #1
0
    def __init__(self, **kwargs):
        super(CustomWheel, self).__init__(**kwargs)
        self.newColor = (0, 0, 0, 0)

        self.__color_step_size = [0.0, 0.0, 0.0]

        self.__updatesPerBeat = 10

        self.__playBackHandler = PlayBackHandler(bpm=60.0, updatesPerBeat=self.__updatesPerBeat)
        self.__playBackHandler.addIntervalUpdateCallback(self.fade_step_callback)
Example #2
0
class CustomWheel(Widget):
    IDX_RED = 0
    IDX_GREEN = 1
    IDX_BLUE = 2

    color = ListProperty((1, 1, 1, 1))
    screen_color = ListProperty((1, 1, 1, 1))

    bpm = NumericProperty(60.0)

    fade_time_in_beats = NumericProperty(0.0)

    def __init__(self, **kwargs):
        super(CustomWheel, self).__init__(**kwargs)
        self.newColor = (0, 0, 0, 0)

        self.__color_step_size = [0.0, 0.0, 0.0]

        self.__updatesPerBeat = 10

        self.__playBackHandler = PlayBackHandler(bpm=60.0, updatesPerBeat=self.__updatesPerBeat)
        self.__playBackHandler.addIntervalUpdateCallback(self.fade_step_callback)

    def on_bpm(self, obj, newBpm):
        self.__playBackHandler.setBpm(newBpm)

    def on_color(self, obj, newColor):
        self.set_new_color(newColor)

    def set_new_color(self, newColor):
        self.newColor = newColor
        if self.fade_time_in_beats > 0.0:
            self.__set_color_step_sizes()
            self.__playBackHandler.start()
        else:
            self.screen_color = newColor

    def fade_step_callback(self, time):
        if self.fade_time_in_beats < time:
            self.screen_color = self.newColor
            self.__playBackHandler.stopAndReset()
        else:
            self.__update_color_one_fade_step()

    def set_value_from_slider(self, idx, new_color_value):
        color_value = new_color_value / 255.0
        if color_value > 1.0:
            color_value = 1.0
        self.color[idx] = color_value

    def __calc_number_of_steps(self):
        numberOfSteps = float(self.fade_time_in_beats) * self.__updatesPerBeat
        return numberOfSteps

    def __get_color_step_size(self, idx):
        try:
            color_diff = (self.newColor[idx] - self.screen_color[idx])
            return float(color_diff) / float(self.__calc_number_of_steps())
        except ZeroDivisionError:
            return 0.0

    def __set_color_step_sizes(self):
        self.__color_step_size[self.IDX_RED] = self.__get_color_step_size(self.IDX_RED)
        self.__color_step_size[self.IDX_GREEN] = self.__get_color_step_size(self.IDX_GREEN)
        self.__color_step_size[self.IDX_BLUE] = self.__get_color_step_size(self.IDX_BLUE)

    def __update_color_one_fade_step(self):
        self.__update_color_step_helper(self.IDX_RED)
        self.__update_color_step_helper(self.IDX_GREEN)
        self.__update_color_step_helper(self.IDX_BLUE)

    def __update_color_step_helper(self, idx):
        self.screen_color[idx] += self.__color_step_size[idx]