def showMoveHelper(self, visible=None): """show help text In empty HandBoards""" if visible is None: visible = not self.uiTiles if self.__moveHelper and not isAlive(self.__moveHelper): return if visible: if not self.__moveHelper: splitter = QGraphicsRectItem(self) hbCenter = self.rect().center() splitter.setRect(hbCenter.x() * 0.5, hbCenter.y(), hbCenter.x() * 1, 1) helpItems = [splitter] for name, yFactor in [(i18n('Move Exposed Tiles Here'), 0.5), (i18n('Move Concealed Tiles Here'), 1.5) ]: helper = QGraphicsSimpleTextItem(name, self) helper.setScale(3) nameRect = QRectF() nameRect.setSize( helper.mapToParent( helper.boundingRect()).boundingRect().size()) center = QPointF(hbCenter) center.setY(center.y() * yFactor) helper.setPos(center - nameRect.center()) if sceneRotation(self) == 180: rotateCenter(helper, 180) helpItems.append(helper) self.__moveHelper = self.scene().createItemGroup(helpItems) self.__moveHelper.setVisible(True) else: if self.__moveHelper: self.__moveHelper.setVisible(False)
def showMoveHelper(self, visible=None): """show help text In empty HandBoards""" if visible is None: visible = not self.uiTiles if self.__moveHelper and not isAlive(self.__moveHelper): return if visible: if not self.__moveHelper: splitter = QGraphicsRectItem(self) hbCenter = self.rect().center() splitter.setRect( hbCenter.x() * 0.5, hbCenter.y(), hbCenter.x() * 1, 1) helpItems = [splitter] for name, yFactor in [(m18n('Move Exposed Tiles Here'), 0.5), (m18n('Move Concealed Tiles Here'), 1.5)]: helper = QGraphicsSimpleTextItem(name, self) helper.setScale(3) nameRect = QRectF() nameRect.setSize( helper.mapToParent(helper.boundingRect()).boundingRect().size()) center = QPointF(hbCenter) center.setY(center.y() * yFactor) helper.setPos(center - nameRect.center()) if self.sceneRotation() == 180: rotateCenter(helper, 180) helpItems.append(helper) self.__moveHelper = self.scene().createItemGroup(helpItems) self.__moveHelper.setVisible(True) else: if self.__moveHelper: self.__moveHelper.setVisible(False)
def boundingRect(self): """define the part of the tile we want to see. Do not return QRect() if tileset is not known because that makes QGraphicsscene crash""" if self.tileset: self._boundingRect = QRectF( QPointF(), self.tileset.tileSize if Internal.Preferences.showShadows else self.tileset.faceSize) return self._boundingRect
def text(self, value): if self.__text != value: self.__text = value self.prepareGeometryChange() txt = self.__text if ' - ' in txt: # this disables animated movement if only the score changes txt = txt[:txt.rfind(' - ')] + ' - 55' self.__boundingRect = QRectF( QFontMetrics(self.__font).boundingRect(txt)) self.needsRefresh = True
def paint(self, painter, dummyOption, dummyWidget=None): """paint the marker""" with Painter(painter): painter.setBrush(self.__brush) size = Internal.scene.windTileset.faceSize.height() ellRect = QRectF(QPoint(), QPoint(size, size)) painter.drawEllipse(ellRect) renderer = Internal.scene.windTileset.renderer() painter.translate(12, 12) painter.scale(0.60, 0.60) renderer.render(painter, self.wind.markerSvgName, self.boundingRect())
def draw_border(self): rect = self.rect() outer_size = min([rect.width(), rect.height()]) outer_rect = QRectF(0, 0, outer_size, outer_size) inner_rect = self.board_rect() self._painter.fillRect(outer_rect, self._border_brush) self._painter.setPen(QPen(QBrush(Qt.black), 3)) self._painter.drawRect(inner_rect) labels = 'ABCDEFGHIJ' for i in xrange(self.board.SIZE): # bottom labels left = self._border_size + i * self._field_size top = outer_rect.bottom() - self._border_size text_rect = QRectF(left, top, self._field_size, self._border_size) self._painter.drawText(text_rect, Qt.AlignCenter, labels[i]) # left labels top = self._border_size + (self.board.SIZE - i - 1) * self._field_size text_rect = QRectF(0, top, self._border_size, self._field_size) self._painter.drawText(text_rect, Qt.AlignCenter, str(i + 1))
def decoratePlayer(self, player): """show player info on the wall""" side = player.front sideCenter = side.center() name = side.nameLabel name.setText( ' - '.join([player.localName, unicode(player.explainHand().total())])) name.resetTransform() if side.rotation() == 180: rotateCenter(name, 180) nameRect = QRectF() nameRect.setSize( name.mapToParent(name.boundingRect()).boundingRect().size()) name.setPos(sideCenter - nameRect.center()) player.colorizeName() side.windTile.setWind(player.wind, self.game.roundsFinished) side.windTile.resetTransform() side.windTile.setPos( sideCenter.x() * 1.63, sideCenter.y() - side.windTile.rect().height() / 2.5) side.nameLabel.show() side.windTile.show()
def pixmapFromSvg(self, pmapSize=None, withBorders=None): """returns a pixmap with default size as given in SVG and optional borders/shadows""" if withBorders is None: withBorders = Internal.Preferences.showShadows if withBorders: wantSize = self.tileset.tileSize.toSize() else: wantSize = self.tileset.faceSize.toSize() if not pmapSize: pmapSize = wantSize result = QPixmap(pmapSize) result.fill(Qt.transparent) painter = QPainter(result) if not painter.isActive(): logException( 'painter is not active. Wanted size: %s' % str(pmapSize)) try: xScale = float(pmapSize.width()) / wantSize.width() yScale = float(pmapSize.height()) / wantSize.height() except ZeroDivisionError: xScale = 1 yScale = 1 if not withBorders: painter.scale(*self.tileset.tileFaceRelation()) painter.translate(-self.facePos()) renderer = self.tileset.renderer() renderer.render(painter, self.__elementId()) painter.resetTransform() self._drawDarkness(painter) if self.showFace(): faceSize = self.tileset.faceSize.toSize() faceSize = QSize( faceSize.width() * xScale, faceSize.height() * yScale) painter.translate(self.facePos()) renderer.render(painter, self.tileset.svgName[self.tile.exposed], QRectF(QPointF(), QSizeF(faceSize))) return result
def paint(self, painter, dummyOption, dummyWidget=None): """paint the entire tile. I tried to cache a pixmap for the tile and darkener but without face, but that actually made it slower.""" with Painter(painter): renderer = self.tileset.renderer() withBorders = Internal.Preferences.showShadows if not withBorders: painter.scale(*self.tileset.tileFaceRelation()) renderer.render(painter, self.__elementId(), self.boundingRect()) self._drawDarkness(painter) with Painter(painter): if self.showFace(): if withBorders: faceSize = self.tileset.faceSize.toSize() renderer.render( painter, self.tileset.svgName[str(self.tile.exposed)], QRectF(self.facePos(), QSizeF(faceSize))) else: renderer.render( painter, self.tileset.svgName[str(self.tile.exposed)], self.boundingRect()) if self.cross: self.__paintCross(painter)
def boundingRect(self): """around the text""" return self.__boundingRect or QRectF()
def tileFaceRect(self): """the face rect of a uiTile relative its origin""" return QRectF(self.tileFacePos(), self.tileset.faceSize)
def boundingRect(self): # pylint: disable=no-self-use """define the part of the tile we want to see""" size = Internal.scene.windTileset.faceSize.height() * 1.1 return QRectF(QPoint(), QPoint(size, size))