예제 #1
0
    def createPixmapForSite(self, icon, title, url):
        '''
        @param: icon QIcon
        @param: title QString
        @param: url QString
        @return: QPixmap
        '''
        fontMetrics = QApplication.fontMetrics()
        padding = 4
        text = len(title) > len(url) and title or url
        maxWidth = fontMetrics.width(text) + 3 * padding + 16
        width = min(maxWidth, 150)
        height = fontMetrics.height() * 2 + fontMetrics.leading() + 2 * padding

        pixelRatio = gVar.app.devicePixelRatio()
        pixmap = QPixmap(width * pixelRatio, height * pixelRatio)
        pixmap.setDevicePixelRatio(pixelRatio)

        painter = QPainter(pixmap)
        painter.setRenderHint(QPainter.Antialiasing)

        # Draw background
        pen = QPen(Qt.black)
        pen.setWidth(1)
        painter.setPen(pen)

        path = QPainterPath()
        path.addRect(QRectF(0, 0, width, height))

        painter.fillPath(path, Qt.white)
        painter.drawPath(path)

        # Draw icon
        iconRect = QRect(padding, 0, 16, height)
        icon.paint(painter, iconRect)

        # Draw title
        titleRect = QRectF(iconRect.right() + padding, padding,
                width - padding - iconRect.right(), fontMetrics.height())
        painter.drawText(titleRect, fontMetrics.elidedText(title, Qt.ElideRight, titleRect.width()))

        # Draw url
        urlRect = QRectF(titleRect.x(), titleRect.bottom() + fontMetrics.leading(),
                titleRect.width(), titleRect.height())
        painter.setPen(QApplication.palette().color(QPalette.Link))
        painter.drawText(urlRect, fontMetrics.elidedText(url, Qt.ElideRight, urlRect.width()))

        return pixmap
예제 #2
0
    def _setup_ui(self):
        self.setRenderHint(QPainter.Antialiasing)
        self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
        self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
        self.setFrameShape(QFrame.NoFrame)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

        self._loading_map = self._generate_loading_map()

        self._scene = QGraphicsScene(self)
        self._scene.setBackgroundBrush(QBrush(self.palette().dark().color()))

        self._image = QGraphicsPixmapItem()
        self._scene.addItem(self._image)

        # hud
        hud_color = self.palette().highlight().color().lighter(150)
        self._overlay = self._scene.addEllipse(QRectF(), QPen(hud_color, 4),
                                               QBrush(Qt.NoBrush))
        self._crosshair = self._scene.addEllipse(QRectF(), QPen(hud_color, 2),
                                                 QBrush(Qt.NoBrush))

        rect = QRectF(0, 0, self._w, self._h)
        cx = rect.center().x()
        cy = rect.center().y()
        r = min(rect.width(), rect.height()) * 0.7
        self._overlay.setRect(QRectF(cx - r / 2, cy - r / 2, r, r))
        rc = min(rect.width(), rect.height()) * 0.05
        self._crosshair.setRect(QRectF(cx - rc / 2, cy - rc / 2, rc, rc))

        self._overlay.setVisible(False)
        self._crosshair.setVisible(False)

        # scene
        self.setScene(self._scene)

        self._info = CameraInspectorInfo()
        self.setLayout(self._info)