2023-04-17 01:38:48 +12:00
|
|
|
from enum import Enum
|
2024-05-28 00:37:21 +12:00
|
|
|
from typing import Tuple
|
2023-04-17 01:38:48 +12:00
|
|
|
|
|
|
|
from PyQt5.QtCore import QSize
|
|
|
|
|
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
class ImageType(Enum):
|
2023-04-17 01:38:48 +12:00
|
|
|
Tall = 0
|
|
|
|
Wide = 1
|
2024-05-28 00:37:21 +12:00
|
|
|
Icon = 3
|
|
|
|
Logo = 2
|
2023-04-17 01:38:48 +12:00
|
|
|
|
|
|
|
|
|
|
|
class ImageSize:
|
|
|
|
class Preset:
|
2024-05-31 09:21:58 +12:00
|
|
|
def __init__(self, divisor: float, pixel_ratio: float, orientation: ImageType = ImageType.Tall,
|
2023-04-17 01:38:48 +12:00
|
|
|
base: 'ImageSize.Preset' = None):
|
|
|
|
self.__divisor = divisor
|
|
|
|
self.__pixel_ratio = pixel_ratio
|
2024-05-31 09:21:58 +12:00
|
|
|
if orientation == ImageType.Tall:
|
2023-04-17 01:38:48 +12:00
|
|
|
self.__img_factor = 67
|
|
|
|
self.__size = QSize(self.__img_factor * 3, self.__img_factor * 4) * pixel_ratio / divisor
|
2024-05-31 09:21:58 +12:00
|
|
|
if orientation == ImageType.Wide:
|
2024-05-28 00:37:21 +12:00
|
|
|
self.__img_factor = 34
|
2023-04-17 01:38:48 +12:00
|
|
|
self.__size = QSize(self.__img_factor * 16, self.__img_factor * 9) * pixel_ratio / divisor
|
2024-05-31 09:21:58 +12:00
|
|
|
if orientation == ImageType.Icon:
|
2024-05-28 00:37:21 +12:00
|
|
|
self.__img_factor = 128
|
|
|
|
self.__size = QSize(self.__img_factor * 1, self.__img_factor * 1) * pixel_ratio / divisor
|
|
|
|
self.__orientation = orientation
|
2023-04-17 01:38:48 +12:00
|
|
|
# lk: for prettier images set this to true
|
2023-12-25 07:44:46 +13:00
|
|
|
# self.__smooth_transform: bool = True
|
|
|
|
self.__smooth_transform = divisor <= 2
|
|
|
|
self.__base = base if base is not None else self
|
2023-04-17 01:38:48 +12:00
|
|
|
|
|
|
|
def __eq__(self, other: 'ImageSize.Preset'):
|
|
|
|
return (
|
|
|
|
self.__size == other.size
|
|
|
|
and self.__divisor == other.divisor
|
|
|
|
and self.__smooth_transform == other.smooth
|
|
|
|
and self.__pixel_ratio == other.pixel_ratio
|
|
|
|
)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def size(self) -> QSize:
|
|
|
|
return self.__size
|
|
|
|
|
|
|
|
@property
|
|
|
|
def divisor(self) -> float:
|
|
|
|
return self.__divisor
|
|
|
|
|
|
|
|
@property
|
|
|
|
def smooth(self) -> bool:
|
|
|
|
return self.__smooth_transform
|
|
|
|
|
|
|
|
@property
|
|
|
|
def pixel_ratio(self) -> float:
|
|
|
|
return self.__pixel_ratio
|
|
|
|
|
2024-05-28 00:37:21 +12:00
|
|
|
@property
|
2024-05-31 09:21:58 +12:00
|
|
|
def orientation(self) -> ImageType:
|
2024-05-28 00:37:21 +12:00
|
|
|
return self.__orientation
|
|
|
|
|
|
|
|
@property
|
|
|
|
def aspect_ratio(self) -> Tuple[int, int]:
|
2024-05-31 09:21:58 +12:00
|
|
|
if self.__orientation == ImageType.Tall:
|
2024-05-28 00:37:21 +12:00
|
|
|
return 3, 4
|
2024-05-31 09:21:58 +12:00
|
|
|
elif self.__orientation == ImageType.Wide:
|
2024-05-28 00:37:21 +12:00
|
|
|
return 16, 9
|
|
|
|
else:
|
|
|
|
return 0, 0
|
|
|
|
|
2023-04-17 01:38:48 +12:00
|
|
|
@property
|
|
|
|
def base(self) -> 'ImageSize.Preset':
|
|
|
|
return self.__base
|
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
Tall = Preset(1, 1)
|
2023-04-17 01:38:48 +12:00
|
|
|
"""! @brief Size and pixel ratio of the image on disk"""
|
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
DisplayTall = Preset(1, 1, base=Tall)
|
2023-04-17 01:38:48 +12:00
|
|
|
"""! @brief Size and pixel ratio for displaying"""
|
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
LibraryTall = Preset(1.21, 1, base=Tall)
|
2023-04-17 01:38:48 +12:00
|
|
|
"""! @brief Same as Display"""
|
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
Wide = Preset(1, 1, ImageType.Wide)
|
|
|
|
"""! @brief Size and pixel ratio for wide 16/9 image on disk"""
|
|
|
|
|
|
|
|
DisplayWide = Preset(2, 1, ImageType.Wide, base=Wide)
|
|
|
|
"""! @brief Size and pixel ratio for wide 16/9 image display"""
|
2023-04-17 01:38:48 +12:00
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
LibraryWide = Preset(2.41, 1, ImageType.Wide, base=Wide)
|
2023-04-17 01:38:48 +12:00
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
Icon = Preset(1, 1, ImageType.Icon)
|
|
|
|
"""! @brief Size and pixel ratio of the icon on disk"""
|
2023-04-17 01:38:48 +12:00
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
DisplayIcon = Preset(1, 1, ImageType.Icon, base=Icon)
|
|
|
|
"""! @brief Size and pixel ratio of the icon on disk"""
|
2023-04-17 01:38:48 +12:00
|
|
|
|
2024-05-31 09:21:58 +12:00
|
|
|
LibraryIcon = Preset(2.2, 1, ImageType.Icon, base=Icon)
|
|
|
|
"""! @brief Size and pixel ratio of the icon on disk"""
|