Source code for camelot.view.controls.liteboxview

#  ============================================================================
#
#  Copyright (C) 2007-2011 Conceptive Engineering bvba. All rights reserved.
#  www.conceptive.be / project-camelot@conceptive.be
#
#  This file is part of the Camelot Library.
#
#  This file may be used under the terms of the GNU General Public
#  License version 2.0 as published by the Free Software Foundation
#  and appearing in the file license.txt included in the packaging of
#  this file.  Please review this information to ensure GNU
#  General Public Licensing requirements will be met.
#
#  If you are unsure which license is appropriate for your use, please
#  visit www.python-camelot.com or contact project-camelot@conceptive.be
#
#  This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
#  WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
#  For use of this library in commercial applications, please contact
#  project-camelot@conceptive.be
#
#  ============================================================================

from PyQt4.QtGui import (
    QPainter,
    QGraphicsView,
    QGraphicsScene,
    QColor, QPixmap,
    QGraphicsPixmapItem,
)
from PyQt4.QtCore import Qt
from PyQt4 import QtGui, QtCore

from camelot.view.art import Pixmap


[docs]def get_desktop(): from PyQt4.QtCore import QCoreApplication return QCoreApplication.instance().desktop()
[docs]def get_desktop_pixmap(): return QPixmap.grabWindow(get_desktop().winId())
[docs]def fit_to_screen(pixmap): d = get_desktop() dh = d.height() dw = d.width() if dh < pixmap.height() or dw < pixmap.width(): fit = .95 return pixmap.scaled(dw * fit, dh * fit, Qt.KeepAspectRatio) return pixmap
[docs]class CloseMark(QGraphicsPixmapItem): def __init__(self, pixmap=None, hover_pixmap=None, parent=None): super(CloseMark, self).__init__(parent) DEFAULT_PIXMAP = Pixmap('close_mark.png').getQPixmap() DEFAULT_HOVER_PIXMAP = Pixmap('close_mark_hover.png').getQPixmap() self._pixmap = pixmap or DEFAULT_PIXMAP self._hover_pixmap = hover_pixmap or DEFAULT_HOVER_PIXMAP self.setPixmap(self._pixmap) # move to top right corner width = self.pixmap().width() height = self.pixmap().height() parent_width = self.parentItem().boundingRect().width() self.setPos(-width/2 + parent_width, -height/2) self.setAcceptsHoverEvents(True) # stays on top of other items self.setZValue(10)
[docs] def hoverEnterEvent(self, event): self.setPixmap(self._hover_pixmap) self.update()
[docs] def hoverLeaveEvent(self, event): self.setPixmap(self._pixmap) self.update()
[docs] def mousePressEvent(self, event): view = self.scene().views()[0] view.close()
[docs]class LiteBoxView(QGraphicsView): ALPHA = QColor(0, 0, 0, 192) closed_signal = QtCore.pyqtSignal() def __init__(self, parent=None): super(LiteBoxView, self).__init__(parent) self.setWindowFlags(Qt.Window | Qt.WindowStaysOnTopHint) #self.setAttribute(Qt.WA_DeleteOnClose) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) QtGui.QShortcut( Qt.Key_Escape, self, self.close ) self.desktopshot = None # will propagate to children self.setRenderHint(QPainter.Antialiasing) self.setRenderHint(QPainter.TextAntialiasing) self.scene = QGraphicsScene() self.setScene(self.scene)
[docs] def close(self): self.closed_signal.emit() super(LiteBoxView, self).close()
[docs] def drawBackground(self, painter, rect): if self.desktopshot is None: self.desktopshot = get_desktop_pixmap() painter.drawPixmap(self.mapToScene(0, 0), self.desktopshot) painter.setBrush(LiteBoxView.ALPHA) painter.drawRect(rect)
[docs] def show_fullscreen_svg(self, path): """:param path: path to an svg file""" from PyQt4 import QtSvg item = QtSvg.QGraphicsSvgItem(path) self.show_fullscreen_item(item)
[docs] def show_fullscreen_pixmap(self, pixmap): """:param pixmap: a QPixmap""" item = QGraphicsPixmapItem(pixmap) self.show_fullscreen_item(item)
[docs] def show_fullscreen_image(self, image): """:param image: a QImage""" pixmap = QPixmap.fromImage(image) self.show_fullscreen_pixmap( pixmap )
[docs] def show_fullscreen_item(self, item): """:param item: a QGraphicsItem to be shown fullscreen""" item.setFlag(QtGui.QGraphicsItem.ItemIsFocusable, True) self.scene.clear() self.scene.addItem(item) CloseMark(parent=item) self.showFullScreen() self.setFocus()

Comments
blog comments powered by Disqus