From a049b23c77989b47f8749341026e5ed55d7012c8 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 16 Oct 2026 09:49:29 +0800 Subject: [PATCH] feat: adapt to new assemblicon API with MSIX artifact support --- tool/src/aurora_iconset_builder/__init__.py | 16 ++-- tool/src/aurora_iconset_builder/cli.py | 23 +++++- .../nostd_icons/application_icons.py | 39 +++++++--- .../nostd_icons/mimetype_icons.py | 15 +++- .../std_icons/mimetype_icons.py | 75 ++++++++++++------- tool/uv.lock | 2 +- 6 files changed, 122 insertions(+), 48 deletions(-) diff --git a/tool/src/aurora_iconset_builder/__init__.py b/tool/src/aurora_iconset_builder/__init__.py index ae2191e..a033432 100644 --- a/tool/src/aurora_iconset_builder/__init__.py +++ b/tool/src/aurora_iconset_builder/__init__.py @@ -1,5 +1,10 @@ from pathlib import Path -from assemblicon.highlevel.utils import DEFAULT_FD_THUMBNAIL_HWS +from assemblicon.highlevel.utils import ( + DEFAULT_FD_THUMBNAIL_HWS, + DEFAULT_MSIX_SCALES, + DEFAULT_MSIX_APP44_TARGETSIZES, + DEFAULT_MSIX_EXT_TARGETSIZES, +) from assemblicon.highlevel.environment import Environment from assemblicon.highlevel.context import Context from assemblicon.logger import APP_LOGGER as LOGGER @@ -23,11 +28,12 @@ def main() -> None: iconset_input, iconset_output, opts.svg_render, - # TODO: For easy testing, we only build 32x32 and 48x48. - # Enable full generation after testing. - # DEFAULT_FD_THUMBNAIL_HWS, - (32, 48, 256), + DEFAULT_FD_THUMBNAIL_HWS, + DEFAULT_MSIX_SCALES, + DEFAULT_MSIX_APP44_TARGETSIZES, + DEFAULT_MSIX_EXT_TARGETSIZES, tempdir_initializer, + opts.format_selection, ) env = Environment(prologue) ctx = Context(env) diff --git a/tool/src/aurora_iconset_builder/cli.py b/tool/src/aurora_iconset_builder/cli.py index 6e9f048..c2e41d1 100644 --- a/tool/src/aurora_iconset_builder/cli.py +++ b/tool/src/aurora_iconset_builder/cli.py @@ -1,19 +1,28 @@ from dataclasses import dataclass from typing import Optional from assemblicon.cli import ( - SvgRenderKind, StdOptsSetup, create_argparser, parse_standard_opts, ) +from assemblicon.highlevel.address import Family +from assemblicon.lowlevel.artrdr import SvgRenderKind @dataclass(frozen=True) class AuroraOpts: selection: Optional[list[str]] - """The list holding all name of jobs for building.""" + """ + The list holding all name of jobs for building. + ``None`` for building artifacts of all jobs. + """ svg_render: SvgRenderKind """The render kind for SVG file.""" + format_selection: Optional[set[Family]] + """ + The set holding all formats of artifacts for building. + ``None`` for building artifacts of all formats. + """ def parse() -> AuroraOpts: @@ -26,6 +35,14 @@ def parse() -> AuroraOpts: ns = parser.parse_args() opts = parse_standard_opts(setup, ns) + format_selection = ( + None + if opts.format_selection is None + else {item.to_assemblicon_type() for item in opts.format_selection} + ) + return AuroraOpts( - selection=opts.selection, svg_render=opts.svg_render.to_assemblicon_type() + selection=opts.selection, + svg_render=opts.svg_render.to_assemblicon_type(), + format_selection=format_selection, ) diff --git a/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py b/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py index 2fd54d3..f75dbf5 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py @@ -1,12 +1,23 @@ from ..types import AuroraContext, AuroraEnvironment -from assemblicon.highlevel.utils import FdContext, WinCategory, MacCategory +from assemblicon.highlevel.utils import ( + FdContext, + IcoCategory, + IcnsCategory, + MsixCategory, +) from assemblicon.highlevel.source import ( SvgSource, TempArtSource, NewArtSource, BlenderSource, ) -from assemblicon.highlevel.sink import FdArtSink, WinArtSink, MacArtSink, TempArtSink +from assemblicon.highlevel.sink import ( + FdArtSink, + IcoArtSink, + MsixArtSink, + IcnsArtSink, + TempArtSink, +) from assemblicon.lowlevel.artproc import ( art_anchor_to_offset, default_art_resize, @@ -24,8 +35,9 @@ def register(ctx: AuroraContext) -> None: TempArtSource("image-jpeg.png"), NewArtSource(), FdArtSink(FdContext.Applications, "org.sarasaschipworkshop.picture"), - WinArtSink(WinCategory.Application, "sarasacw-picture"), - MacArtSink(MacCategory.Application, "sarasacw-picture"), + IcoArtSink(IcoCategory.Application, "sarasacw-picture"), + MsixArtSink(MsixCategory.Application, "sarasacw-picture"), + IcnsArtSink(IcnsCategory.Application, "sarasacw-picture"), ), build_sarasacw_picture_icon, ) @@ -34,7 +46,8 @@ def register(ctx: AuroraContext) -> None: ( BlenderSource("apps", "notepad.blend"), TempArtSink("notepad.png"), - WinArtSink(WinCategory.Application, "notepad"), + IcoArtSink(IcoCategory.Application, "notepad"), + MsixArtSink(MsixCategory.Application, "notepad"), ), build_notepad_icon, ) @@ -46,8 +59,9 @@ def build_sarasacw_picture_icon( inner_src: TempArtSource, new_art: NewArtSource, fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, + icns_sink: IcnsArtSink, ) -> None: app = new_art.pull() frame = frame_src.pull(env) @@ -67,16 +81,19 @@ def build_sarasacw_picture_icon( # save artifact fd_sink.push(env, app) - win_sink.push(env, app) - mac_sink.push(env, app) + ico_sink.push(env, app) + msix_sink.push(env, app) + icns_sink.push(env, app) def build_notepad_icon( env: AuroraEnvironment, src: BlenderSource, temp_sink: TempArtSink, - win_sink: WinArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, ) -> None: src.pull_to_temp(env, temp_sink) with temp_sink.repull(env) as art: - win_sink.push(env, art) + ico_sink.push(env, art) + msix_sink.push(env, art) diff --git a/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py index 4296244..4c458d2 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py @@ -1,7 +1,18 @@ from ..types import AuroraContext, AuroraEnvironment -from assemblicon.highlevel.utils import FdContext, WinCategory, MacCategory +from assemblicon.highlevel.utils import ( + FdContext, + IcoCategory, + IcnsCategory, + MsixCategory, +) from assemblicon.highlevel.source import SvgSource, TempArtSource -from assemblicon.highlevel.sink import TempArtSink, FdArtSink, WinArtSink, MacArtSink +from assemblicon.highlevel.sink import ( + TempArtSink, + FdArtSink, + IcoArtSink, + MsixArtSink, + IcnsArtSink, +) def register(ctx: AuroraContext) -> None: diff --git a/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py index 6df1857..e5768f8 100644 --- a/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py @@ -1,14 +1,25 @@ import PIL.Image import PIL.ImageEnhance from ..types import AuroraContext, AuroraEnvironment -from assemblicon.highlevel.utils import FdContext, WinCategory, MacCategory +from assemblicon.highlevel.utils import ( + FdContext, + IcoCategory, + IcnsCategory, + MsixCategory, +) from assemblicon.highlevel.source import ( SvgSource, BitmapSource, TempArtSource, FdArtSource, ) -from assemblicon.highlevel.sink import TempArtSink, FdArtSink, WinArtSink, MacArtSink +from assemblicon.highlevel.sink import ( + TempArtSink, + FdArtSink, + IcoArtSink, + MsixArtSink, + IcnsArtSink, +) from assemblicon.geometry import Rectangle, Point from assemblicon.lowlevel.artio import new_artifact from assemblicon.lowlevel.artproc import ( @@ -42,8 +53,9 @@ def register(ctx: AuroraContext) -> None: BitmapSource("bitmap", "Niinsaare_järv.jpg"), TempArtSink("image-jpeg.png"), FdArtSink(FdContext.MimeTypes, "image-jpeg"), - WinArtSink(WinCategory.Extension, "jpg"), - MacArtSink(MacCategory.Extension, "jpg"), + IcoArtSink(IcoCategory.Extension, "jpg"), + MsixArtSink(MsixCategory.Extension, "jpg"), + IcnsArtSink(IcnsCategory.Extension, "jpg"), ), build_image_jpeg_icon, ) @@ -55,8 +67,9 @@ def register(ctx: AuroraContext) -> None: BitmapSource("bitmap", "Tulipa_suaveolens_floriade_to_Canberra-mask.png"), SvgSource("image-png-checkerboard.svg"), FdArtSink(FdContext.MimeTypes, "image-png"), - WinArtSink(WinCategory.Extension, "png"), - MacArtSink(MacCategory.Extension, "png"), + IcoArtSink(IcoCategory.Extension, "png"), + MsixArtSink(MsixCategory.Extension, "png"), + IcnsArtSink(IcnsCategory.Extension, "png"), ), build_image_png_icon, ) @@ -66,8 +79,9 @@ def register(ctx: AuroraContext) -> None: TempArtSource("component", "image-base.png"), BitmapSource("bitmap", "Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg"), FdArtSink(FdContext.MimeTypes, "image-bmp"), - WinArtSink(WinCategory.Extension, "bmp"), - MacArtSink(MacCategory.Extension, "bmp"), + IcoArtSink(IcoCategory.Extension, "bmp"), + MsixArtSink(MsixCategory.Extension, "bmp"), + IcnsArtSink(IcnsCategory.Extension, "bmp"), ), build_image_bmp_icon, ) @@ -77,8 +91,9 @@ def register(ctx: AuroraContext) -> None: TempArtSource("component", "image-base.png"), BitmapSource("bitmap", "Hot-air_balloon_in_Tambov_-_02.jpg"), FdArtSink(FdContext.MimeTypes, "image-gif"), - WinArtSink(WinCategory.Extension, "gif"), - MacArtSink(MacCategory.Extension, "gif"), + IcoArtSink(IcoCategory.Extension, "gif"), + MsixArtSink(MsixCategory.Extension, "gif"), + IcnsArtSink(IcnsCategory.Extension, "gif"), ), build_image_gif_icon, ) @@ -107,8 +122,9 @@ def build_image_jpeg_icon( bitmap_src: BitmapSource, temp_sink: TempArtSink, fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, + icns_sink: IcnsArtSink, ) -> None: jpg_image = base_src.pull(env) @@ -143,8 +159,9 @@ def build_image_jpeg_icon( # save for FD fd_sink.push(env, jpg_image) # save for windows and mac - win_sink.push(env, jpg_image) - mac_sink.push(env, jpg_image) + ico_sink.push(env, jpg_image) + msix_sink.push(env, jpg_image) + icns_sink.push(env, jpg_image) def build_image_png_icon( @@ -154,8 +171,9 @@ def build_image_png_icon( bitmap_mask_src: BitmapSource, checkerboard_src: SvgSource, fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, + icns_sink: IcnsArtSink, ) -> None: png_image = base_src.pull(env) @@ -200,8 +218,9 @@ def build_image_png_icon( # save for FD fd_sink.push(env, png_image) # save for windows and mac - win_sink.push(env, png_image) - mac_sink.push(env, png_image) + ico_sink.push(env, png_image) + msix_sink.push(env, png_image) + icns_sink.push(env, png_image) def build_image_bmp_icon( @@ -209,8 +228,9 @@ def build_image_bmp_icon( base_src: TempArtSource, bitmap_src: BitmapSource, fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, + icns_sink: IcnsArtSink, ) -> None: bmp_image = base_src.pull(env) @@ -233,8 +253,9 @@ def build_image_bmp_icon( # save for FD fd_sink.push(env, bmp_image) # save for windows and mac - win_sink.push(env, bmp_image) - mac_sink.push(env, bmp_image) + ico_sink.push(env, bmp_image) + msix_sink.push(env, bmp_image) + icns_sink.push(env, bmp_image) def build_image_gif_icon( @@ -242,8 +263,9 @@ def build_image_gif_icon( base_src: TempArtSource, bitmap_src: BitmapSource, fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, + ico_sink: IcoArtSink, + msix_sink: MsixArtSink, + icns_sink: IcnsArtSink, ) -> None: gif_image = base_src.pull(env) @@ -266,5 +288,6 @@ def build_image_gif_icon( # save for FD fd_sink.push(env, gif_image) # save for windows and mac - win_sink.push(env, gif_image) - mac_sink.push(env, gif_image) + ico_sink.push(env, gif_image) + msix_sink.push(env, gif_image) + icns_sink.push(env, gif_image) diff --git a/tool/uv.lock b/tool/uv.lock index 51d15e8..4af3d20 100644 --- a/tool/uv.lock +++ b/tool/uv.lock @@ -5,7 +5,7 @@ requires-python = ">=3.13" [[package]] name = "assemblicon" version = "0.1.0" -source = { git = "https://github.com/SarasasChipWorkshop/assemblicon#0073298d45d6c44fc164456ebdec5f0d3ada5dff" } +source = { git = "https://github.com/SarasasChipWorkshop/assemblicon#d0a3d48c174aad51f493224d47ec4600a3935591" } dependencies = [ { name = "pillow" }, ]