예제 #1
0
    def foreground_color(self):
        """
        Returns the foreground color for this theme
        :return: color.Color
        """

        if self.is_dark():
            return qt_color.Color(250, 250, 250, 255)
        else:
            return qt_color.Color(0, 40, 80, 180)
예제 #2
0
    def set_color(self, new_color, size=None):
        """
        Sets icon color
        :param new_color: QColor, new color for the icon
        :param size: QSize, size of the icon
        """

        if isinstance(new_color, str):
            new_color = color.Color.from_string(new_color)
        elif isinstance(new_color, (list, tuple)):
            new_color = color.Color(*new_color)

        if self.isNull():
            return

        icon = self
        size = size or icon.availableSizes()[0]
        pixmap = icon.pixmap(size)

        painter = QPainter(pixmap)
        painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
        painter.setBrush(new_color)
        painter.setPen(new_color)
        painter.drawRect(pixmap.rect())
        painter.end()

        icon = Icon(pixmap)
        self.swap(icon)
예제 #3
0
    def _on_color_changed(self, new_color):
        """
        Internal callback function triggered when the color changes from the color browser
        :param new_color: QColor
        """

        if isinstance(new_color, QColor):
            new_color = qt_color.Color(new_color).to_string()

        self.set_value(new_color)
        self._on_emit_value_changed()
예제 #4
0
    def is_dark(self):
        """
        Returns whether the current theme is dark or not
        :return: bool
        """

        if python.is_list(self.background_color):
            bg_color = qt_color.Color(*self.background_color)
        else:
            bg_color = qt_color.Color(self.background_color)

        red = bg_color.redF() * 0.299
        green = bg_color.greenF() * 0.587
        blue = bg_color.blueF() * 0.114

        darkness = red + green + blue
        if darkness < 0.6:
            return True

        return False
예제 #5
0
    def _get_color(self, color_value, alpha=None):
        """
        Internal function that returns a color value in proper format to be handled by theme
        :param color_value: variant, str or QColor or color.Color
        """

        if isinstance(color_value, (str, unicode)):
            color_value = qt_color.Color.from_string(color_value)
        elif isinstance(color_value, QColor):
            color_value = qt_color.Color.from_color(color_value)
        elif isinstance(color_value, (list, tuple)):
            color_value = qt_color.Color(*color_value)

        return color_value
예제 #6
0
def colorize_pixmap(pixmap, new_color):
    """
    Colorizes the given pixmap with a new color based on its alpha map
    :param QPixmap pixmap: Pixmap
    :param tuple new_color: new color in tuple format (255, 255, 255)
    :return:  Pixmap
    """

    if isinstance(new_color, str):
        new_color = color.Color.from_string(new_color)
    elif isinstance(new_color, (tuple, list)):
        new_color = color.Color(*new_color)

    mask = pixmap.mask()
    pixmap.fill(new_color)
    pixmap.setMask(mask)

    return pixmap
예제 #7
0
    def options(self, skip_instance_attrs=False):
        """
        Returns the variables used to customize the style sheet
        :return: dict
        """
        if self.is_dark():
            darkness = 'white'
        else:
            darkness = 'black'

        theme_resources_dir = ''
        if self._file and os.path.isfile(self._file):
            theme_dir = os.path.dirname(self._file)
            theme_name = os.path.splitext(os.path.basename(self._file))[0]
            theme_resources_dir = os.path.join(theme_dir, 'resources',
                                               theme_name)

        style_resources_dir = ''
        style_path = self.stylesheet_file()
        if style_path and os.path.isfile(style_path):
            style_dir = os.path.dirname(style_path)
            style_name = os.path.splitext(os.path.basename(style_path))[0]
            style_resources_dir = os.path.join(style_dir, 'resources',
                                               style_name)

        options = {
            'darkness': darkness,
            'theme_resources': theme_resources_dir,
            'style_resources': style_resources_dir
        }

        if not skip_instance_attrs:
            inst_attrs = python.get_instance_user_attributes(self)
            for attr in inst_attrs:
                options[attr[0]] = attr[1]

        overrides = self._overrides or dict()
        options.update(overrides)

        all_options = dict()
        if not skip_instance_attrs:
            for k, v in options.items():
                if k.startswith('_') or k in ['DEFAULT_SIZE', 'EXTENSION']:
                    continue
                if inspect.isfunction(v) or inspect.ismethod(v) or hasattr(
                        v, '__dict__'):
                    continue
                if isinstance(v, types.BuiltinFunctionType) or isinstance(
                        v, types.BuiltinMethodType):
                    continue
                if isinstance(v, Signal):
                    continue
                if python.is_int(v):
                    all_options[k] = int(v)
                elif python.is_float(v):
                    all_options[k] = float(v)
                elif isinstance(v, QColor):
                    all_options[k] = qt_color.Color(v).to_string()
                else:
                    str_attr = str(v)
                    # if str_attr.startswith('^'):
                    #     continue
                    all_options[k] = str_attr
            return all_options

    #     options = {
    #         "ACCENT_COLOR": accent_color.to_string(),
    #         "ACCENT_COLOR_DARKER": qt_color.Color(accent_color.darker(150)).to_string(),
    #         "ACCENT_COLOR_LIGHTER": qt_color.Color(accent_color.lighter(150)).to_string(),
    #         "ACCENT_COLOR_R": str(accent_color.red()),
    #         "ACCENT_COLOR_G": str(accent_color.green()),
    #         "ACCENT_COLOR_B": str(accent_color.blue()),
    #
    #         "ACCENT_FOREGROUND_COLOR": accent_foreground_color.to_string(),
    #         "ACCENT_FOREGROUND_COLOR_DARKER": qt_color.Color(accent_foreground_color.darker(150)).to_string(),
    #
    #         "FOREGROUND_COLOR": foreground_color.to_string(),
    #         "FOREGROUND_COLOR_R": str(foreground_color.red()),
    #         "FOREGROUND_COLOR_G": str(foreground_color.green()),
    #         "FOREGROUND_COLOR_B": str(foreground_color.blue()),
    #
    #         "BACKGROUND_COLOR": background_color.to_string(),
    #         "BACKGROUND_COLOR_LIGHTER": qt_color.Color(background_color.lighter(150)).to_string(),
    #         "BACKGROUND_COLOR_DARKER": qt_color.Color(background_color.darker(150)).to_string(),
    #         "BACKGROUND_COLOR_R": str(background_color.red()),
    #         "BACKGROUND_COLOR_G": str(background_color.green()),
    #         "BACKGROUND_COLOR_B": str(background_color.blue()),
    #
    #         "ITEM_TEXT_COLOR": foreground_color.to_string(),
    #         "ITEM_TEXT_SELECTED_COLOR": accent_foreground_color.to_string(),
    #
    #         "ITEM_BACKGROUND_COLOR": item_background_color.to_string(),
    #         "ITEM_BACKGROUND_HOVER_COLOR": item_background_hover_color.to_string(),
    #         "ITEM_BACKGROUND_SELECTED_COLOR": accent_color.to_string(),
    #     }
    #

        return options