def drawToolButtonSunkenBezel(self, painter, rect, color): painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) hole_rect = rect.adjusted(1, 1, -1, -1) shadow_rect = rect.adjusted(2, 2, -2, -2) content_rect = rect.adjusted(3, 3, -3, -3) shade_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.MidlightShade, 0.5) shadow_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.ShadowShade, 0.0) if self.calc_shadow_color(color).value() > color.value(): content_grad = QLinearGradient( 0, content_rect.top(), 0, content_rect.bottom() + content_rect.height() * 0.2) content_grad.setColorAt(0.0, self.background_bottom_color(color)) content_grad.setColorAt(1.0, self.background_top_color(color)) else: content_grad = QLinearGradient( 0, content_rect.top() - content_rect.height() * 0.2, 0, content_rect.bottom()) content_grad.setColorAt(0.0, self.background_top_color(color)) content_grad.setColorAt(1.0, self.background_bottom_color(color)) # hole edge painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(hole_rect.topLeft(), hole_rect.bottomLeft()) blend.setColorAt(0.0, self.color_with_alpha(shadow_color, 0x80)) blend.setColorAt(1.0, self.color_with_alpha(shadow_color, 0x20)) painter.setBrush(blend) painter.drawRoundedRect(hole_rect, 4, 4) # 4 or 5 # shadow painter.setCompositionMode(QPainter.CompositionMode_Source) painter.setBrush(content_grad) painter.drawRoundedRect(shadow_rect, 4, 4) # 5 or 6 painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(shadow_rect.topLeft(), shadow_rect.bottomLeft()) blend.setColorAt(0.0, self.color_with_alpha(shadow_color, 0x40)) blend.setColorAt(0.1, self.color_with_alpha(shadow_color, 0x07)) blend.setColorAt(0.9, self.color_with_alpha(shadow_color, 0x07)) blend.setColorAt(1.0, shade_color) painter.setBrush(blend) painter.drawRoundedRect(shadow_rect, 4, 4) # 5 or 6 # content painter.setCompositionMode(QPainter.CompositionMode_Source) painter.setBrush(content_grad) painter.drawRoundedRect(content_rect, 4, 4)
def drawToolButtonMenuIndicator(self, option, painter, widget=None): arrow_rect = self.proxy().subControlRect(QStyle.CC_ToolButton, option, QStyle.SC_ToolButtonMenu, widget) text_color = option.palette.color(QPalette.WindowText if option.state & QStyle.State_AutoRaise else QPalette.ButtonText) button_color = option.palette.color(QPalette.Button) background_color = self.background_color(button_color, 0.5) painter.save() # draw separating vertical line if option.state & (QStyle.State_On|QStyle.State_Sunken): top_offset, bottom_offset = 4, 3 else: top_offset, bottom_offset = 2, 2 if option.direction == Qt.LeftToRight: separator_line = QLineF(arrow_rect.x()-3, arrow_rect.top()+top_offset, arrow_rect.x()-3, arrow_rect.bottom()-bottom_offset) else: separator_line = QLineF(arrow_rect.right()+3, arrow_rect.top()+top_offset, arrow_rect.right()+3, arrow_rect.bottom()-bottom_offset) light_gradient = QLinearGradient(separator_line.p1(), separator_line.p2()) light_gradient.setColorAt(0.0, ColorScheme.shade(self.background_top_color(button_color), ColorScheme.LightShade, 0.0)) light_gradient.setColorAt(1.0, ColorScheme.shade(self.background_bottom_color(button_color), ColorScheme.MidlightShade, 0.5)) separator_color = ColorScheme.shade(self.background_bottom_color(button_color), ColorScheme.MidShade, 0.0) painter.setRenderHint(QPainter.Antialiasing, False) painter.setPen(QPen(light_gradient, 1)) painter.drawLine(separator_line.translated(-1, 0)) painter.drawLine(separator_line.translated(+1, 0)) painter.setPen(QPen(separator_color, 1)) painter.drawLine(separator_line) # draw arrow arrow = QPolygonF([QPointF(-3, -1.5), QPointF(0.5, 2.5), QPointF(4, -1.5)]) if option.direction == Qt.LeftToRight: arrow.translate(-2, 1) else: arrow.translate(+2, 1) pen_thickness = 1.6 painter.setRenderHint(QPainter.Antialiasing, True) painter.translate(arrow_rect.center()) painter.translate(0, +1) painter.setPen(QPen(self.calc_light_color(background_color), pen_thickness, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) painter.drawPolyline(arrow) painter.translate(0, -1) painter.setPen(QPen(self.deco_color(background_color, text_color), pen_thickness, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) painter.drawPolyline(arrow) painter.restore()
def drawToolButtonSunkenBezel(self, painter, rect, color): painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) hole_rect = rect.adjusted(1, 1, -1, -1) shadow_rect = rect.adjusted(2, 2, -2, -2) content_rect = rect.adjusted(3, 3, -3, -3) shade_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.MidlightShade, 0.5) shadow_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.ShadowShade, 0.0) if self.calc_shadow_color(color).value() > color.value(): content_grad = QLinearGradient( 0, content_rect.top(), 0, content_rect.bottom() + content_rect.height() * 0.2 ) content_grad.setColorAt(0.0, self.background_bottom_color(color)) content_grad.setColorAt(1.0, self.background_top_color(color)) else: content_grad = QLinearGradient( 0, content_rect.top() - content_rect.height() * 0.2, 0, content_rect.bottom() ) content_grad.setColorAt(0.0, self.background_top_color(color)) content_grad.setColorAt(1.0, self.background_bottom_color(color)) # hole edge painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(hole_rect.topLeft(), hole_rect.bottomLeft()) blend.setColorAt(0.0, self.color_with_alpha(shadow_color, 0x80)) blend.setColorAt(1.0, self.color_with_alpha(shadow_color, 0x20)) painter.setBrush(blend) painter.drawRoundedRect(hole_rect, 4, 4) # 4 or 5 # shadow painter.setCompositionMode(QPainter.CompositionMode_Source) painter.setBrush(content_grad) painter.drawRoundedRect(shadow_rect, 4, 4) # 5 or 6 painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(shadow_rect.topLeft(), shadow_rect.bottomLeft()) blend.setColorAt(0.0, self.color_with_alpha(shadow_color, 0x40)) blend.setColorAt(0.1, self.color_with_alpha(shadow_color, 0x07)) blend.setColorAt(0.9, self.color_with_alpha(shadow_color, 0x07)) blend.setColorAt(1.0, shade_color) painter.setBrush(blend) painter.drawRoundedRect(shadow_rect, 4, 4) # 5 or 6 # content painter.setCompositionMode(QPainter.CompositionMode_Source) painter.setBrush(content_grad) painter.drawRoundedRect(content_rect, 4, 4)
def drawToolButtonBezel(self, painter, rect, color, hoover=False, has_focus=False): painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) glow_rect = rect shadow_rect = rect.adjusted(1, 1, -1, -1) border_rect = rect.adjusted(2, 2, -2, -2) content_rect = rect.adjusted(3, 3, -3, -3) focus_color = QColor('#3aa7dd') hoover_color = QColor('#6ed6ff') shadow_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.ShadowShade, 0.0) border_color_top = ColorScheme.shade(self.background_top_color(color), ColorScheme.LightShade, 0.0) border_color_bottom = ColorScheme.shade( self.background_bottom_color(color), ColorScheme.MidlightShade, 0.5) # glow painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(glow_rect.topLeft(), glow_rect.bottomLeft()) if hoover: blend.setColorAt(0.0, self.color_with_alpha(hoover_color, 0x45)) blend.setColorAt(0.9, self.color_with_alpha(hoover_color, 0x45)) blend.setColorAt( 1.0, self.color_with_alpha( ColorUtils.mix(hoover_color, shadow_color, 0.4), 0x55)) elif has_focus: blend.setColorAt(0.0, self.color_with_alpha(focus_color, 0x45)) blend.setColorAt(0.9, self.color_with_alpha(focus_color, 0x45)) blend.setColorAt( 1.0, self.color_with_alpha( ColorUtils.mix(focus_color, shadow_color, 0.4), 0x55)) else: blend.setColorAt(0.0, Qt.transparent) # or @0.5 blend.setColorAt(0.9, self.color_with_alpha(shadow_color, 0x10)) # blend.setColorAt(1-4.0/glow_rect.height(), self.color_with_alpha(shadow_color, 0x10)) # this is for exactly 4 pixels from bottom blend.setColorAt(1.0, self.color_with_alpha(shadow_color, 0x30)) # 0x25, 0x30 or 0x35 painter.setBrush(blend) painter.drawRoundedRect(glow_rect, 5, 5) # 5 or 6 # shadow painter.setCompositionMode(QPainter.CompositionMode_SourceOver) if hoover: painter.setBrush(hoover_color) elif has_focus: painter.setBrush(focus_color) else: blend = QLinearGradient(shadow_rect.topLeft(), shadow_rect.bottomLeft()) blend.setColorAt(0.00, self.color_with_alpha(shadow_color, 0x10)) blend.setColorAt(1.00, self.color_with_alpha(shadow_color, 0x80)) painter.setBrush(blend) painter.drawRoundedRect(shadow_rect, 4, 4) # 4 or 5 # border painter.setCompositionMode(QPainter.CompositionMode_Source) blend = QLinearGradient(border_rect.topLeft(), border_rect.bottomLeft()) blend.setColorAt(0.0, border_color_top) blend.setColorAt(1.0, border_color_bottom) painter.setBrush(blend) painter.drawRoundedRect(border_rect, 4, 4) # content painter.setCompositionMode(QPainter.CompositionMode_Source) grad = QLinearGradient(content_rect.topLeft(), content_rect.bottomLeft()) grad.setColorAt(0.0, self.background_top_color(color)) grad.setColorAt(1.0, self.background_bottom_color(color)) painter.setBrush(QBrush(grad)) painter.drawRoundedRect(content_rect, 4, 4)
def drawToolButtonMenuIndicator(self, option, painter, widget=None): arrow_rect = self.proxy().subControlRect(QStyle.CC_ToolButton, option, QStyle.SC_ToolButtonMenu, widget) text_color = option.palette.color( QPalette.WindowText if option.state & QStyle.State_AutoRaise else QPalette.ButtonText ) button_color = option.palette.color(QPalette.Button) background_color = self.background_color(button_color, 0.5) painter.save() # draw separating vertical line if option.state & (QStyle.State_On | QStyle.State_Sunken): top_offset, bottom_offset = 4, 3 else: top_offset, bottom_offset = 2, 2 if option.direction == Qt.LeftToRight: separator_line = QLineF( arrow_rect.x() - 3, arrow_rect.top() + top_offset, arrow_rect.x() - 3, arrow_rect.bottom() - bottom_offset, ) else: separator_line = QLineF( arrow_rect.right() + 3, arrow_rect.top() + top_offset, arrow_rect.right() + 3, arrow_rect.bottom() - bottom_offset, ) light_gradient = QLinearGradient(separator_line.p1(), separator_line.p2()) light_gradient.setColorAt( 0.0, ColorScheme.shade(self.background_top_color(button_color), ColorScheme.LightShade, 0.0) ) light_gradient.setColorAt( 1.0, ColorScheme.shade(self.background_bottom_color(button_color), ColorScheme.MidlightShade, 0.5) ) separator_color = ColorScheme.shade(self.background_bottom_color(button_color), ColorScheme.MidShade, 0.0) painter.setRenderHint(QPainter.Antialiasing, False) painter.setPen(QPen(light_gradient, 1)) painter.drawLine(separator_line.translated(-1, 0)) painter.drawLine(separator_line.translated(+1, 0)) painter.setPen(QPen(separator_color, 1)) painter.drawLine(separator_line) # draw arrow arrow = QPolygonF([QPointF(-3, -1.5), QPointF(0.5, 2.5), QPointF(4, -1.5)]) if option.direction == Qt.LeftToRight: arrow.translate(-2, 1) else: arrow.translate(+2, 1) pen_thickness = 1.6 painter.setRenderHint(QPainter.Antialiasing, True) painter.translate(arrow_rect.center()) painter.translate(0, +1) painter.setPen( QPen(self.calc_light_color(background_color), pen_thickness, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) ) painter.drawPolyline(arrow) painter.translate(0, -1) painter.setPen( QPen(self.deco_color(background_color, text_color), pen_thickness, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) ) painter.drawPolyline(arrow) painter.restore()
def drawToolButtonBezel(self, painter, rect, color, hoover=False, has_focus=False): painter.setRenderHint(QPainter.Antialiasing, True) painter.setPen(Qt.NoPen) glow_rect = rect shadow_rect = rect.adjusted(1, 1, -1, -1) border_rect = rect.adjusted(2, 2, -2, -2) content_rect = rect.adjusted(3, 3, -3, -3) focus_color = QColor("#3aa7dd") hoover_color = QColor("#6ed6ff") shadow_color = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.ShadowShade, 0.0) border_color_top = ColorScheme.shade(self.background_top_color(color), ColorScheme.LightShade, 0.0) border_color_bottom = ColorScheme.shade(self.background_bottom_color(color), ColorScheme.MidlightShade, 0.5) # glow painter.setCompositionMode(QPainter.CompositionMode_SourceOver) blend = QLinearGradient(glow_rect.topLeft(), glow_rect.bottomLeft()) if hoover: blend.setColorAt(0.0, self.color_with_alpha(hoover_color, 0x45)) blend.setColorAt(0.9, self.color_with_alpha(hoover_color, 0x45)) blend.setColorAt(1.0, self.color_with_alpha(ColorUtils.mix(hoover_color, shadow_color, 0.4), 0x55)) elif has_focus: blend.setColorAt(0.0, self.color_with_alpha(focus_color, 0x45)) blend.setColorAt(0.9, self.color_with_alpha(focus_color, 0x45)) blend.setColorAt(1.0, self.color_with_alpha(ColorUtils.mix(focus_color, shadow_color, 0.4), 0x55)) else: blend.setColorAt(0.0, Qt.transparent) # or @0.5 blend.setColorAt(0.9, self.color_with_alpha(shadow_color, 0x10)) # blend.setColorAt(1-4.0/glow_rect.height(), self.color_with_alpha(shadow_color, 0x10)) # this is for exactly 4 pixels from bottom blend.setColorAt(1.0, self.color_with_alpha(shadow_color, 0x30)) # 0x25, 0x30 or 0x35 painter.setBrush(blend) painter.drawRoundedRect(glow_rect, 5, 5) # 5 or 6 # shadow painter.setCompositionMode(QPainter.CompositionMode_SourceOver) if hoover: painter.setBrush(hoover_color) elif has_focus: painter.setBrush(focus_color) else: blend = QLinearGradient(shadow_rect.topLeft(), shadow_rect.bottomLeft()) blend.setColorAt(0.00, self.color_with_alpha(shadow_color, 0x10)) blend.setColorAt(1.00, self.color_with_alpha(shadow_color, 0x80)) painter.setBrush(blend) painter.drawRoundedRect(shadow_rect, 4, 4) # 4 or 5 # border painter.setCompositionMode(QPainter.CompositionMode_Source) blend = QLinearGradient(border_rect.topLeft(), border_rect.bottomLeft()) blend.setColorAt(0.0, border_color_top) blend.setColorAt(1.0, border_color_bottom) painter.setBrush(blend) painter.drawRoundedRect(border_rect, 4, 4) # content painter.setCompositionMode(QPainter.CompositionMode_Source) grad = QLinearGradient(content_rect.topLeft(), content_rect.bottomLeft()) grad.setColorAt(0.0, self.background_top_color(color)) grad.setColorAt(1.0, self.background_bottom_color(color)) painter.setBrush(QBrush(grad)) painter.drawRoundedRect(content_rect, 4, 4)