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,7 +276,9 @@ 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.
Overriden to draw our own tab close button.
Args: Args:
element: PrimitiveElement element: PrimitiveElement
@ -287,14 +290,25 @@ class TabBarStyle(QCommonStyle):
self._style.drawPrimitive(element, opt, painter, widget) self._style.drawPrimitive(element, opt, painter, widget)
return return
painter.save() painter.save()
painter.setPen(QColor(config.get('colors', 'tab.fg'))) # This fixes some weird off-by-ones in Qt.
rect = QRectF(opt.rect) # See http://stackoverflow.com/a/17019898/2085149
center = rect.center() painter.translate(0.5, 0.5)
new_size = rect.size() * 0.4 color = QColor(config.get('colors', 'tab.fg'))
rect.setSize(new_size) if opt.state & QStyle.State_Raised:
rect.moveCenter(center) color = highlight_color(color, factor=0.2)
painter.drawLine(rect.topLeft(), rect.bottomRight()) elif opt.state & QStyle.State_Sunken:
painter.drawLine(rect.topRight(), rect.bottomLeft()) 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() painter.restore()
def pixelMetric(self, metric, option=None, widget=None): def pixelMetric(self, metric, option=None, widget=None):