From 54af04a48f4353ba0afcce60f7a21e65cbba35b2 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Tue, 1 Sep 2026 17:09:20 +0800 Subject: [PATCH] feat: add zoom-original --- .../nostd_icons/action_icons.py | 58 +++++++++++++++ .../std_icons/action_icons.py | 70 +++++++++++++++++++ 2 files changed, 128 insertions(+) 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 c71f2e7..18520da 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/action_icons.py @@ -2,6 +2,7 @@ import PIL.Image from ..assemblicon.context import AdvancedContext, FdContext from ..assemblicon.artproc import ( anchor_to_pos, + align_paste, align_alpha_composite, VerticalAnchor, HorizontalAnchor, @@ -10,6 +11,7 @@ from ..assemblicon.artproc import ( def build_action_icons(ctx: AdvancedContext) -> None: _build_image_properties_icon(ctx) + _build_image_zoom_origin_icon(ctx) def _build_image_properties_icon(ctx: AdvancedContext) -> None: @@ -27,3 +29,59 @@ def _build_image_properties_icon(ctx: AdvancedContext) -> None: # save artifact ctx.save_fd_artifact(art, FdContext.Actions, "image-properties") + + +def _build_image_zoom_origin_icon(ctx: AdvancedContext) -> None: + # load triangle assets + triangle_left = ctx.load_temporary_artifact("triangle-left.png").resize( + (300, 300), PIL.Image.Resampling.LANCZOS + ) + triangle_down = ctx.load_temporary_artifact("triangle-down.png").resize( + (300, 300), PIL.Image.Resampling.LANCZOS + ) + triangle_right = ctx.load_temporary_artifact("triangle-right.png").resize( + (300, 300), PIL.Image.Resampling.LANCZOS + ) + triangle_up = ctx.load_temporary_artifact("triangle-up.png").resize( + (300, 300), PIL.Image.Resampling.LANCZOS + ) + + # load inner image + inner = ctx.load_temporary_artifact("image-jpeg.png") + resized_inner = inner.resize((570, 570), PIL.Image.Resampling.LANCZOS) + + # composite this icon + icon = ctx.new_artifact() + align_paste( + icon, + resized_inner, + anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Center), + anchor_to_pos(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), + ) + align_alpha_composite( + icon, + triangle_right, + anchor_to_pos(icon, HorizontalAnchor.Right, VerticalAnchor.Center), + anchor_to_pos(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), + ) + align_alpha_composite( + icon, + triangle_down, + anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Bottom), + anchor_to_pos(triangle_down, HorizontalAnchor.Center, VerticalAnchor.Bottom), + ) + + # save it + ctx.save_fd_artifact(icon, FdContext.Actions, "image-zoom-original") 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 fbeb4cd..3643049 100644 --- a/tool/src/aurora_iconset_builder/std_icons/action_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/action_icons.py @@ -1,12 +1,17 @@ import PIL.Image from ..assemblicon.context import AdvancedContext, FdContext +from ..assemblicon.utils import Artifact def build_action_icons(ctx: AdvancedContext) -> None: _build_go_icons(ctx) + _build_object_flip_icons(ctx) _build_object_rotate_icons(ctx) + _build_zoom_origin_and_fit_best_icons(ctx) + _build_zoom_in_out_icons(ctx) + def _build_go_icons(ctx: AdvancedContext) -> None: # build go-* base @@ -50,3 +55,68 @@ def _build_object_rotate_icons(ctx: AdvancedContext) -> None: art = ctx.render_svg_then_load(ctx.input_artifact("object-rotate-right.svg")) with art: ctx.save_fd_artifact(art, FdContext.Actions, "object-rotate-right") + + +def _build_zoom_origin_and_fit_best_icons(ctx: AdvancedContext) -> 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") + ) + + # create 4 triangle icons for following building + triangle_left = ctx.new_artifact() + triangle_left.paste(background, (0, 0), triangle) + triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) + + triangle_down = ctx.new_artifact() + triangle_down.paste(background, (0, 0), triangle) + triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) + + triangle_right = ctx.new_artifact() + triangle_right.paste(background, (0, 0), triangle) + triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) + + triangle_up = ctx.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") + + # 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_fit_best_icon( + ctx, triangle_left, triangle_down, triangle_right, triangle_up + ) + + +def _build_zoom_origin_icon( + ctx: AdvancedContext, + triangle_left: Artifact, + triangle_down: Artifact, + triangle_right: Artifact, + triangle_up: Artifact, +) -> None: + # TODO: finihs this in future + pass + + +def _build_zoom_fit_best_icon( + ctx: AdvancedContext, + triangle_left: Artifact, + triangle_down: Artifact, + triangle_right: Artifact, + triangle_up: Artifact, +) -> None: + # TODO: finihs this in future + pass + + +def _build_zoom_in_out_icons(ctx: AdvancedContext) -> None: + pass