1
0
Fork 0
mirror of synced 2024-06-02 18:54:41 +12:00

Refactor: Move ImageSize to models

`ImageSize` is a property of `ImageWidget` it is relevant to
`ImageManager` and the store widgets. So move it out of `ImageManager`.
This commit is contained in:
loathingKernel 2023-04-16 16:38:48 +03:00
parent 6986b1eab3
commit 0e4e7420cf
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
3 changed files with 97 additions and 91 deletions

91
rare/models/image.py Normal file
View file

@ -0,0 +1,91 @@
from enum import Enum
from PyQt5.QtCore import QSize
class Orientation(Enum):
Tall = 0
Wide = 1
class ImageSize:
class Preset:
def __init__(self, divisor: float, pixel_ratio: float, orientation: Orientation = Orientation.Tall,
base: 'ImageSize.Preset' = None):
self.__divisor = divisor
self.__pixel_ratio = pixel_ratio
if orientation == Orientation.Tall:
self.__img_factor = 67
self.__size = QSize(self.__img_factor * 3, self.__img_factor * 4) * pixel_ratio / divisor
else:
self.__img_factor = 17
self.__size = QSize(self.__img_factor * 16, self.__img_factor * 9) * pixel_ratio / divisor
# lk: for prettier images set this to true
self.__smooth_transform: bool = True
if divisor > 2:
self.__smooth_transform = False
if base is not None:
self.__base = base
else:
self.__base = self
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
@property
def base(self) -> 'ImageSize.Preset':
return self.__base
Image = Preset(1, 2)
"""! @brief Size and pixel ratio of the image on disk"""
ImageWide = Preset(1, 2, Orientation.Wide)
"""! @brief Size and pixel ratio for wide 16/9 image on disk"""
Display = Preset(1, 1, base=Image)
"""! @brief Size and pixel ratio for displaying"""
DisplayWide = Preset(1, 1, Orientation.Wide, base=ImageWide)
"""! @brief Size and pixel ratio for wide 16/9 image display"""
Wide = DisplayWide
Normal = Display
"""! @brief Same as Display"""
Small = Preset(3, 1, base=Image)
"""! @brief Small image size for displaying"""
SmallWide = Preset(1, 1, Orientation.Wide, base=ImageWide)
"""! @brief Small image size for displaying"""
Smaller = Preset(4, 1, base=Image)
"""! @brief Smaller image size for displaying"""
SmallerWide = Preset(4, 1, Orientation.Wide, base=ImageWide)
"""! @brief Smaller image size for displaying"""
Icon = Preset(5, 1, base=Image)
"""! @brief Smaller image size for UI icons"""

View file

@ -2,8 +2,6 @@ import hashlib
import json
import pickle
import zlib
from enum import Enum
# from concurrent import futures
from logging import getLogger
from pathlib import Path
@ -34,6 +32,7 @@ from PyQt5.QtWidgets import QApplication
from legendary.models.game import Game
from rare.lgndr.core import LegendaryCore
from rare.models.image import ImageSize
from rare.models.signals import GlobalSignals
from rare.utils.paths import image_dir, resources_path, desktop_icon_suffix
@ -45,94 +44,6 @@ if TYPE_CHECKING:
logger = getLogger("ImageManager")
class Orientation(Enum):
Tall = 0
Wide = 1
class ImageSize:
class Preset:
def __init__(self, divisor: float, pixel_ratio: float, orientation: Orientation = Orientation.Tall,
base: 'ImageSize.Preset' = None):
self.__divisor = divisor
self.__pixel_ratio = pixel_ratio
if orientation == Orientation.Tall:
self.__img_factor = 67
self.__size = QSize(self.__img_factor * 3, self.__img_factor * 4) * pixel_ratio / divisor
else:
self.__img_factor = 21
self.__size = QSize(self.__img_factor * 16, self.__img_factor * 9) * pixel_ratio / divisor
# lk: for prettier images set this to true
self.__smooth_transform: bool = True
if divisor > 2:
self.__smooth_transform = False
if base is not None:
self.__base = base
else:
self.__base = self
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
@property
def base(self) -> 'ImageSize.Preset':
return self.__base
Image = Preset(1, 2)
"""! @brief Size and pixel ratio of the image on disk"""
ImageWide = Preset(1, 2, Orientation.Wide)
"""! @brief Size and pixel ratio for wide 16/9 image on disk"""
Display = Preset(1, 1, base=Image)
"""! @brief Size and pixel ratio for displaying"""
DisplayWide = Preset(1, 1, Orientation.Wide, base=ImageWide)
"""! @brief Size and pixel ratio for wide 16/9 image display"""
Wide = DisplayWide
Normal = Display
"""! @brief Same as Display"""
Small = Preset(3, 1, base=Image)
"""! @brief Small image size for displaying"""
SmallWide = Preset(1, 1, Orientation.Wide, base=ImageWide)
"""! @brief Small image size for displaying"""
Smaller = Preset(4, 1, base=Image)
"""! @brief Smaller image size for displaying"""
SmallerWide = Preset(4, 1, Orientation.Wide, base=ImageWide)
"""! @brief Smaller image size for displaying"""
Icon = Preset(5, 1, base=Image)
"""! @brief Smaller image size for UI icons"""
class ImageManager(QObject):
class Worker(QRunnable):
class Signals(QObject):

View file

@ -15,7 +15,7 @@ from PyQt5.QtGui import (
)
from PyQt5.QtWidgets import QWidget
from rare.shared.image_manager import ImageSize
from rare.models.image import ImageSize
OverlayPath = Tuple[QPainterPath, Union[QColor, QLinearGradient]]
@ -152,3 +152,7 @@ class ImageWidget(QWidget):
self.paint_image(painter, a0)
self.paint_overlay(painter, a0)
painter.end()
__all__ = ["ImageSize", "ImageWidget"]