def find_display_size(display: GameDisplay, view: QGraphicsView, target_size: QSize) -> QSize: max_width = None max_height = None min_width = min_height = 1 display_width = display.width() display_height = display.height() while True: scene_size = view.contentsRect().size() if scene_size.width() == target_size.width(): min_width = max_width = display_width elif scene_size.width() < target_size.width(): min_width = display_width + 1 else: max_width = display_width - 1 if scene_size.height() == target_size.height(): min_height = max_height = display_height elif scene_size.height() < target_size.height(): min_height = display_height + 1 else: max_height = display_height - 1 if max_width is None: display_width *= 2 else: display_width = (min_width + max_width) // 2 if max_height is None: display_height *= 2 else: display_height = (min_height + max_height) // 2 if min_width == max_width and min_height == max_height: return QSize(display_width, display_height) display.resize(display_width, display_height) view.grab() # Force layout recalculation.
def load_pixmap(name: str, size: QSize = None) -> QPixmap: file_path = ':/shibumi_images/' + name image = QImage(str(file_path)) if image.isNull(): raise ValueError(f'Unable to load image {file_path}.') pixmap = QPixmap(image) if size is not None: pixmap = ShibumiDisplay.scale_pixmap(pixmap, size.width(), size.height()) return pixmap
def format_metadata(self, size: QtCore.QSize): """ Update the font size of the meta data's labels depending on the StackedWidget's size. :param size: size of the StackedWidget used in the MainPage. """ if self.metadata_formatted: # TODO: generalise 1200 and 600 if size.width() < 1200 and size.height() < 600: stylesheet = "QLabel { color : white; font-size: 10px }" else: stylesheet = "QLabel { color : white; }" self.format_metadata_labels(stylesheet)
def paintEvent(self, event): painter = QPainter(self) output_size = QSize() if self.mode == Mode.PngMode: output_size = self.zoomed_image.size() output_rect = QRect(QPoint(), output_size) output_rect.translate(self.rect().center() - output_rect.center()) painter.drawImage(output_rect.topLeft(), self.zoomed_image) elif self.mode == Mode.SvgMode: output_size = self.svgRenderer.defaultSize() if self.zoom_scale != ZOOM_ORIGINAL_SCALE: zoom = float(self.zoom_scale) / ZOOM_ORIGINAL_SCALE output_size.scale(output_size.width() * zoom, output_size.height() * zoom, Qt.IgnoreAspectRatio) output_rect = QRect(QPoint(), output_size) output_rect.translate(self.rect().center() - output_rect.center()) self.svgRenderer.render(painter, output_rect) self.setMinimumSize(output_size)
def scale_image(self): if self.pixmap is None: return if self.selection_grid is None: x = self.settings.value('x', 0.0, float) y = self.settings.value('y', 0.0, float) width = self.settings.value('width', 1.0, float) height = self.settings.value('height', 1.0, float) else: x, y, width, height = self.get_selected_fraction() self.art_scene.clear() self.cells.clear() view_size = self.ui.art_view.maximumViewportSize() if view_size.width() == 0: return self.art_scene.setSceneRect(0, 0, view_size.width(), view_size.height()) display_size = QSize(view_size.width() * 0.99 / 2, view_size.height() * 0.99) self.scaled_pixmap = self.pixmap.scaled( display_size, aspectMode=Qt.AspectRatioMode.KeepAspectRatio) self.art_scene.addPixmap(self.scaled_pixmap) scaled_size = self.scaled_pixmap.size() self.selection_grid = SelectionGrid(scaled_size.width() * x, scaled_size.height() * y, scaled_size.width() * width, scaled_size.height() * height, row_count=self.row_count, column_count=self.column_count) self.selection_grid.on_moved = self.on_selection_moved self.art_scene.addItem(self.selection_grid) self.sliced_image = QImage(display_size, QImage.Format.Format_ARGB32_Premultiplied) self.check_clues() self.art_shuffler = ArtShuffler(self.selection_grid.row_count, self.selection_grid.column_count, self.sliced_image, QRect(0, 0, display_size.width(), display_size.height()), clues=self.clues, row_clues=self.row_clues, column_clues=self.column_clues) self.sliced_pixmap_item = self.art_scene.addPixmap( QPixmap.fromImage(self.sliced_image)) self.sliced_pixmap_item.setPos(display_size.width(), 0) self.symbols_scene.clear() self.symbols_source_pixmap_item = self.symbols_scene.addPixmap( self.scaled_pixmap) self.symbols_image = QImage(display_size, QImage.Format.Format_ARGB32_Premultiplied) if self.symbols_shuffler is not None: selected_row = self.symbols_shuffler.selected_row selected_column = self.symbols_shuffler.selected_column else: selected_row = 0 selected_column = None self.symbols_shuffler = ArtShuffler(self.selection_grid.row_count, self.selection_grid.column_count, self.symbols_image, QRect(0, 0, display_size.width(), display_size.height()), row_clues=self.row_clues, column_clues=self.column_clues) self.symbols_shuffler.selected_row = selected_row self.symbols_shuffler.selected_column = selected_column self.symbols_pixmap_item = ClickablePixmapItem( QPixmap.fromImage(self.symbols_image)) self.symbols_pixmap_item.on_click = self.on_symbols_clicked self.symbols_scene.addItem(self.symbols_pixmap_item) self.symbols_pixmap_item.setPos(display_size.width(), 0) self.on_selection_moved()