diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index 6824db280a..fbbb1bd4b6 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -10,7 +10,7 @@ from qt.core import ( QAction, QApplication, QClipboard, QColor, QDialog, QEasingCurve, QIcon, QKeySequence, QMenu, QMimeData, QPainter, QPen, QPixmap, QPropertyAnimation, QRect, QSize, QSizePolicy, Qt, QUrl, QWidget, pyqtProperty, - QTimer, pyqtSignal + pyqtSignal ) from calibre import fit_image, sanitize_file_name @@ -920,13 +920,9 @@ class DetailsLayout(BasicSplitter): # {{{ orientation = Qt.Orientation.Vertical if vertical else Qt.Orientation.Horizontal BasicSplitter.__init__(self, orientation, parent) self.vertical = vertical - self.setCollapsible(0, True) - self._children = [] - self.min_size = QSize(190, 200) if vertical else QSize(120, 120) self.setContentsMargins(0, 0, 0, 0) - self.restore_geometry(gprefs, 'book_details_splitter') self.splitterMoved.connect(self.do_splitter_moved) def minimumSize(self): @@ -945,14 +941,16 @@ class DetailsLayout(BasicSplitter): # {{{ def restore_splitter_state(self): s = gprefs.get('book_details_widget_splitter_state') - if s is not None: + if s is None: + # Without this on first start the splitter is rendered over the cover + self.setSizes([20, 80]) + else: self.restoreState(s) self.setOrientation(Qt.Orientation.Vertical if self.vertical else Qt.Orientation.Horizontal) def setGeometry(self, r): - BasicSplitter.setGeometry(self, r) + super().setGeometry(r) self.do_layout(r) - self.restore_splitter_state() def do_splitter_moved(self, *args): gprefs['book_details_widget_splitter_state'] = bytearray(self.saveState()) @@ -1004,8 +1002,7 @@ class DetailsLayout(BasicSplitter): # {{{ cover.setGeometry(QRect(x, y, cw, r.height())) x += cw + 5 details.setGeometry(QRect(x, y, r.width() - cw - 5, r.height())) - self.restore_splitter_state() # only required on first call to do_layout, but ... - self.save_geometry(gprefs, 'book_details_splitter') + self.restore_splitter_state() # only required on first call to do_layout, but ... cover.do_layout() # }}} diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index 900ef01b6b..5e916c1240 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -8,7 +8,7 @@ __docformat__ = 'restructuredtext en' import functools from qt.core import ( QAction, QApplication, QDialog, QEvent, QIcon, QLabel, QMenu, QPixmap, QUrl, - QSizePolicy, QSplitter, QStackedWidget, QStatusBar, QStyle, QStyleOption, + QSizePolicy, QStackedWidget, QStatusBar, QStyle, QStyleOption, QStylePainter, Qt, QTabBar, QTimer, QToolButton, QVBoxLayout, QWidget ) diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 25fdce5771..f434131aa8 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -982,10 +982,6 @@ class PythonHighlighter(QSyntaxHighlighter): # {{{ class BasicSplitterHandle(QSplitterHandle): - def __init__(self, orientation, splitter): - QSplitterHandle.__init__(self, orientation, splitter) - self.handle_width = splitter.handleWidth() - def paintEvent(self, event): rect = event.rect() painter = QPainter(self) @@ -997,16 +993,18 @@ class BasicSplitterHandle(QSplitterHandle): # draw the dots painter.setBrush(palette.color(QPalette.ColorGroup.Normal, QPalette.ColorRole.Shadow)) horizontal = self.orientation() == Qt.Orientation.Horizontal - dot_count = 6 - dot_size = int(max(1, self.handle_width/2)) + dot_count = 4 + cr = self.contentsRect() + handle_width = cr.width() if horizontal else cr.height() + dot_size = int(max(1, handle_width)) start_point = max(0, int((rect.height()/2 if horizontal else rect.width()/2) - (dot_count*dot_size/2))) for i in range(dot_count): - # Move the rect to leave 2 dot spaces between the dots + # Move the rect to leave spaces between the dots if horizontal: - dot_rect = QRect(1, start_point + i*dot_size*3, dot_size, dot_size) + dot_rect = QRect(0, start_point + i*dot_size*2, dot_size, dot_size) else: - dot_rect = QRect(start_point + i*dot_size*3, 1, dot_size, dot_size) - painter.drawRect(dot_rect) + dot_rect = QRect(start_point + i*dot_size*2, 0, dot_size, dot_size) + painter.drawEllipse(dot_rect) painter.end()