def restoreGeometry(self, geometry): """ Restores the geometry of this subwindow :param geometry: the saved state as a QByteArray instance :return: """ if geometry.size() < 4: return False stream = QDataStream(geometry) if stream.readUInt32() != 0x1D9D0CB: return False if stream.readUInt16() != 1: return False stream.readUInt16() # minorVersion is ignored. x = stream.readInt64() y = stream.readInt64() width = stream.readInt64() height = stream.readInt64() restoredFrameGeometry = QRect(x, y, width, height) x = stream.readInt64() y = stream.readInt64() width = stream.readInt64() height = stream.readInt64() restoredNormalGeometry = QRect(x, y, width, height) maximized = stream.readUInt32() fullScreen = stream.readUInt32() frameHeight = 20 if not restoredFrameGeometry.isValid(): restoredFrameGeometry = QRect(QPoint(0, 0), self.sizeHint()) if not restoredNormalGeometry.isValid(): restoredNormalGeometry = QRect(QPoint(0, frameHeight), self.sizeHint()) restoredFrameGeometry.moveTop(max(restoredFrameGeometry.top(), 0)) restoredNormalGeometry.moveTop( max(restoredNormalGeometry.top(), 0 + frameHeight)) if maximized or fullScreen: self.setGeometry(restoredNormalGeometry) ws = self.windowState() if maximized: ws |= Qt.WindowMaximized if fullScreen: ws |= Qt.WindowFullScreen self.setWindowState(ws) else: offset = QPoint() self.setWindowState(self.windowState() & ~(Qt.WindowMaximized | Qt.WindowFullScreen)) self.move(restoredFrameGeometry.topLeft() + offset) self.resize(restoredNormalGeometry.size()) return True
def _crop(self, rect: QRect): """ Crop View Selection Area """ if rect.isValid(): self.__history.append(rect) self.__render_image = self.__render_image.copy(rect) self.__tool.setImage(self.__render_image) self.adjustAspectRatio()
def array2DSlices(a2D, rect): """ Return the 2-uple of slice objects convenient to index the intersection of the 2 dimensional array a2D with rect. @param a2D: @type a2D: ndarray, ndims >=2 @param rect: (x, y, w, h) @type rect: 4-uple of int or QRect object @return: @rtype: 2-uple of slice objects """ # convert rect to a QRect object if type(rect) not in [QRect]: try: rect = QRect(*rect) except (TypeError, ValueError): rect = QRect() # intersect a2D with rect qrect = QRect(0, 0, a2D.shape[1], a2D.shape[0]) & rect if qrect.isValid(): return slice(qrect.top(), qrect.bottom()), slice(qrect.left(), qrect.right()) else: return slice(0, 0), slice(0, 0)
def _finalCrop(self, rect: QRect): """ Crop Selection Area """ if self.__image: image = self.__image if self.__history: for r in self.__history: image = image.crop(r.getCoords()) if rect.isValid(): self.__history.append(rect) image = image.crop(rect.getCoords()) self.__history = [] self.__image = image self.__render_image = ImageQt.ImageQt(self.__image) self.__tool.setImage(self.__render_image) self.result.emit(image) # type: ignore