mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-03-05 00:12:49 +01:00
wip opacity as separate parameter
This commit is contained in:
@@ -24,6 +24,7 @@ from bec_widgets.cli.rpc.rpc_register import RPCRegister
|
||||
from bec_widgets.utils.bec_plugin_helper import get_all_plugin_widgets
|
||||
from bec_widgets.utils.container_utils import WidgetContainerUtils
|
||||
from bec_widgets.utils.error_popups import SafeSlot
|
||||
from bec_widgets.utils.hover_gradient import enable_hover_gradient
|
||||
from bec_widgets.utils.name_utils import pascal_to_snake
|
||||
from bec_widgets.utils.plugin_utils import get_plugin_auto_updates
|
||||
from bec_widgets.utils.round_frame import RoundedFrame
|
||||
@@ -56,6 +57,7 @@ class LaunchTile(RoundedFrame):
|
||||
description: str | None = None,
|
||||
show_selector: bool = False,
|
||||
tile_size: tuple[int, int] | None = None,
|
||||
gradient: list[str] | None = None,
|
||||
):
|
||||
super().__init__(parent=parent, orientation="vertical")
|
||||
|
||||
@@ -153,6 +155,8 @@ class LaunchTile(RoundedFrame):
|
||||
"""
|
||||
)
|
||||
self.layout.addWidget(self.action_button, alignment=Qt.AlignCenter)
|
||||
if gradient is not None:
|
||||
enable_hover_gradient(self, colours=gradient)
|
||||
|
||||
def _fit_label_to_width(self, label: QLabel, max_width: int, min_pt: int = 10):
|
||||
"""
|
||||
@@ -215,6 +219,7 @@ class LaunchWindow(BECMainWindow):
|
||||
description="Highly flexible and customizable dock area application with modular widgets.",
|
||||
action_button=lambda: self.launch("dock_area"),
|
||||
show_selector=False,
|
||||
gradient=["#B73665", "#232770"],
|
||||
)
|
||||
|
||||
self.available_auto_updates: dict[str, type[AutoUpdates]] = (
|
||||
@@ -229,6 +234,7 @@ class LaunchWindow(BECMainWindow):
|
||||
action_button=self._open_auto_update,
|
||||
show_selector=True,
|
||||
selector_items=list(self.available_auto_updates.keys()) + ["Default"],
|
||||
gradient=["#EE0678", "#FF6A00"],
|
||||
)
|
||||
|
||||
self.register_tile(
|
||||
@@ -239,6 +245,7 @@ class LaunchWindow(BECMainWindow):
|
||||
description="GUI application with custom UI file.",
|
||||
action_button=self._open_custom_ui_file,
|
||||
show_selector=False,
|
||||
gradient=["#155799", "#179655"],
|
||||
)
|
||||
|
||||
# plugin widgets
|
||||
@@ -257,6 +264,7 @@ class LaunchWindow(BECMainWindow):
|
||||
action_button=self._open_widget,
|
||||
show_selector=True,
|
||||
selector_items=list(self.available_widgets.keys()),
|
||||
gradient=["#000046", "#1CB5E0"],
|
||||
)
|
||||
|
||||
self._update_theme()
|
||||
@@ -275,6 +283,7 @@ class LaunchWindow(BECMainWindow):
|
||||
action_button: Callable | None = None,
|
||||
show_selector: bool = False,
|
||||
selector_items: list[str] | None = None,
|
||||
gradient: list[str] | None = None,
|
||||
):
|
||||
"""
|
||||
Register a tile in the launcher window.
|
||||
@@ -297,6 +306,7 @@ class LaunchWindow(BECMainWindow):
|
||||
description=description,
|
||||
show_selector=show_selector,
|
||||
tile_size=self.TILE_SIZE,
|
||||
gradient=gradient,
|
||||
)
|
||||
tile.setFixedWidth(self.TILE_SIZE[0])
|
||||
tile.setMinimumHeight(self.TILE_SIZE[1])
|
||||
|
||||
@@ -59,7 +59,7 @@ class _HoverGradientFilter(QtCore.QObject):
|
||||
|
||||
|
||||
# ─────────────────────────── painter helper ─────────────────────────────
|
||||
def _draw_hover_gradient(widget, painter, path):
|
||||
def _draw_hover_gradient(widget, painter, path, opacity):
|
||||
if not getattr(widget, "_hg_hover", False) or widget._hg_pos.x() < 0:
|
||||
return
|
||||
|
||||
@@ -71,7 +71,7 @@ def _draw_hover_gradient(widget, painter, path):
|
||||
grad = QtGui.QRadialGradient(widget._hg_pos, r)
|
||||
|
||||
centre = QtGui.QColor(accent)
|
||||
centre.setAlpha(180 if pressed else 110)
|
||||
centre.setAlpha(opacity if pressed else opacity * 0.6) # more opaque when pressed
|
||||
grad.setColorAt(0.0, centre)
|
||||
|
||||
edge = cols[1] if len(cols) > 1 else QtCore.Qt.transparent
|
||||
@@ -81,7 +81,7 @@ def _draw_hover_gradient(widget, painter, path):
|
||||
|
||||
|
||||
# ─────────────────────────── public API ────────────────────────────────
|
||||
def enable_hover_gradient(frame: QtWidgets.QFrame, colours=None):
|
||||
def enable_hover_gradient(frame: QtWidgets.QFrame, colours=None, opacity=1.0):
|
||||
"""
|
||||
Inject a radial hover-gradient ‘glow’ into *any* QFrame instance.
|
||||
|
||||
@@ -94,7 +94,7 @@ def enable_hover_gradient(frame: QtWidgets.QFrame, colours=None):
|
||||
"""
|
||||
if getattr(frame, "_hg_enabled", False): # hover gradient injected attribute
|
||||
return # already done
|
||||
|
||||
opacity = 255 * opacity
|
||||
# normalise colours
|
||||
if colours is None:
|
||||
colours = ["#ffffff"]
|
||||
@@ -128,7 +128,7 @@ def enable_hover_gradient(frame: QtWidgets.QFrame, colours=None):
|
||||
else:
|
||||
path.addRect(self.rect().adjusted(0, 0, -1, -1))
|
||||
|
||||
_draw_hover_gradient(self, painter, path)
|
||||
_draw_hover_gradient(self, painter, path, opacity)
|
||||
painter.end()
|
||||
|
||||
frame.paintEvent = types.MethodType(patched_paint, frame)
|
||||
|
||||
Reference in New Issue
Block a user