# PyGObject is not easily installable on Windows, let tests pass as-is
from gi.repository import Gtk  # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
from matplotlib import backend_tools
from matplotlib._typing import *
from matplotlib.backend_bases import FigureCanvasBase, FigureManagerBase, NavigationToolbar2, TimerBase, _Backend
from matplotlib.backend_tools import Cursors

backend_version = ...

def mpl_to_gtk_cursor_name(mpl_cursor: Cursors) -> str: ...

class TimerGTK(TimerBase):
    def __init__(self, *args, **kwargs) -> None: ...

class _FigureManagerGTK(FigureManagerBase):
    canvas: FigureCanvasBase
    num: int | str
    toolbar: Gtk.Toolbar | Gtk.Box
    vbox: Gtk.VBox
    window: Gtk.Window

    def __init__(self, canvas: FigureCanvasBase, num: int | str) -> None: ...
    def destroy(self, *args) -> None: ...
    def show(self) -> None: ...
    def full_screen_toggle(self) -> None: ...
    def get_window_title(self): ...
    def set_window_title(self, title) -> None: ...
    def resize(self, width, height) -> None: ...

class _NavigationToolbar2GTK(NavigationToolbar2):
    def set_message(self, s) -> None: ...
    def draw_rubberband(self, event, x0, y0, x1, y1) -> None: ...
    def remove_rubberband(self) -> None: ...
    def pan(self, *args) -> None: ...
    def zoom(self, *args) -> None: ...
    def set_history_buttons(self) -> None: ...

class RubberbandGTK(backend_tools.RubberbandBase):
    def draw_rubberband(self, x0, y0, x1, y1) -> None: ...
    def remove_rubberband(self) -> None: ...

class ConfigureSubplotsGTK(backend_tools.ConfigureSubplotsBase):
    def trigger(self, *args) -> None: ...

class _BackendGTK(_Backend):
    @staticmethod
    def mainloop() -> None: ...
