From f33523259ae5eab80b3cbc1a3f29244d23187a08 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Wed, 26 Aug 2026 20:02:59 +0800 Subject: [PATCH] fix: fix build issue --- tool/src/aurora_iconset_builder/__init__.py | 14 +++++---- .../assemblicon/context.py | 4 +-- .../ext_icons/__init__.py | 6 ---- .../nostd_icons/__init__.py | 7 +++-- .../mimetype_icons.py} | 30 +++++++++++-------- .../std_icons/__init__.py | 4 +-- .../std_icons/action_icons.py | 29 +++++++----------- 7 files changed, 43 insertions(+), 51 deletions(-) delete mode 100644 tool/src/aurora_iconset_builder/ext_icons/__init__.py rename tool/src/aurora_iconset_builder/{ext_icons/image_icons.py => nostd_icons/mimetype_icons.py} (70%) diff --git a/tool/src/aurora_iconset_builder/__init__.py b/tool/src/aurora_iconset_builder/__init__.py index d0a8862..c3b2a1f 100644 --- a/tool/src/aurora_iconset_builder/__init__.py +++ b/tool/src/aurora_iconset_builder/__init__.py @@ -1,9 +1,9 @@ import logging from pathlib import Path -from .assemblicon.context import Context +from .assemblicon.context import Prerequisite, Context, AdvancedContext, SvgRenderKind from .assemblicon.utils import setup_logging from .std_icons import build_standard_icons -from .ext_icons import build_ext_icons +from .nostd_icons import build_non_standard_icons def main() -> None: @@ -12,14 +12,16 @@ def main() -> None: repository_root = Path(__file__).resolve().parent.parent.parent.parent iconset_input = repository_root / "src" iconset_output = repository_root / "artifact" - ctx = Context(iconset_input, iconset_output) + prereq = Prerequisite(iconset_input, iconset_output, SvgRenderKind.Inkscape) + ctx = Context(prereq) + advctx = AdvancedContext(ctx) try: - _build_icons(ctx) + _build_icons(advctx) except BaseException as e: logging.fatal("Runtime error: %s", e) -def _build_icons(ctx: Context) -> None: +def _build_icons(ctx: AdvancedContext) -> None: build_standard_icons(ctx) - #build_ext_icons(ctx) + build_non_standard_icons(ctx) diff --git a/tool/src/aurora_iconset_builder/assemblicon/context.py b/tool/src/aurora_iconset_builder/assemblicon/context.py index 9c246d6..1de8b22 100644 --- a/tool/src/aurora_iconset_builder/assemblicon/context.py +++ b/tool/src/aurora_iconset_builder/assemblicon/context.py @@ -207,7 +207,7 @@ class AdvancedContext: self.__intern_render_svg(src, dst, cfg) def render_svg_then_load( - self, src: Path, dst: Optional[Path], cfg: SvgConfig = _DEFAULT_SVG_CONFIG + self, src: Path, dst: Optional[Path] = None, cfg: SvgConfig = _DEFAULT_SVG_CONFIG ) -> Artifact: """ Render given SVG to PNG file, then load it directly. @@ -248,7 +248,7 @@ class AdvancedContext: self.__intern_render_blender(src, dst, cfg) def render_blender_then_load( - self, src: Path, dst: Optional[Path], cfg: BlenderConfig = _DEFAULT_BLD_CONFIG + self, src: Path, dst: Optional[Path] = None, cfg: BlenderConfig = _DEFAULT_BLD_CONFIG ) -> Artifact: """ Render given Blender composition to PNG file, then load it directly. diff --git a/tool/src/aurora_iconset_builder/ext_icons/__init__.py b/tool/src/aurora_iconset_builder/ext_icons/__init__.py deleted file mode 100644 index e2fcef8..0000000 --- a/tool/src/aurora_iconset_builder/ext_icons/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from ..assemblicon.context import Context -from .image_icons import build_image_icons - - -def build_ext_icons(ctx: Context) -> None: - build_image_icons(ctx) diff --git a/tool/src/aurora_iconset_builder/nostd_icons/__init__.py b/tool/src/aurora_iconset_builder/nostd_icons/__init__.py index 561a451..aae6e85 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/__init__.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/__init__.py @@ -1,5 +1,6 @@ -from ..assemblicon.context import Context +from ..assemblicon.context import AdvancedContext +from .mimetype_icons import build_mimetype_icons -def build_non_standard_icons(ctx: Context) -> None: - pass +def build_non_standard_icons(ctx: AdvancedContext) -> None: + build_mimetype_icons(ctx) diff --git a/tool/src/aurora_iconset_builder/ext_icons/image_icons.py b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py similarity index 70% rename from tool/src/aurora_iconset_builder/ext_icons/image_icons.py rename to tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py index 0635f7b..a50811d 100644 --- a/tool/src/aurora_iconset_builder/ext_icons/image_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py @@ -1,7 +1,6 @@ import PIL.Image import PIL.ImageEnhance -from ..assemblicon.artrender import render_svg, render_ico, SvgConfig -from ..assemblicon.context import Context +from ..assemblicon.context import AdvancedContext, FdContext, WinCategory, MacCategory from ..assemblicon.utils import Artifact from ..assemblicon.geometry import MinMaxRect, PosSizeRect from ..assemblicon.artio import load_input_artifact, save_artifact @@ -11,23 +10,26 @@ from ..assemblicon.artproc import ( HorizontalAnchor, ) + +def build_mimetype_icons(ctx: AdvancedContext) -> None: + _build_image_icons(ctx) + + IMAGE_INNER_RECT_MINMAX = MinMaxRect(20 * 4, 52 * 4, 236 * 4, 204 * 4) IMAGE_INNER_RECT_POSSIZE = IMAGE_INNER_RECT_MINMAX.to_pos_size_rect() -def build_image_icons(ctx: Context) -> None: +def _build_image_icons(ctx: AdvancedContext) -> None: # build image base - image_base = render_svg( + image_base = ctx.render_svg_then_load( ctx.input_artifact("component", "image-base.svg"), - ctx.temporary_artifact("component", "image-base.png"), - SvgConfig(1024, 1024), ) # load image base with image_base: _build_jpg_icon(ctx, image_base) -def _build_jpg_icon(ctx: Context, base: Artifact) -> None: +def _build_jpg_icon(ctx: AdvancedContext, base: Artifact) -> None: jpg_image = base.copy() jpg_image_inner = load_input_artifact( @@ -58,10 +60,12 @@ def _build_jpg_icon(ctx: Context, base: Artifact) -> None: jpg_image.paste( bestfit_jpg_image_inner, IMAGE_INNER_RECT_POSSIZE.to_pillow_tuple() ) + # build artifacts - save_artifact(jpg_image, ctx.temporary_artifact("ext", "jpg-image.png")) - render_ico( - ctx, - jpg_image, - ctx.output_artifact("ext", "jpg-image.ico"), - ) + # save for FD + ctx.save_fd_artifact(jpg_image, FdContext.MimeTypes, "image-jpeg") + # use image/jpeg as the default image icon + ctx.dup_fd_artifact(FdContext.MimeTypes, "image-jpeg", FdContext.MimeTypes, "image-x-generic") + # save for windows and mac + ctx.save_win_artifact(jpg_image, WinCategory.Extension, "jpg") + ctx.save_mac_artifact(jpg_image, MacCategory.Extension, "jpg") diff --git a/tool/src/aurora_iconset_builder/std_icons/__init__.py b/tool/src/aurora_iconset_builder/std_icons/__init__.py index 9438233..e342221 100644 --- a/tool/src/aurora_iconset_builder/std_icons/__init__.py +++ b/tool/src/aurora_iconset_builder/std_icons/__init__.py @@ -1,6 +1,6 @@ -from ..assemblicon.context import Context +from ..assemblicon.context import AdvancedContext from .action_icons import build_action_icons -def build_standard_icons(ctx: Context) -> None: +def build_standard_icons(ctx: AdvancedContext) -> None: build_action_icons(ctx) diff --git a/tool/src/aurora_iconset_builder/std_icons/action_icons.py b/tool/src/aurora_iconset_builder/std_icons/action_icons.py index fd8768a..287a07f 100644 --- a/tool/src/aurora_iconset_builder/std_icons/action_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/action_icons.py @@ -1,33 +1,23 @@ -from pathlib import Path import PIL.Image -from ..assemblicon.artrender import render_svg, SvgConfig -from ..assemblicon.context import Context -from ..assemblicon.utils import Artifact -from ..assemblicon.artio import save_artifact +from ..assemblicon.context import AdvancedContext, FdContext -def build_action_icons(ctx: Context) -> None: +def build_action_icons(ctx: AdvancedContext) -> None: _build_go_icons(ctx) -def _build_go_icons(ctx: Context) -> None: +def _build_go_icons(ctx: AdvancedContext) -> None: # build go-* base - go_base = render_svg( - ctx.input_artifact("component", "go-base.svg"), - ctx.temporary_artifact("component", "go-base.png"), - SvgConfig(1024, 1024), + go_base = ctx.render_svg_then_load( + ctx.input_artifact("component", "go-base.svg") ) # build go-* shining - go_inner_shining = render_svg( + go_inner_shining = ctx.render_svg_then_load( ctx.input_artifact("component", "go-inner-shining.svg"), - ctx.temporary_artifact("component", "go-inner-shining.png"), - SvgConfig(1024, 1024), ) # build go-* inner - go_inner = render_svg( + go_inner = ctx.render_svg_then_load( ctx.input_artifact("component", "go-inner.svg"), - ctx.temporary_artifact("component", "go-inner.png"), - SvgConfig(1024, 1024), ) with go_base, go_inner_shining, go_inner: @@ -36,8 +26,9 @@ def _build_go_icons(ctx: Context) -> None: go = go_base.copy() # render shining with inner mask go.paste(go_inner_shining, (0, 0), go_mask) - # save as image - save_artifact(go, ctx.output_artifact(f"go-{part}.png")) + + # save as FD action + ctx.save_fd_artifact(go, FdContext.Actions, f'go-{part}') # rotate it for next calling go_mask = go_mask.transpose(PIL.Image.Transpose.ROTATE_90)