diff --git a/src/napari_matplotlib/base.py b/src/napari_matplotlib/base.py index 4bc15224..52293e4d 100644 --- a/src/napari_matplotlib/base.py +++ b/src/napari_matplotlib/base.py @@ -5,6 +5,9 @@ NavigationToolbar2QT, ) from qtpy.QtWidgets import QVBoxLayout, QWidget +from qtpy.QtGui import QIcon +from pathlib import Path +import os mpl.rc("axes", edgecolor="white") mpl.rc("axes", facecolor="#262930") @@ -15,6 +18,9 @@ mpl.rc("xtick", color="white") mpl.rc("ytick", color="white") +# Icons modified from +# https://github.com/matplotlib/matplotlib/tree/main/lib/matplotlib/mpl-data/images +ICON_ROOT = Path(__file__).parent / "icons" __all__ = ["NapariMPLWidget"] @@ -49,7 +55,8 @@ def __init__(self, napari_viewer: napari.viewer.Viewer): self.canvas = FigureCanvas() self.canvas.figure.set_tight_layout(True) self.canvas.figure.patch.set_facecolor("#262930") - self.toolbar = NavigationToolbar2QT(self.canvas, self) + self.toolbar = NapariNavigationToolbar(self.canvas, self) + self._replace_toolbar_icons() self.setLayout(QVBoxLayout()) self.layout().addWidget(self.toolbar) @@ -113,3 +120,47 @@ def draw(self) -> None: This is a no-op, and is intended for derived classes to override. """ + def _replace_toolbar_icons(self): + # Modify toolbar icons and some tooltips + for action in self.toolbar.actions(): + text = action.text() + if text == "Pan": + action.setToolTip( + "Pan/Zoom: Left button pans; Right button zooms; Click once to activate; Click again to deactivate" + ) + if text == "Zoom": + action.setToolTip( + "Zoom to rectangle; Click once to activate; Click again to deactivate" + ) + if len(text) > 0: # i.e. not a separator item + icon_path = os.path.join(ICON_ROOT, text + ".png") + action.setIcon(QIcon(icon_path)) + + +class NapariNavigationToolbar(NavigationToolbar2QT): + """Custom Toolbar style for Napari.""" + + def __init__(self, canvas, parent): + super().__init__(canvas, parent) + + def _update_buttons_checked(self): + """Update toggle tool icons when selected/unselected.""" + super()._update_buttons_checked() + # changes pan/zoom icons depending on state (checked or not) + if "pan" in self._actions: + if self._actions["pan"].isChecked(): + self._actions["pan"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Pan_checked.png")) + ) + else: + self._actions["pan"].setIcon(QIcon(os.path.join(ICON_ROOT, + "Pan.png"))) + if "zoom" in self._actions: + if self._actions["zoom"].isChecked(): + self._actions["zoom"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Zoom_checked.png")) + ) + else: + self._actions["zoom"].setIcon( + QIcon(os.path.join(ICON_ROOT, "Zoom.png")) + ) diff --git a/src/napari_matplotlib/icons/Back.png b/src/napari_matplotlib/icons/Back.png new file mode 100644 index 00000000..7de13ebf Binary files /dev/null and b/src/napari_matplotlib/icons/Back.png differ diff --git a/src/napari_matplotlib/icons/Customize.png b/src/napari_matplotlib/icons/Customize.png new file mode 100644 index 00000000..dd93590c Binary files /dev/null and b/src/napari_matplotlib/icons/Customize.png differ diff --git a/src/napari_matplotlib/icons/Forward.png b/src/napari_matplotlib/icons/Forward.png new file mode 100644 index 00000000..7340a07b Binary files /dev/null and b/src/napari_matplotlib/icons/Forward.png differ diff --git a/src/napari_matplotlib/icons/Home.png b/src/napari_matplotlib/icons/Home.png new file mode 100644 index 00000000..66def6f3 Binary files /dev/null and b/src/napari_matplotlib/icons/Home.png differ diff --git a/src/napari_matplotlib/icons/Pan.png b/src/napari_matplotlib/icons/Pan.png new file mode 100644 index 00000000..df0a8ed5 Binary files /dev/null and b/src/napari_matplotlib/icons/Pan.png differ diff --git a/src/napari_matplotlib/icons/Pan_checked.png b/src/napari_matplotlib/icons/Pan_checked.png new file mode 100644 index 00000000..0c419ee6 Binary files /dev/null and b/src/napari_matplotlib/icons/Pan_checked.png differ diff --git a/src/napari_matplotlib/icons/Save.png b/src/napari_matplotlib/icons/Save.png new file mode 100644 index 00000000..0094b144 Binary files /dev/null and b/src/napari_matplotlib/icons/Save.png differ diff --git a/src/napari_matplotlib/icons/Subplots.png b/src/napari_matplotlib/icons/Subplots.png new file mode 100644 index 00000000..4064df55 Binary files /dev/null and b/src/napari_matplotlib/icons/Subplots.png differ diff --git a/src/napari_matplotlib/icons/Zoom.png b/src/napari_matplotlib/icons/Zoom.png new file mode 100644 index 00000000..09a98566 Binary files /dev/null and b/src/napari_matplotlib/icons/Zoom.png differ diff --git a/src/napari_matplotlib/icons/Zoom_checked.png b/src/napari_matplotlib/icons/Zoom_checked.png new file mode 100644 index 00000000..9def1df7 Binary files /dev/null and b/src/napari_matplotlib/icons/Zoom_checked.png differ