the label is painted over background

This commit is contained in:
Jakub Trllo 2025-06-24 18:10:08 +02:00
parent 5eba658bd1
commit 231958c21c
2 changed files with 28 additions and 32 deletions

View file

@ -853,10 +853,9 @@ ActionsView::icon {}
ActionMenuPopup #GroupLabel { ActionMenuPopup #GroupLabel {
padding: 5px; padding: 5px;
border-radius: 3px;
background: #1C2C40;
color: #ffffff; color: #ffffff;
} }
ActionMenuPopup #ShadowFrame { ActionMenuPopup #ShadowFrame {
border-radius: 5px; border-radius: 5px;
background: rgba(12, 13, 24, 0.5); background: rgba(12, 13, 24, 0.5);

View file

@ -494,11 +494,12 @@ class ActionMenuPopup(QtWidgets.QWidget):
items_count, start_size, target_size = self._get_size_hint() items_count, start_size, target_size = self._get_size_hint()
self._model.fill_to_count(items_count) self._model.fill_to_count(items_count)
label_y_offset = self._get_label_y_offset() label_sh = self._group_label.sizeHint()
label_width, label_height = label_sh.width(), label_sh.height()
window = self.screen() window = self.screen()
window_geo = window.geometry() window_geo = window.geometry()
_target_x = pos.x() + target_size.width() _target_x = pos.x() + target_size.width()
_target_y = pos.y() + target_size.height() + label_y_offset _target_y = pos.y() + target_size.height() + label_height
right_to_left = ( right_to_left = (
_target_x > window_geo.right() _target_x > window_geo.right()
or _target_y > window_geo.bottom() or _target_y > window_geo.bottom()
@ -508,8 +509,7 @@ class ActionMenuPopup(QtWidgets.QWidget):
viewport_offset = self._view.viewport().geometry().topLeft() viewport_offset = self._view.viewport().geometry().topLeft()
pos_x = pos.x() - (sh_l + viewport_offset.x() + 2) pos_x = pos.x() - (sh_l + viewport_offset.x() + 2)
pos_y = pos.y() - (sh_t + viewport_offset.y() + 1) pos_y = pos.y() - (sh_t + viewport_offset.y() + 1)
bg_x = 0 bg_x = bg_y = 0
bg_y = label_y_offset
sort_order = QtCore.Qt.DescendingOrder sort_order = QtCore.Qt.DescendingOrder
if right_to_left: if right_to_left:
sort_order = QtCore.Qt.AscendingOrder sort_order = QtCore.Qt.AscendingOrder
@ -517,10 +517,18 @@ class ActionMenuPopup(QtWidgets.QWidget):
pos_x -= size_diff.width() pos_x -= size_diff.width()
pos_y -= size_diff.height() pos_y -= size_diff.height()
bg_x = size_diff.width() bg_x = size_diff.width()
bg_y = size_diff.height() - label_height
bg_geo = QtCore.QRect( bg_geo = QtCore.QRect(
bg_x, bg_y, start_size.width(), start_size.height() bg_x, bg_y,
start_size.width(), start_size.height() + label_height
) )
label_pos_x = sh_l
label_pos_y = bg_y + sh_t
if label_width < start_size.width():
label_pos_x = bg_x + (start_size.width() - label_width) // 2
if self._expand_anim.state() == QtCore.QAbstractAnimation.Running: if self._expand_anim.state() == QtCore.QAbstractAnimation.Running:
self._expand_anim.stop() self._expand_anim.stop()
@ -529,20 +537,18 @@ class ActionMenuPopup(QtWidgets.QWidget):
self._proxy_model.sort(0, sort_order) self._proxy_model.sort(0, sort_order)
self.setUpdatesEnabled(False) self.setUpdatesEnabled(False)
self._view.setMask( self._view.setMask(
bg_geo.adjusted( bg_geo.adjusted(sh_l, sh_t, -sh_r, -sh_b)
sh_l, sh_t - label_y_offset,
-sh_r, -(sh_b + label_y_offset)
)
) )
self._view.setMinimumWidth(target_size.width()) self._view.setMinimumWidth(target_size.width())
self._view.setMaximumWidth(target_size.width()) self._view.setMaximumWidth(target_size.width())
self._view.setMinimumHeight(target_size.height()) self._view.setMinimumHeight(target_size.height())
self._view.move(0, label_y_offset) self._view.move(0, label_height)
self.setGeometry( self.setGeometry(
pos_x, pos_y - label_y_offset, pos_x, pos_y - label_height,
target_size.width(), target_size.height() + label_y_offset target_size.width(), target_size.height() + label_height
) )
self._bg_frame.setGeometry(bg_geo) self._bg_frame.setGeometry(bg_geo)
self._group_label.move(label_pos_x, label_pos_y)
self.setUpdatesEnabled(True) self.setUpdatesEnabled(True)
self._expand_anim.updateCurrentTime(0) self._expand_anim.updateCurrentTime(0)
@ -562,11 +568,6 @@ class ActionMenuPopup(QtWidgets.QWidget):
action_id = index.data(ACTION_ID_ROLE) action_id = index.data(ACTION_ID_ROLE)
self.action_triggered.emit(action_id) self.action_triggered.emit(action_id)
def _get_label_y_offset(self):
height = self._group_label.sizeHint().height()
# Is over view but does not cover the settings icon
return height - 5
def _on_expand_anim(self, value): def _on_expand_anim(self, value):
if not self._showed: if not self._showed:
if self._expand_anim.state() == QtCore.QAbstractAnimation.Running: if self._expand_anim.state() == QtCore.QAbstractAnimation.Running:
@ -575,37 +576,33 @@ class ActionMenuPopup(QtWidgets.QWidget):
bg_geo = self._bg_frame.geometry() bg_geo = self._bg_frame.geometry()
label_y_offset = self._get_label_y_offset() label_sh = self._group_label.sizeHint()
label_width, label_height = label_sh.width(), label_sh.height()
if self._right_to_left: if self._right_to_left:
popup_geo = self.geometry() popup_geo = self.geometry()
diff_size = popup_geo.size() - value diff_size = popup_geo.size() - value
pos = QtCore.QPoint( pos = QtCore.QPoint(
diff_size.width(), diff_size.height() diff_size.width(), diff_size.height() - label_height
) )
bg_geo.moveTopLeft(pos) bg_geo.moveTopLeft(pos)
bg_geo.setWidth(value.width()) bg_geo.setWidth(value.width())
bg_geo.setHeight(value.height()) bg_geo.setHeight(value.height() + label_height)
label_width = self._group_label.sizeHint().width() label_width = self._group_label.sizeHint().width()
label_pos_x = 0
bgeo_tl = bg_geo.topLeft() bgeo_tl = bg_geo.topLeft()
label_pos_y = bgeo_tl.y() - label_y_offset sh_l, sh_t, sh_r, sh_b = SHADOW_FRAME_MARGINS
label_pos_x = sh_l
if label_width < value.width(): if label_width < value.width():
label_pos_x = bgeo_tl.x() + (value.width() - label_width) // 2 label_pos_x = bgeo_tl.x() + (value.width() - label_width) // 2
label_pos = QtCore.QPoint(label_pos_x, label_pos_y)
sh_l, sh_t, sh_r, sh_b = SHADOW_FRAME_MARGINS
self.setUpdatesEnabled(False) self.setUpdatesEnabled(False)
self._view.setMask( self._view.setMask(
bg_geo.adjusted( bg_geo.adjusted(sh_l, sh_t, -sh_r, -sh_b)
sh_l, sh_t - label_y_offset,
-sh_r, -(sh_b + label_y_offset)
)
) )
self._group_label.move(label_pos) self._group_label.move(label_pos_x, sh_t)
self._bg_frame.setGeometry(bg_geo) self._bg_frame.setGeometry(bg_geo)
self.setUpdatesEnabled(True) self.setUpdatesEnabled(True)