source: orange/Orange/OrangeCanvas/gui/framelesswindow.py @ 11366:7f9332b11252

Revision 11366:7f9332b11252, 2.3 KB checked in by Ales Erjavec <ales.erjavec@…>, 14 months ago (diff)

Added rst documentation for the canvas gui package.

Fixing docstrings in the process.

Line 
1"""
2A frameless window widget
3
4"""
5
6from PyQt4.QtGui import QWidget, QPalette, QPainter, QStyleOption, QBitmap
7
8from PyQt4.QtCore import Qt, pyqtProperty as Property
9
10from .utils import is_transparency_supported, StyledWidget_paintEvent
11
12
13class FramelessWindow(QWidget):
14    """
15    A basic frameless window widget with rounded corners (if supported by
16    the windowing system).
17
18    """
19    def __init__(self, parent=None, **kwargs):
20        QWidget.__init__(self, parent, **kwargs)
21        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
22
23        self.__radius = 6
24        self.__isTransparencySupported = is_transparency_supported()
25        self.setAttribute(Qt.WA_TranslucentBackground,
26                          self.__isTransparencySupported)
27
28    def setRadius(self, radius):
29        """
30        Set the window rounded border radius.
31        """
32        if self.__radius != radius:
33            self.__radius = radius
34            if not self.__isTransparencySupported:
35                self.__updateMask()
36            self.update()
37
38    def radius(self):
39        """
40        Return the border radius.
41        """
42        return self.__radius
43
44    radius_ = Property(int, fget=radius, fset=setRadius,
45                       designable=True,
46                       doc="Window border radius")
47
48    def resizeEvent(self, event):
49        QWidget.resizeEvent(self, event)
50        if not self.__isTransparencySupported:
51            self.__updateMask()
52
53    def __updateMask(self):
54        opt = QStyleOption()
55        opt.init(self)
56        rect = opt.rect
57
58        size = rect.size()
59        mask = QBitmap(size)
60
61        p = QPainter(mask)
62        p.setRenderHint(QPainter.Antialiasing)
63        p.setBrush(Qt.black)
64        p.setPen(Qt.NoPen)
65        p.drawRoundedRect(rect, self.__radius, self.__radius)
66        p.end()
67
68        self.setMask(mask)
69
70    def paintEvent(self, event):
71        if self.__isTransparencySupported:
72            opt = QStyleOption()
73            opt.init(self)
74            rect = opt.rect
75
76            p = QPainter(self)
77            p.setRenderHint(QPainter.Antialiasing, True)
78            p.setBrush(opt.palette.brush(QPalette.Window))
79            p.setPen(Qt.NoPen)
80            p.drawRoundedRect(rect, self.__radius, self.__radius)
81            p.end()
82        else:
83            StyledWidget_paintEvent(self, event)
Note: See TracBrowser for help on using the repository browser.