diff --git a/.bumper.toml b/.bumper.toml index cf2742b..ac1236a 100644 --- a/.bumper.toml +++ b/.bumper.toml @@ -1,5 +1,5 @@ [tool.bumper] -current_version = "1.0.1" +current_version = "1.1.0" [[tool.bumper.files]] file = "./pyproject.toml" diff --git a/CHANGELOG.md b/CHANGELOG.md index af70ad1..1b18061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,13 @@ # Changelog Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html) (``.``.``) +## [v1.1.0] +### Changed +* #9 Dragging is now inhibited while another widget has the canvas locked (e.g. zooming/panning) + ## [v1.0.1] ### Fixed * #8 Fix snapping error when plotting timedelta-based axis data - ## [v1.0.0] Initial release - yay! diff --git a/README.md b/README.md index c6ea40b..541d84a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # matplotlib-window -[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/matplotlib-window/1.0.1?logo=python&logoColor=FFD43B)](https://pypi.org/project/matplotlib-window/) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/matplotlib-window/1.1.0?logo=python&logoColor=FFD43B)](https://pypi.org/project/matplotlib-window/) [![PyPI](https://img.shields.io/pypi/v/matplotlib-window?logo=Python&logoColor=FFD43B)](https://pypi.org/project/matplotlib-window/) [![PyPI - License](https://img.shields.io/pypi/l/matplotlib-window?color=magenta)](https://github.com/sco1/matplotlib-window/blob/main/LICENSE) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/sco1/matplotlib-window/main.svg)](https://results.pre-commit.ci/latest/github/sco1/matplotlib-window/main) diff --git a/matplotlib_window/base.py b/matplotlib_window/base.py index 33f35ad..36f2ed9 100644 --- a/matplotlib_window/base.py +++ b/matplotlib_window/base.py @@ -125,6 +125,11 @@ def on_click(self, event: Event) -> t.Any: if event.inaxes != self.parent_axes: return + # Return early if we aren't able to obtain a widgetlock + # Obtaining a lock allows us to prevent dragging when zoom/pan is active + if not self.parent_canvas.widgetlock.available(self): + return + if not self.should_move(event): return @@ -137,6 +142,9 @@ def on_click(self, event: Event) -> t.Any: self.mouse_motion = self.parent_canvas.mpl_connect("motion_notify_event", self.on_motion) self.click_release = self.parent_canvas.mpl_connect("button_release_event", self.on_release) + # Obtaining a lock allows us to prevent dragging when zoom/pan is active + self.parent_canvas.widgetlock(self) + def on_release(self, event: Event) -> t.Any: """ Mouse button release callback. @@ -154,6 +162,10 @@ def disconnect(self) -> None: self.clicked = False self.parent_canvas.mpl_disconnect(self.mouse_motion) self.parent_canvas.mpl_disconnect(self.click_release) + + # Release any widgetlock when drag is finished + self.parent_canvas.widgetlock.release(self) + self._redraw() def validate_snap_to(self, snap_to: Line2D | None) -> Line2D | None: diff --git a/pyproject.toml b/pyproject.toml index 1a475ba..ba5d04a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "matplotlib-window" -version = "1.0.1" +version = "1.1.0" description = "Draggable data windowing for matplotlib plots" authors = [ {name = "sco1", email = "sco1.git@gmail.com"} diff --git a/uv.lock b/uv.lock index 284f0ae..b6cfa0d 100644 --- a/uv.lock +++ b/uv.lock @@ -70,7 +70,7 @@ name = "click" version = "8.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "colorama", marker = "platform_system == 'Windows'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } wheels = [ @@ -415,7 +415,7 @@ wheels = [ [[package]] name = "matplotlib-window" -version = "1.0.0" +version = "1.0.1" source = { editable = "." } dependencies = [ { name = "matplotlib" },