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)
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)
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()
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
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
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
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