Ignore:
Timestamp:
11/06/12 10:57:47 (18 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added fallback using 'setMask' to FramelessWindow.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/gui/framelesswindow.py

    r11104 r11170  
    44""" 
    55 
    6 from PyQt4.QtGui import QWidget, QPalette, QPainter, QStyleOption 
     6from PyQt4.QtGui import QWidget, QPalette, QPainter, QStyleOption, QBitmap 
    77 
    88from PyQt4.QtCore import Qt, pyqtProperty as Property 
     
    1818    def __init__(self, parent=None, **kwargs): 
    1919        QWidget.__init__(self, parent, **kwargs) 
    20         self.setWindowFlags(Qt.FramelessWindowHint) 
     20        self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) 
    2121 
    2222        self.__radius = 6 
     
    3030        if self.__radius != radius: 
    3131            self.__radius = radius 
     32            if not self.__isTransparencySupported: 
     33                self.__updateMask() 
    3234            self.update() 
    3335 
    3436    def radius(self): 
     37        """Return the border radius. 
     38        """ 
    3539        return self.__radius 
    3640 
    37     radius_ = Property(int, fget=radius, fset=setRadius) 
     41    radius_ = Property(int, fget=radius, fset=setRadius, 
     42                       designable=True) 
     43 
     44    def resizeEvent(self, event): 
     45        QWidget.resizeEvent(self, event) 
     46        if not self.__isTransparencySupported: 
     47            self.__updateMask() 
     48 
     49    def __updateMask(self): 
     50        opt = QStyleOption() 
     51        opt.init(self) 
     52        rect = opt.rect 
     53 
     54        size = rect.size() 
     55        mask = QBitmap(size) 
     56 
     57        p = QPainter(mask) 
     58        p.setRenderHint(QPainter.Antialiasing) 
     59        p.setBrush(Qt.black) 
     60        p.setPen(Qt.NoPen) 
     61        p.drawRoundedRect(rect, self.__radius, self.__radius) 
     62        p.end() 
     63 
     64        self.setMask(mask) 
    3865 
    3966    def paintEvent(self, event): 
    4067        if self.__isTransparencySupported: 
    41             p = QPainter(self) 
    42             p.setRenderHint(QPainter.Antialiasing, True) 
    43  
    4468            opt = QStyleOption() 
    4569            opt.init(self) 
    4670            rect = opt.rect 
     71 
     72            p = QPainter(self) 
     73            p.setRenderHint(QPainter.Antialiasing, True) 
    4774            p.setBrush(opt.palette.brush(QPalette.Window)) 
    4875            p.setPen(Qt.NoPen) 
Note: See TracChangeset for help on using the changeset viewer.