Nicer drawing of close cross.

This commit is contained in:
Florian Bruhin 2014-07-15 11:08:10 +02:00
parent b47d53953b
commit 7c8471e64c

View File

@ -30,6 +30,7 @@ from PyQt5.QtGui import QIcon, QPalette, QColor
import qutebrowser.config.config as config import qutebrowser.config.config as config
from qutebrowser.config.style import set_register_stylesheet from qutebrowser.config.style import set_register_stylesheet
from qutebrowser.utils.qt import qt_ensure_valid from qutebrowser.utils.qt import qt_ensure_valid
from qutebrowser.utils.misc import highlight_color
class TabWidget(QTabWidget): class TabWidget(QTabWidget):
@ -275,27 +276,40 @@ class TabBarStyle(QCommonStyle):
self._style.drawControl(element, opt, p, widget) self._style.drawControl(element, opt, p, widget)
def drawPrimitive(self, element, opt, painter, widget=None): def drawPrimitive(self, element, opt, painter, widget=None):
"""Draws the given primitive element. """Draw the given primitive element.
Args: Overriden to draw our own tab close button.
element: PrimitiveElement
opt: const QStyleOption * Args:
painter: QPainter * element: PrimitiveElement
widget: const QWidget * opt: const QStyleOption *
""" painter: QPainter *
if element != QStyle.PE_IndicatorTabClose: widget: const QWidget *
self._style.drawPrimitive(element, opt, painter, widget) """
return if element != QStyle.PE_IndicatorTabClose:
painter.save() self._style.drawPrimitive(element, opt, painter, widget)
painter.setPen(QColor(config.get('colors', 'tab.fg'))) return
rect = QRectF(opt.rect) painter.save()
center = rect.center() # This fixes some weird off-by-ones in Qt.
new_size = rect.size() * 0.4 # See http://stackoverflow.com/a/17019898/2085149
rect.setSize(new_size) painter.translate(0.5, 0.5)
rect.moveCenter(center) color = QColor(config.get('colors', 'tab.fg'))
painter.drawLine(rect.topLeft(), rect.bottomRight()) if opt.state & QStyle.State_Raised:
painter.drawLine(rect.topRight(), rect.bottomLeft()) color = highlight_color(color, factor=0.2)
painter.restore() elif opt.state & QStyle.State_Sunken:
color = highlight_color(color, factor=0.3)
painter.setPen(color)
side = min(opt.rect.width(), opt.rect.height())
square = QRect()
square.setSize(QSize(side, side) * 0.4)
square.moveCenter(opt.rect.center())
if square.width() % 2 == 0:
# An X is easier to paint in a square with an odd count of
# pixels.
square.adjust(-1, -1, 0, 0)
painter.drawLine(square.topLeft(), square.bottomRight())
painter.drawLine(square.topRight(), square.bottomLeft())
painter.restore()
def pixelMetric(self, metric, option=None, widget=None): def pixelMetric(self, metric, option=None, widget=None):
"""Override pixelMetric to not shift the selected tab. """Override pixelMetric to not shift the selected tab.