--- /dev/null
+from _typeshed import StrOrBytesPath, SupportsRead
+from typing import Any, Protocol
+from typing_extensions import Literal
+
+LAYOUT_BASIC: Literal[0]
+LAYOUT_RAQM: Literal[1]
+
+class _Font(Protocol):
+ def getmask(self, text: str | bytes, mode: str = ..., direction=..., features=...): ...
+
+class ImageFont:
+ def getsize(self, text: str | bytes, *args, **kwargs) -> tuple[int, int]: ...
+ def getmask(self, text: str | bytes, mode: str = ..., direction=..., features=...): ...
+
+class FreeTypeFont:
+ path: str | bytes | SupportsRead[bytes] | None
+ size: int
+ index: int
+ encoding: str
+ layout_engine: Any
+ def __init__(
+ self,
+ font: str | bytes | SupportsRead[bytes] | None = ...,
+ size: int = ...,
+ index: int = ...,
+ encoding: str = ...,
+ layout_engine: int | None = ...,
+ ) -> None: ...
+ def getname(self) -> tuple[str, str]: ...
+ def getmetrics(self) -> tuple[int, int]: ...
+ def getlength(
+ self,
+ text: str | bytes,
+ mode: str = ...,
+ direction: Literal["ltr", "rtl", "ttb"] | None = ...,
+ features: Any | None = ...,
+ language: str | None = ...,
+ ) -> int: ...
+ def getbbox(
+ self,
+ text: str | bytes,
+ mode: str = ...,
+ direction=...,
+ features=...,
+ language: str | None = ...,
+ stroke_width: int = ...,
+ anchor: str | None = ...,
+ ) -> tuple[int, int, int, int]: ...
+ def getsize(
+ self,
+ text: str | bytes,
+ direction: Literal["ltr", "rtl", "ttb"] | None = ...,
+ features: Any | None = ...,
+ language: str | None = ...,
+ stroke_width: int = ...,
+ ) -> tuple[int, int]: ...
+ def getsize_multiline(
+ self,
+ text: str | bytes,
+ direction: Literal["ltr", "rtl", "ttb"] | None = ...,
+ spacing: float = ...,
+ features: Any | None = ...,
+ language: str | None = ...,
+ stroke_width: float = ...,
+ ) -> tuple[int, int]: ...
+ def getoffset(self, text: str | bytes) -> tuple[int, int]: ...
+ def getmask(
+ self,
+ text: str | bytes,
+ mode: str = ...,
+ direction: Literal["ltr", "rtl", "ttb"] | None = ...,
+ features: Any | None = ...,
+ language: str | None = ...,
+ stroke_width: float = ...,
+ anchor: str | None = ...,
+ ink=...,
+ ): ...
+ def getmask2(
+ self,
+ text: str | bytes,
+ mode: str = ...,
+ fill=...,
+ direction: Literal["ltr", "rtl", "ttb"] | None = ...,
+ features: Any | None = ...,
+ language: str | None = ...,
+ stroke_width: float = ...,
+ anchor: str | None = ...,
+ ink=...,
+ *args,
+ **kwargs,
+ ): ...
+ def font_variant(
+ self,
+ font: str | bytes | SupportsRead[bytes] | None = ...,
+ size: int | None = ...,
+ index: int | None = ...,
+ encoding: str | None = ...,
+ layout_engine: int | None = ...,
+ ) -> FreeTypeFont: ...
+ def get_variation_names(self): ...
+ def set_variation_by_name(self, name): ...
+ def get_variation_axes(self): ...
+ def set_variation_by_axes(self, axes): ...
+
+class TransposedFont:
+ def __init__(self, font: _Font, orientation: int | None = ...) -> None: ...
+ def getsize(self, text: str | bytes, *args, **kwargs) -> tuple[int, int]: ...
+ def getmask(self, text: str | bytes, mode: str = ..., *args, **kwargs): ...
+
+def load(filename: StrOrBytesPath | int) -> ImageFont: ...
+def truetype(
+ font: str | bytes | SupportsRead[bytes] | None = ...,
+ size: int = ...,
+ index: int = ...,
+ encoding: str = ...,
+ layout_engine: int | None = ...,
+) -> FreeTypeFont: ...
+def load_path(filename: str | bytes) -> ImageFont: ...
+def load_default() -> ImageFont: ...