Changeset 11170:dcc12da18030 in orange


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.

Location:
Orange/OrangeCanvas/gui
Files:
2 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) 
  • Orange/OrangeCanvas/gui/utils.py

    r11100 r11170  
    33 
    44""" 
     5import os 
     6import sys 
     7 
    58from contextlib import contextmanager 
    69 
     
    5659 
    5760    """ 
     61    if sys.platform == "win32": 
     62        return is_dwm_compositing_enabled() 
     63    elif sys.platform == "cygwin": 
     64        return False 
     65    elif sys.platform == "darwin": 
     66        try: 
     67            # Test if Qt was build against X11. 
     68            from PyQt4.QtGui import QX11Info 
     69            return QX11Info.isCompositingManagerRunning() 
     70        except ImportError: 
     71            # Assuming Quartz compositor is running. 
     72            return True 
     73    elif sys.platform.startswith("linux"): 
     74        # TODO: wayland?? 
     75        return is_x11_compositing_enabled() 
     76    elif sys.platform.startswith("freebsd"): 
     77        return is_x11_compositing_enabled() 
     78    elif os.name == "": 
     79        # Any other system (Win, OSX) is assumed to support it 
     80        return True 
     81 
     82 
     83def is_x11_compositing_enabled(): 
     84    """Is X11 compositing manager running. 
     85    """ 
    5886    try: 
    5987        from PyQt4.QtGui import QX11Info 
    60         return QX11Info.isCompositingManagerRunning() 
    6188    except ImportError: 
    62         # Any other system (Win, OSX) is assumed to support it 
    63         return True 
     89        return False 
     90 
     91    return QX11Info.isCompositingManagerRunning() 
     92 
     93 
     94def is_dwm_compositing_enabled(): 
     95    """Is Desktop Window Manager compositing (Aero) enabled. 
     96    """ 
     97    import ctypes 
     98 
     99    enabled = ctypes.c_bool() 
     100    try: 
     101        DwmIsCompositionEnabled = ctypes.windll.dwmapi.DwmIsCompositionEnabled 
     102    except AttributeError: 
     103        # dwmapi or DwmIsCompositionEnabled is not present 
     104        return False 
     105 
     106    rval = DwmIsCompositionEnabled(ctypes.byref(enabled)) 
     107 
     108    return rval == 0 and enabled.value 
    64109 
    65110 
Note: See TracChangeset for help on using the changeset viewer.