From 988a9fc04f87bcd9540744adfab8fe991a44f186 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Wed, 2 Sep 2026 14:07:57 +0800 Subject: [PATCH] refactor: fix aurora icon build error --- tool/src/aurora_iconset_builder/__init__.py | 44 +-------- tool/src/aurora_iconset_builder/cli.py | 31 ++++++ .../nostd_icons/__init__.py | 14 ++- .../nostd_icons/action_icons.py | 79 +++++++++------ .../nostd_icons/application_icons.py | 41 ++++---- .../nostd_icons/mimetype_icons.py | 55 +++++------ .../std_icons/__init__.py | 12 +-- .../std_icons/action_icons.py | 95 ++++++++++--------- .../std_icons/mimetype_icons.py | 15 +++ .../std_icons/status_icons.py | 35 +++---- tool/src/aurora_iconset_builder/types.py | 14 +++ 11 files changed, 242 insertions(+), 193 deletions(-) create mode 100644 tool/src/aurora_iconset_builder/cli.py create mode 100644 tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py create mode 100644 tool/src/aurora_iconset_builder/types.py diff --git a/tool/src/aurora_iconset_builder/__init__.py b/tool/src/aurora_iconset_builder/__init__.py index dff8fbb..2f23d16 100644 --- a/tool/src/aurora_iconset_builder/__init__.py +++ b/tool/src/aurora_iconset_builder/__init__.py @@ -1,50 +1,14 @@ from pathlib import Path -from dataclasses import dataclass -from typing import Optional -from .assemblicon.cli import ( - SvgRenderKind, - StdOptsSetup, - create_argparser, - parse_standard_opts, -) -from .assemblicon.highlevel.environment import Prologue, Environment +from .assemblicon.highlevel.environment import Environment from .assemblicon.highlevel.context import Context from .assemblicon.logger import APP_LOGGER as LOGGER +from .cli import parse +from .types import AuroraPrologue from . import std_icons, nostd_icons -@dataclass(frozen=True) -class AuroraOpts: - selection: Optional[list[str]] - """The list holding all name of jobs for building.""" - svg_render: SvgRenderKind - """The render kind for SVG file.""" - - -def parse_opts() -> AuroraOpts: - setup = StdOptsSetup(require_input=False, require_output=False) - - parser = create_argparser(setup) - parser.prog = "Aurora Icon Set Builder" - parser.description = "The Programmatic Icon Assembly Workflow for Aurora Icon Set." - - ns = parser.parse_args() - opts = parse_standard_opts(setup, ns) - - return AuroraOpts( - selection=opts.selection, svg_render=opts.svg_render.to_assemblicon_type() - ) - - -@dataclass(frozen=True) -class AuroraPrologue(Prologue): - """Aurora icon set builder specific prologue""" - - pass - - def main() -> None: - opts = parse_opts() + opts = parse() repository_root = Path(__file__).resolve().parent.parent.parent.parent iconset_input = repository_root / "src" diff --git a/tool/src/aurora_iconset_builder/cli.py b/tool/src/aurora_iconset_builder/cli.py new file mode 100644 index 0000000..e30bc08 --- /dev/null +++ b/tool/src/aurora_iconset_builder/cli.py @@ -0,0 +1,31 @@ +from dataclasses import dataclass +from typing import Optional +from .assemblicon.cli import ( + SvgRenderKind, + StdOptsSetup, + create_argparser, + parse_standard_opts, +) + + +@dataclass(frozen=True) +class AuroraOpts: + selection: Optional[list[str]] + """The list holding all name of jobs for building.""" + svg_render: SvgRenderKind + """The render kind for SVG file.""" + + +def parse() -> AuroraOpts: + setup = StdOptsSetup(require_input=False, require_output=False) + + parser = create_argparser(setup) + parser.prog = "Aurora Icon Set Builder" + parser.description = "The Programmatic Icon Assembly Workflow for Aurora Icon Set." + + ns = parser.parse_args() + opts = parse_standard_opts(setup, ns) + + return AuroraOpts( + selection=opts.selection, svg_render=opts.svg_render.to_assemblicon_type() + ) diff --git a/tool/src/aurora_iconset_builder/nostd_icons/__init__.py b/tool/src/aurora_iconset_builder/nostd_icons/__init__.py index 12324fe..7853184 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/__init__.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/__init__.py @@ -1,10 +1,8 @@ -from ..assemblicon.highlevel.context import Context -from .action_icons import build_action_icons -from .mimetype_icons import build_mimetype_icons -from .application_icons import build_application_icons +from ..types import AuroraContext +from . import action_icons, application_icons, mimetype_icons -def register(ctx: Context) -> None: - build_mimetype_icons(ctx) - build_application_icons(ctx) - build_action_icons(ctx) +def register(ctx: AuroraContext) -> None: + action_icons.register(ctx) + application_icons.register(ctx) + mimetype_icons.register(ctx) diff --git a/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py b/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py index 18520da..67cae84 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py @@ -1,7 +1,8 @@ import PIL.Image -from ..assemblicon.context import AdvancedContext, FdContext -from ..assemblicon.artproc import ( - anchor_to_pos, +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext +from ..assemblicon.lowlevel.artproc import ( + art_anchor_to_offset, align_paste, align_alpha_composite, VerticalAnchor, @@ -9,79 +10,97 @@ from ..assemblicon.artproc import ( ) -def build_action_icons(ctx: AdvancedContext) -> None: - _build_image_properties_icon(ctx) - _build_image_zoom_origin_icon(ctx) +def register(ctx: AuroraContext) -> None: + ctx.register( + "nostd/action/image-properties", + ("nostd/mimetype/image-jpeg", "std/status/dialog-*"), + _build_image_properties_icon, + ) + ctx.register( + "nostd/action/image-zoom-original", + ("nostd/mimetype/image-jpeg", "std/action/zoom-*"), + _build_image_zoom_original_icon, + ) -def _build_image_properties_icon(ctx: AdvancedContext) -> None: - art = ctx.load_temporary_artifact("image-jpeg.png") +def _build_image_properties_icon(env: AuroraEnvironment) -> None: + art = env.load_temporary_artifact("image-jpeg.png") - info_mark = ctx.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) align_alpha_composite( art, resized_info_mark, - anchor_to_pos(art, HorizontalAnchor.Right, VerticalAnchor.Bottom), - anchor_to_pos(resized_info_mark, HorizontalAnchor.Right, VerticalAnchor.Bottom), + art_anchor_to_offset(art, HorizontalAnchor.Right, VerticalAnchor.Bottom), + art_anchor_to_offset( + resized_info_mark, HorizontalAnchor.Right, VerticalAnchor.Bottom + ), ) # save artifact - ctx.save_fd_artifact(art, FdContext.Actions, "image-properties") + env.save_fd_artifact(art, FdContext.Actions, "image-properties") -def _build_image_zoom_origin_icon(ctx: AdvancedContext) -> None: +def _build_image_zoom_original_icon(env: AuroraEnvironment) -> None: # load triangle assets - triangle_left = ctx.load_temporary_artifact("triangle-left.png").resize( + triangle_left = env.load_temporary_artifact("triangle-left.png").resize( (300, 300), PIL.Image.Resampling.LANCZOS ) - triangle_down = ctx.load_temporary_artifact("triangle-down.png").resize( + triangle_down = env.load_temporary_artifact("triangle-down.png").resize( (300, 300), PIL.Image.Resampling.LANCZOS ) - triangle_right = ctx.load_temporary_artifact("triangle-right.png").resize( + triangle_right = env.load_temporary_artifact("triangle-right.png").resize( (300, 300), PIL.Image.Resampling.LANCZOS ) - triangle_up = ctx.load_temporary_artifact("triangle-up.png").resize( + triangle_up = env.load_temporary_artifact("triangle-up.png").resize( (300, 300), PIL.Image.Resampling.LANCZOS ) # load inner image - inner = ctx.load_temporary_artifact("image-jpeg.png") + inner = env.load_temporary_artifact("image-jpeg.png") resized_inner = inner.resize((570, 570), PIL.Image.Resampling.LANCZOS) # composite this icon - icon = ctx.new_artifact() + icon = env.new_artifact() align_paste( icon, resized_inner, - anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Center), - anchor_to_pos(resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center), + art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Center), + art_anchor_to_offset( + resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center + ), ) align_alpha_composite( icon, triangle_left, - anchor_to_pos(icon, HorizontalAnchor.Left, VerticalAnchor.Center), - anchor_to_pos(triangle_left, HorizontalAnchor.Left, VerticalAnchor.Center), + art_anchor_to_offset(icon, HorizontalAnchor.Left, VerticalAnchor.Center), + art_anchor_to_offset( + triangle_left, HorizontalAnchor.Left, VerticalAnchor.Center + ), ) align_alpha_composite( icon, triangle_right, - anchor_to_pos(icon, HorizontalAnchor.Right, VerticalAnchor.Center), - anchor_to_pos(triangle_right, HorizontalAnchor.Right, VerticalAnchor.Center), + art_anchor_to_offset(icon, HorizontalAnchor.Right, VerticalAnchor.Center), + art_anchor_to_offset( + triangle_right, HorizontalAnchor.Right, VerticalAnchor.Center + ), ) align_alpha_composite( icon, triangle_up, - anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Top), - anchor_to_pos(triangle_up, HorizontalAnchor.Center, VerticalAnchor.Top), + art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Top), + art_anchor_to_offset(triangle_up, HorizontalAnchor.Center, VerticalAnchor.Top), ) align_alpha_composite( icon, triangle_down, - anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Bottom), - anchor_to_pos(triangle_down, HorizontalAnchor.Center, VerticalAnchor.Bottom), + art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Bottom), + art_anchor_to_offset( + triangle_down, HorizontalAnchor.Center, VerticalAnchor.Bottom + ), ) # save it - ctx.save_fd_artifact(icon, FdContext.Actions, "image-zoom-original") + env.save_fd_artifact(icon, FdContext.Actions, "image-zoom-original") 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 6f05c57..f92bf94 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/application_icons.py @@ -1,35 +1,42 @@ import PIL.Image -from ..assemblicon.context import AdvancedContext, FdContext, WinCategory, MacCategory -from ..assemblicon.artproc import ( - anchor_to_pos, +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory +from ..assemblicon.lowlevel.artproc import ( + art_anchor_to_offset, align_paste, VerticalAnchor, HorizontalAnchor, ) -def build_application_icons(ctx: AdvancedContext) -> None: - _build_sarasacw_picture_icons(ctx) - - -def _build_sarasacw_picture_icons(ctx: AdvancedContext) -> None: - app = ctx.new_artifact() - frame = ctx.render_svg_then_load( - ctx.input_artifact("app", "sarasacw-picture", "app-frame.svg") +def register(ctx: AuroraContext) -> None: + ctx.register( + "nostd/application/org.sarasachipworkshop.picture", + ("nostd/mimetype/image-jpeg", ), + build_sarasacw_picture_icons, ) - inner = ctx.load_temporary_artifact("image-jpeg.png") + +def build_sarasacw_picture_icons(env: AuroraEnvironment) -> None: + app = env.new_artifact() + frame = env.render_svg_then_load( + env.input_artifact("app", "sarasacw-picture", "app-frame.svg") + ) + + inner = env.load_temporary_artifact("image-jpeg.png") resized_inner = inner.resize((990, 990), PIL.Image.Resampling.LANCZOS) align_paste( app, resized_inner, - anchor_to_pos(app, HorizontalAnchor.Center, VerticalAnchor.Center), - anchor_to_pos(resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center), + art_anchor_to_offset(app, HorizontalAnchor.Center, VerticalAnchor.Center), + art_anchor_to_offset( + resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center + ), ) app.alpha_composite(frame, (0, 0)) # save artifact - ctx.save_fd_artifact(app, FdContext.Applications, "org.sarasachipworkshop.picture") - ctx.save_win_artifact(app, WinCategory.Application, "sarasacw-picture") - ctx.save_mac_artifact(app, MacCategory.Application, "sarasacw-picture") + env.save_fd_artifact(app, FdContext.Applications, "org.sarasachipworkshop.picture") + env.save_win_artifact(app, WinCategory.Application, "sarasacw-picture") + env.save_mac_artifact(app, MacCategory.Application, "sarasacw-picture") 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 76749e9..fdd96e9 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py @@ -1,44 +1,43 @@ import PIL.Image import PIL.ImageEnhance -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 -from ..assemblicon.artproc import ( +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory +from ..assemblicon.highlevel.utils import Artifact +from ..assemblicon.geometry import Rectangle, Point +from ..assemblicon.lowlevel.artproc import ( aspect_ratio_scale_and_crop, VerticalAnchor, HorizontalAnchor, ) -def build_mimetype_icons(ctx: AdvancedContext) -> None: - _build_image_icons(ctx) +def register(ctx: AuroraContext) -> None: + ctx.register("nostd/mimetype/image-jpeg", (), _build_image_icons) -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() +IMAGE_INNER_RECT = Rectangle(Point(20 * 4, 52 * 4), Point(236 * 4, 204 * 4)) -def _build_image_icons(ctx: AdvancedContext) -> None: +def _build_image_icons(env: AuroraEnvironment) -> None: # build image base - image_base = ctx.render_svg_then_load( - ctx.input_artifact("component", "image-base.svg"), + image_base = env.render_svg_then_load( + env.input_artifact("component", "image-base.svg"), ) # load image base with image_base: - _build_jpg_icon(ctx, image_base) + _build_jpg_icon(env, image_base) -def _build_jpg_icon(ctx: AdvancedContext, base: Artifact) -> None: +def _build_jpg_icon(env: AuroraEnvironment, base: Artifact) -> None: jpg_image = base.copy() - jpg_image_inner = load_input_artifact( - ctx.input_artifact("ext", "bitmap", "Niinsaare_järv.jpg") + jpg_image_inner = env.load_input_bitmap_artifact( + "ext", "bitmap", "Niinsaare_järv.jpg" ) with jpg_image_inner: # crop the area which is interested by ourselves - interest_area = PosSizeRect(2700, 0, 5016, 3888).to_min_max_rect() - crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_pillow_tuple()) + interest_area = Rectangle.from_pos_size_rect(Point(2700, 0), 5016, 3888) + crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_tuple()) # do a flip flip_jpg_image_inner = crop_jpg_image_inner.transpose( PIL.Image.Transpose.FLIP_LEFT_RIGHT @@ -50,24 +49,20 @@ def _build_jpg_icon(ctx: AdvancedContext, base: Artifact) -> None: # fit to inner rect bestfit_jpg_image_inner = aspect_ratio_scale_and_crop( saturated_jpg_image_inner, - IMAGE_INNER_RECT_POSSIZE.width, - IMAGE_INNER_RECT_POSSIZE.height, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, PIL.Image.Resampling.NEAREST, HorizontalAnchor.Center, VerticalAnchor.Center, ) # paste into inner rect - jpg_image.paste( - bestfit_jpg_image_inner, IMAGE_INNER_RECT_POSSIZE.to_pillow_tuple() - ) - + jpg_image.paste(bestfit_jpg_image_inner, IMAGE_INNER_RECT.to_tuple()) + # build artifacts # save as temporary for future use - ctx.save_temporary_artifact(jpg_image, "image-jpeg.png") + env.save_temporary_artifact(jpg_image, "image-jpeg.png") # 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") + env.save_fd_artifact(jpg_image, FdContext.MimeTypes, "image-jpeg") # save for windows and mac - ctx.save_win_artifact(jpg_image, WinCategory.Extension, "jpg") - ctx.save_mac_artifact(jpg_image, MacCategory.Extension, "jpg") + env.save_win_artifact(jpg_image, WinCategory.Extension, "jpg") + env.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 83818a3..6806ea5 100644 --- a/tool/src/aurora_iconset_builder/std_icons/__init__.py +++ b/tool/src/aurora_iconset_builder/std_icons/__init__.py @@ -1,8 +1,8 @@ -from ..assemblicon.highlevel.context import Context -from .action_icons import build_action_icons -from .status_icons import build_status_icons +from ..types import AuroraContext +from . import action_icons, status_icons, mimetype_icons -def register(ctx: Context) -> None: - build_action_icons(ctx) - build_status_icons(ctx) +def register(ctx: AuroraContext) -> None: + action_icons.register(ctx) + mimetype_icons.register(ctx) + status_icons.register(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 3643049..746bba6 100644 --- a/tool/src/aurora_iconset_builder/std_icons/action_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/action_icons.py @@ -1,28 +1,31 @@ import PIL.Image -from ..assemblicon.context import AdvancedContext, FdContext -from ..assemblicon.utils import Artifact +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext +from ..assemblicon.highlevel.utils import Artifact -def build_action_icons(ctx: AdvancedContext) -> None: - _build_go_icons(ctx) +def register(ctx: AuroraContext) -> None: + ctx.register("std/action/go-[previous|down|next|up]", (), build_go_icons) - _build_object_flip_icons(ctx) - _build_object_rotate_icons(ctx) + ctx.register("std/action/object-flip-*", (), build_object_flip_icons) + ctx.register("std/action/object-rotate-*", (), build_object_rotate_icons) - _build_zoom_origin_and_fit_best_icons(ctx) - _build_zoom_in_out_icons(ctx) + ctx.register( + "std/action/zoom-[original|fit-best]", (), build_zoom_origin_and_fit_best_icons + ) + ctx.register("std/action/zoom-[in|out]", (), build_zoom_in_out_icons) -def _build_go_icons(ctx: AdvancedContext) -> None: +def build_go_icons(env: AuroraEnvironment) -> None: # build go-* base - go_base = ctx.render_svg_then_load(ctx.input_artifact("component", "go-base.svg")) + go_base = env.render_svg_then_load(env.input_artifact("component", "go-base.svg")) # build go-* shining - go_inner_shining = ctx.render_svg_then_load( - ctx.input_artifact("component", "go-inner-shining.svg"), + go_inner_shining = env.render_svg_then_load( + env.input_artifact("component", "go-inner-shining.svg"), ) # build go-* inner - go_inner = ctx.render_svg_then_load( - ctx.input_artifact("component", "go-inner.svg"), + go_inner = env.render_svg_then_load( + env.input_artifact("component", "go-inner.svg"), ) with go_base, go_inner_shining, go_inner: @@ -33,71 +36,71 @@ def _build_go_icons(ctx: AdvancedContext) -> None: go.paste(go_inner_shining, (0, 0), go_mask) # save as FD action - ctx.save_fd_artifact(go, FdContext.Actions, f"go-{part}") + env.save_fd_artifact(go, FdContext.Actions, f"go-{part}") # rotate it for next calling go_mask = go_mask.transpose(PIL.Image.Transpose.ROTATE_90) -def _build_object_flip_icons(ctx: AdvancedContext) -> None: - art = ctx.render_svg_then_load(ctx.input_artifact("object-flip-horizontal.svg")) +def build_object_flip_icons(env: AuroraEnvironment) -> None: + art = env.render_svg_then_load(env.input_artifact("object-flip-horizontal.svg")) with art: - ctx.save_fd_artifact(art, FdContext.Actions, "object-flip-horizontal") - art = ctx.render_svg_then_load(ctx.input_artifact("object-flip-vertical.svg")) + env.save_fd_artifact(art, FdContext.Actions, "object-flip-horizontal") + art = env.render_svg_then_load(env.input_artifact("object-flip-vertical.svg")) with art: - ctx.save_fd_artifact(art, FdContext.Actions, "object-flip-vertical") + env.save_fd_artifact(art, FdContext.Actions, "object-flip-vertical") -def _build_object_rotate_icons(ctx: AdvancedContext) -> None: - art = ctx.render_svg_then_load(ctx.input_artifact("object-rotate-left.svg")) +def build_object_rotate_icons(env: AuroraEnvironment) -> None: + art = env.render_svg_then_load(env.input_artifact("object-rotate-left.svg")) with art: - ctx.save_fd_artifact(art, FdContext.Actions, "object-rotate-left") - art = ctx.render_svg_then_load(ctx.input_artifact("object-rotate-right.svg")) + env.save_fd_artifact(art, FdContext.Actions, "object-rotate-left") + art = env.render_svg_then_load(env.input_artifact("object-rotate-right.svg")) with art: - ctx.save_fd_artifact(art, FdContext.Actions, "object-rotate-right") + env.save_fd_artifact(art, FdContext.Actions, "object-rotate-right") -def _build_zoom_origin_and_fit_best_icons(ctx: AdvancedContext) -> None: +def build_zoom_origin_and_fit_best_icons(env: AuroraEnvironment) -> None: # load triangle assets - triangle = ctx.render_svg_then_load(ctx.input_artifact("component", "triangle.svg")) - background = ctx.render_svg_then_load( - ctx.input_artifact("component", "background.svg") + triangle = env.render_svg_then_load(env.input_artifact("component", "triangle.svg")) + background = env.render_svg_then_load( + env.input_artifact("component", "background.svg") ) # create 4 triangle icons for following building - triangle_left = ctx.new_artifact() + triangle_left = env.new_artifact() triangle_left.paste(background, (0, 0), triangle) triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) - triangle_down = ctx.new_artifact() + triangle_down = env.new_artifact() triangle_down.paste(background, (0, 0), triangle) triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) - triangle_right = ctx.new_artifact() + triangle_right = env.new_artifact() triangle_right.paste(background, (0, 0), triangle) triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) - triangle_up = ctx.new_artifact() + triangle_up = env.new_artifact() triangle_up.paste(background, (0, 0), triangle) # save them for reuse - ctx.save_temporary_artifact(triangle_left, "triangle-left.png") - ctx.save_temporary_artifact(triangle_down, "triangle-down.png") - ctx.save_temporary_artifact(triangle_right, "triangle-right.png") - ctx.save_temporary_artifact(triangle_up, "triangle-up.png") + env.save_temporary_artifact(triangle_left, "triangle-left.png") + env.save_temporary_artifact(triangle_down, "triangle-down.png") + env.save_temporary_artifact(triangle_right, "triangle-right.png") + env.save_temporary_artifact(triangle_up, "triangle-up.png") # build icons with triangle_left, triangle_down, triangle_right, triangle_up: - _build_zoom_origin_icon( - ctx, triangle_left, triangle_down, triangle_right, triangle_up + build_zoom_origin_icon( + env, triangle_left, triangle_down, triangle_right, triangle_up ) - _build_zoom_fit_best_icon( - ctx, triangle_left, triangle_down, triangle_right, triangle_up + build_zoom_fit_best_icon( + env, triangle_left, triangle_down, triangle_right, triangle_up ) -def _build_zoom_origin_icon( - ctx: AdvancedContext, +def build_zoom_origin_icon( + env: AuroraEnvironment, triangle_left: Artifact, triangle_down: Artifact, triangle_right: Artifact, @@ -107,8 +110,8 @@ def _build_zoom_origin_icon( pass -def _build_zoom_fit_best_icon( - ctx: AdvancedContext, +def build_zoom_fit_best_icon( + env: AuroraEnvironment, triangle_left: Artifact, triangle_down: Artifact, triangle_right: Artifact, @@ -118,5 +121,5 @@ def _build_zoom_fit_best_icon( pass -def _build_zoom_in_out_icons(ctx: AdvancedContext) -> None: +def build_zoom_in_out_icons(env: AuroraEnvironment) -> None: pass diff --git a/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py new file mode 100644 index 0000000..7ba8ec8 --- /dev/null +++ b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py @@ -0,0 +1,15 @@ +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext + + +def register(ctx: AuroraContext) -> None: + ctx.register( + "std/status/dialog-*", ("nostd/mimetype/image-jpeg"), build_image_x_generic + ) + + +def build_image_x_generic(env: AuroraEnvironment) -> None: + # use image/jpeg as the default image icon + env.dup_fd_artifact( + FdContext.MimeTypes, "image-jpeg", FdContext.MimeTypes, "image-x-generic" + ) diff --git a/tool/src/aurora_iconset_builder/std_icons/status_icons.py b/tool/src/aurora_iconset_builder/std_icons/status_icons.py index b924466..b9f86c4 100644 --- a/tool/src/aurora_iconset_builder/std_icons/status_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/status_icons.py @@ -1,29 +1,32 @@ -from ..assemblicon.context import AdvancedContext, FdContext +from ..types import AuroraContext, AuroraEnvironment +from ..assemblicon.highlevel.environment import FdContext -def build_status_icons(ctx: AdvancedContext) -> None: - _build_dialog_icons(ctx) +def register(ctx: AuroraContext) -> None: + ctx.register("std/status/dialog-*", (), build_dialog_icons) -def _build_dialog_icons(ctx: AdvancedContext) -> None: +def build_dialog_icons(env: AuroraEnvironment) -> None: # save dialog icon with FreeDesktop icon and temp icon for reuse. - art = ctx.render_svg_then_load( - ctx.input_artifact("dialog-infomation.svg"), - ctx.temporary_artifact("dialog-infomation.png"), + art = env.render_svg_then_load( + env.input_artifact("dialog-infomation.svg"), + env.temporary_artifact("dialog-infomation.png"), ) with art: - ctx.save_fd_artifact(art, FdContext.Status, "dialog-infomation") + env.save_fd_artifact(art, FdContext.Status, "dialog-infomation") - art = ctx.render_svg_then_load( - ctx.input_artifact("dialog-warning.svg"), - ctx.temporary_artifact("dialog-warning.png"), + art = env.render_svg_then_load( + env.input_artifact("dialog-warning.svg"), + env.temporary_artifact("dialog-warning.png"), ) with art: - ctx.save_fd_artifact(art, FdContext.Status, "dialog-warning") + env.save_fd_artifact(art, FdContext.Status, "dialog-warning") - art = ctx.render_svg_then_load( - ctx.input_artifact("dialog-error.svg"), - ctx.temporary_artifact("dialog-error.png"), + art = env.render_svg_then_load( + env.input_artifact("dialog-error.svg"), + env.temporary_artifact("dialog-error.png"), ) with art: - ctx.save_fd_artifact(art, FdContext.Status, "dialog-error") + env.save_fd_artifact(art, FdContext.Status, "dialog-error") + + # TODO: add dialog-question generation diff --git a/tool/src/aurora_iconset_builder/types.py b/tool/src/aurora_iconset_builder/types.py new file mode 100644 index 0000000..760c5d8 --- /dev/null +++ b/tool/src/aurora_iconset_builder/types.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass +from .assemblicon.highlevel.environment import Environment, Prologue +from .assemblicon.highlevel.context import Context + + +@dataclass(frozen=True) +class AuroraPrologue(Prologue): + """Aurora icon set builder specific prologue""" + + pass + + +type AuroraEnvironment = Environment[AuroraPrologue] +type AuroraContext = Context[AuroraPrologue]