feat: bring source and sink back for future development

This commit is contained in:
2026-09-03 19:13:35 +08:00
parent d13f18cc90
commit 28fa01992e
11 changed files with 86 additions and 15 deletions
@@ -17,6 +17,8 @@ def main() -> None:
env = Environment(prologue) env = Environment(prologue)
ctx = Context(env) ctx = Context(env)
# TODO: use explicit temporary directory initializer in prologue to do this.
# create our special temporary subdirectory # create our special temporary subdirectory
env.temporary_artifact("component").mkdir(parents=True, exist_ok=True) env.temporary_artifact("component").mkdir(parents=True, exist_ok=True)
@@ -73,7 +73,7 @@ _DEFAULT_BLD_CONFIG = artrdr.BlenderConfig(VART_HW, VART_HW)
# TODO: For easy testing, we only build 32x32 and 48x48. # TODO: For easy testing, we only build 32x32 and 48x48.
# Enable full generation after testing. # Enable full generation after testing.
_FD_THUMBNAIL_HWS: tuple[int, ...] = (32, 48, 256) _FD_THUMBNAIL_HWS: tuple[int, ...] = (32, 48)
# _FD_THUMBNAIL_HWS: tuple[int, ...] = (16, 32, 48, 64, 128, 256) # _FD_THUMBNAIL_HWS: tuple[int, ...] = (16, 32, 48, 64, 128, 256)
@@ -0,0 +1,7 @@
from .common import Sink
from .tempdir_sink import TempDirSink
__all__ = [
"Sink",
"TempDirSink"
]
@@ -0,0 +1,11 @@
from abc import ABC, abstractmethod
from ..utils import Artifact
class Sink(ABC):
"""
Abstract base class for all sinks.
"""
@abstractmethod
def push_artifact(self, art: Artifact) -> None:
pass
@@ -0,0 +1,12 @@
from ..utils import Artifact
from .common import Sink
class TempDirSink(Sink):
__args: tuple[str, ...]
def __init__(self, *args: str) -> None:
self.__args = tuple(args)
def push_artifact(self, art: Artifact) -> None:
pass
@@ -0,0 +1,7 @@
from .common import Source
from .tempdir_source import TempDirSource
__all__ = [
"Source",
"TempDirSource"
]
@@ -0,0 +1,11 @@
from abc import ABC, abstractmethod
from ..utils import Artifact
class Source(ABC):
"""
Abstract base class for all sources.
"""
@abstractmethod
def pull_artifact(self) -> Artifact:
pass
@@ -0,0 +1,12 @@
from ..utils import Artifact
from .common import Source
class TempDirSource(Source):
__path_comps: tuple[str, ...]
def __init__(self, *args: str) -> None:
self.__path_comps = tuple(args)
def pull_artifact(self) -> Artifact:
pass
@@ -1,5 +1,6 @@
import enum import enum
import math import math
import PIL.Image
from .utils import Artifact from .utils import Artifact
from ..geometry import Point from ..geometry import Point
@@ -73,6 +74,13 @@ def aspect_ratio_scale_and_crop(
return scaled.crop((crop_x, crop_y, crop_x + target_width, crop_y + target_height)) return scaled.crop((crop_x, crop_y, crop_x + target_width, crop_y + target_height))
def default_art_resize(art: Artifact, width: int, height: int) -> Artifact:
"""
Resize given artifact with default resample (LANCZOS).
"""
return art.resize((width, height), PIL.Image.Resampling.LANCZOS)
def art_anchor_to_offset( def art_anchor_to_offset(
art: Artifact, art: Artifact,
horizontal_anchor: HorizontalAnchor, horizontal_anchor: HorizontalAnchor,
@@ -1,11 +1,11 @@
import PIL.Image
from ..types import AuroraContext, AuroraEnvironment from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.highlevel.environment import FdContext from ..assemblicon.highlevel.environment import FdContext
from ..assemblicon.highlevel.utils import VART_HW from ..assemblicon.highlevel.utils import VART_HW
from ..assemblicon.geometry import Rectangle, Point from ..assemblicon.geometry import Rectangle
from ..assemblicon.lowlevel.artproc import ( from ..assemblicon.lowlevel.artproc import (
art_anchor_to_offset, art_anchor_to_offset,
anchor_to_offset, anchor_to_offset,
default_art_resize,
align_paste, align_paste,
align_alpha_composite, align_alpha_composite,
VerticalAnchor, VerticalAnchor,
@@ -30,7 +30,7 @@ def build_image_properties_icon(env: AuroraEnvironment) -> None:
art = env.load_temporary_artifact("image-jpeg.png") art = env.load_temporary_artifact("image-jpeg.png")
info_mark = env.load_temporary_artifact("dialog-infomation.png") info_mark = env.load_temporary_artifact("dialog-infomation.png")
resized_info_mark = info_mark.resize((500, 500), PIL.Image.Resampling.LANCZOS) resized_info_mark = default_art_resize(info_mark, 500, 500)
align_alpha_composite( align_alpha_composite(
art, art,
@@ -47,23 +47,23 @@ def build_image_properties_icon(env: AuroraEnvironment) -> None:
def build_image_zoom_original_icon(env: AuroraEnvironment) -> None: def build_image_zoom_original_icon(env: AuroraEnvironment) -> None:
# load triangle assets # load triangle assets
tri_new_size = (200, 200) TRI_SIZE = (200, 200)
tri_left = env.load_temporary_artifact("component", "triangle-left.png").resize( tri_left = default_art_resize(
tri_new_size, PIL.Image.Resampling.LANCZOS env.load_temporary_artifact("component", "triangle-left.png"), *TRI_SIZE
) )
tri_down = env.load_temporary_artifact("component", "triangle-down.png").resize( tri_down = default_art_resize(
tri_new_size, PIL.Image.Resampling.LANCZOS env.load_temporary_artifact("component", "triangle-down.png"), *TRI_SIZE
) )
tri_right = env.load_temporary_artifact("component", "triangle-right.png").resize( tri_right = default_art_resize(
tri_new_size, PIL.Image.Resampling.LANCZOS env.load_temporary_artifact("component", "triangle-right.png"), *TRI_SIZE
) )
tri_up = env.load_temporary_artifact("component", "triangle-up.png").resize( tri_up = default_art_resize(
tri_new_size, PIL.Image.Resampling.LANCZOS env.load_temporary_artifact("component", "triangle-up.png"), *TRI_SIZE
) )
# load inner image # load inner image
inner = env.load_temporary_artifact("image-jpeg.png") inner = env.load_temporary_artifact("image-jpeg.png")
resized_inner = inner.resize((680, 680), PIL.Image.Resampling.LANCZOS) resized_inner = default_art_resize(inner, 680, 680)
# composite this icon # composite this icon
icon = env.new_artifact() icon = env.new_artifact()
@@ -3,6 +3,7 @@ from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory
from ..assemblicon.lowlevel.artproc import ( from ..assemblicon.lowlevel.artproc import (
art_anchor_to_offset, art_anchor_to_offset,
default_art_resize,
align_paste, align_paste,
VerticalAnchor, VerticalAnchor,
HorizontalAnchor, HorizontalAnchor,
@@ -24,7 +25,7 @@ def build_sarasacw_picture_icons(env: AuroraEnvironment) -> None:
) )
inner = env.load_temporary_artifact("image-jpeg.png") inner = env.load_temporary_artifact("image-jpeg.png")
resized_inner = inner.resize((990, 990), PIL.Image.Resampling.LANCZOS) resized_inner = default_art_resize(inner, 990, 990)
align_paste( align_paste(
app, app,