refactor: fix aurora icon build error

This commit is contained in:
2026-09-02 14:07:57 +08:00
parent 63ba6d44f7
commit 988a9fc04f
11 changed files with 242 additions and 193 deletions
+4 -40
View File
@@ -1,50 +1,14 @@
from pathlib import Path from pathlib import Path
from dataclasses import dataclass from .assemblicon.highlevel.environment import Environment
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.context import Context from .assemblicon.highlevel.context import Context
from .assemblicon.logger import APP_LOGGER as LOGGER from .assemblicon.logger import APP_LOGGER as LOGGER
from .cli import parse
from .types import AuroraPrologue
from . import std_icons, nostd_icons 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: def main() -> None:
opts = parse_opts() opts = parse()
repository_root = Path(__file__).resolve().parent.parent.parent.parent repository_root = Path(__file__).resolve().parent.parent.parent.parent
iconset_input = repository_root / "src" iconset_input = repository_root / "src"
+31
View File
@@ -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()
)
@@ -1,10 +1,8 @@
from ..assemblicon.highlevel.context import Context from ..types import AuroraContext
from .action_icons import build_action_icons from . import action_icons, application_icons, mimetype_icons
from .mimetype_icons import build_mimetype_icons
from .application_icons import build_application_icons
def register(ctx: Context) -> None: def register(ctx: AuroraContext) -> None:
build_mimetype_icons(ctx) action_icons.register(ctx)
build_application_icons(ctx) application_icons.register(ctx)
build_action_icons(ctx) mimetype_icons.register(ctx)
@@ -1,7 +1,8 @@
import PIL.Image import PIL.Image
from ..assemblicon.context import AdvancedContext, FdContext from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.artproc import ( from ..assemblicon.highlevel.environment import FdContext
anchor_to_pos, from ..assemblicon.lowlevel.artproc import (
art_anchor_to_offset,
align_paste, align_paste,
align_alpha_composite, align_alpha_composite,
VerticalAnchor, VerticalAnchor,
@@ -9,79 +10,97 @@ from ..assemblicon.artproc import (
) )
def build_action_icons(ctx: AdvancedContext) -> None: def register(ctx: AuroraContext) -> None:
_build_image_properties_icon(ctx) ctx.register(
_build_image_zoom_origin_icon(ctx) "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: def _build_image_properties_icon(env: AuroraEnvironment) -> None:
art = ctx.load_temporary_artifact("image-jpeg.png") 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) resized_info_mark = info_mark.resize((500, 500), PIL.Image.Resampling.LANCZOS)
align_alpha_composite( align_alpha_composite(
art, art,
resized_info_mark, resized_info_mark,
anchor_to_pos(art, HorizontalAnchor.Right, VerticalAnchor.Bottom), art_anchor_to_offset(art, HorizontalAnchor.Right, VerticalAnchor.Bottom),
anchor_to_pos(resized_info_mark, HorizontalAnchor.Right, VerticalAnchor.Bottom), art_anchor_to_offset(
resized_info_mark, HorizontalAnchor.Right, VerticalAnchor.Bottom
),
) )
# save artifact # 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 # 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 (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 (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 (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 (300, 300), PIL.Image.Resampling.LANCZOS
) )
# load inner image # 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) resized_inner = inner.resize((570, 570), PIL.Image.Resampling.LANCZOS)
# composite this icon # composite this icon
icon = ctx.new_artifact() icon = env.new_artifact()
align_paste( align_paste(
icon, icon,
resized_inner, resized_inner,
anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Center), art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Center),
anchor_to_pos(resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center), art_anchor_to_offset(
resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center
),
) )
align_alpha_composite( align_alpha_composite(
icon, icon,
triangle_left, triangle_left,
anchor_to_pos(icon, HorizontalAnchor.Left, VerticalAnchor.Center), art_anchor_to_offset(icon, HorizontalAnchor.Left, VerticalAnchor.Center),
anchor_to_pos(triangle_left, HorizontalAnchor.Left, VerticalAnchor.Center), art_anchor_to_offset(
triangle_left, HorizontalAnchor.Left, VerticalAnchor.Center
),
) )
align_alpha_composite( align_alpha_composite(
icon, icon,
triangle_right, triangle_right,
anchor_to_pos(icon, HorizontalAnchor.Right, VerticalAnchor.Center), art_anchor_to_offset(icon, HorizontalAnchor.Right, VerticalAnchor.Center),
anchor_to_pos(triangle_right, HorizontalAnchor.Right, VerticalAnchor.Center), art_anchor_to_offset(
triangle_right, HorizontalAnchor.Right, VerticalAnchor.Center
),
) )
align_alpha_composite( align_alpha_composite(
icon, icon,
triangle_up, triangle_up,
anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Top), art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Top),
anchor_to_pos(triangle_up, HorizontalAnchor.Center, VerticalAnchor.Top), art_anchor_to_offset(triangle_up, HorizontalAnchor.Center, VerticalAnchor.Top),
) )
align_alpha_composite( align_alpha_composite(
icon, icon,
triangle_down, triangle_down,
anchor_to_pos(icon, HorizontalAnchor.Center, VerticalAnchor.Bottom), art_anchor_to_offset(icon, HorizontalAnchor.Center, VerticalAnchor.Bottom),
anchor_to_pos(triangle_down, HorizontalAnchor.Center, VerticalAnchor.Bottom), art_anchor_to_offset(
triangle_down, HorizontalAnchor.Center, VerticalAnchor.Bottom
),
) )
# save it # save it
ctx.save_fd_artifact(icon, FdContext.Actions, "image-zoom-original") env.save_fd_artifact(icon, FdContext.Actions, "image-zoom-original")
@@ -1,35 +1,42 @@
import PIL.Image import PIL.Image
from ..assemblicon.context import AdvancedContext, FdContext, WinCategory, MacCategory from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.artproc import ( from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory
anchor_to_pos, from ..assemblicon.lowlevel.artproc import (
art_anchor_to_offset,
align_paste, align_paste,
VerticalAnchor, VerticalAnchor,
HorizontalAnchor, HorizontalAnchor,
) )
def build_application_icons(ctx: AdvancedContext) -> None: def register(ctx: AuroraContext) -> None:
_build_sarasacw_picture_icons(ctx) ctx.register(
"nostd/application/org.sarasachipworkshop.picture",
("nostd/mimetype/image-jpeg", ),
def _build_sarasacw_picture_icons(ctx: AdvancedContext) -> None: build_sarasacw_picture_icons,
app = ctx.new_artifact()
frame = ctx.render_svg_then_load(
ctx.input_artifact("app", "sarasacw-picture", "app-frame.svg")
) )
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) resized_inner = inner.resize((990, 990), PIL.Image.Resampling.LANCZOS)
align_paste( align_paste(
app, app,
resized_inner, resized_inner,
anchor_to_pos(app, HorizontalAnchor.Center, VerticalAnchor.Center), art_anchor_to_offset(app, HorizontalAnchor.Center, VerticalAnchor.Center),
anchor_to_pos(resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center), art_anchor_to_offset(
resized_inner, HorizontalAnchor.Center, VerticalAnchor.Center
),
) )
app.alpha_composite(frame, (0, 0)) app.alpha_composite(frame, (0, 0))
# save artifact # save artifact
ctx.save_fd_artifact(app, FdContext.Applications, "org.sarasachipworkshop.picture") env.save_fd_artifact(app, FdContext.Applications, "org.sarasachipworkshop.picture")
ctx.save_win_artifact(app, WinCategory.Application, "sarasacw-picture") env.save_win_artifact(app, WinCategory.Application, "sarasacw-picture")
ctx.save_mac_artifact(app, MacCategory.Application, "sarasacw-picture") env.save_mac_artifact(app, MacCategory.Application, "sarasacw-picture")
@@ -1,44 +1,43 @@
import PIL.Image import PIL.Image
import PIL.ImageEnhance import PIL.ImageEnhance
from ..assemblicon.context import AdvancedContext, FdContext, WinCategory, MacCategory from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.utils import Artifact from ..assemblicon.highlevel.environment import FdContext, WinCategory, MacCategory
from ..assemblicon.geometry import MinMaxRect, PosSizeRect from ..assemblicon.highlevel.utils import Artifact
from ..assemblicon.artio import load_input_artifact, save_artifact from ..assemblicon.geometry import Rectangle, Point
from ..assemblicon.artproc import ( from ..assemblicon.lowlevel.artproc import (
aspect_ratio_scale_and_crop, aspect_ratio_scale_and_crop,
VerticalAnchor, VerticalAnchor,
HorizontalAnchor, HorizontalAnchor,
) )
def build_mimetype_icons(ctx: AdvancedContext) -> None: def register(ctx: AuroraContext) -> None:
_build_image_icons(ctx) 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 = Rectangle(Point(20 * 4, 52 * 4), Point(236 * 4, 204 * 4))
IMAGE_INNER_RECT_POSSIZE = IMAGE_INNER_RECT_MINMAX.to_pos_size_rect()
def _build_image_icons(ctx: AdvancedContext) -> None: def _build_image_icons(env: AuroraEnvironment) -> None:
# build image base # build image base
image_base = ctx.render_svg_then_load( image_base = env.render_svg_then_load(
ctx.input_artifact("component", "image-base.svg"), env.input_artifact("component", "image-base.svg"),
) )
# load image base # load image base
with 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 = base.copy()
jpg_image_inner = load_input_artifact( jpg_image_inner = env.load_input_bitmap_artifact(
ctx.input_artifact("ext", "bitmap", "Niinsaare_järv.jpg") "ext", "bitmap", "Niinsaare_järv.jpg"
) )
with jpg_image_inner: with jpg_image_inner:
# crop the area which is interested by ourselves # crop the area which is interested by ourselves
interest_area = PosSizeRect(2700, 0, 5016, 3888).to_min_max_rect() interest_area = Rectangle.from_pos_size_rect(Point(2700, 0), 5016, 3888)
crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_pillow_tuple()) crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_tuple())
# do a flip # do a flip
flip_jpg_image_inner = crop_jpg_image_inner.transpose( flip_jpg_image_inner = crop_jpg_image_inner.transpose(
PIL.Image.Transpose.FLIP_LEFT_RIGHT PIL.Image.Transpose.FLIP_LEFT_RIGHT
@@ -50,24 +49,20 @@ def _build_jpg_icon(ctx: AdvancedContext, base: Artifact) -> None:
# fit to inner rect # fit to inner rect
bestfit_jpg_image_inner = aspect_ratio_scale_and_crop( bestfit_jpg_image_inner = aspect_ratio_scale_and_crop(
saturated_jpg_image_inner, saturated_jpg_image_inner,
IMAGE_INNER_RECT_POSSIZE.width, IMAGE_INNER_RECT.width,
IMAGE_INNER_RECT_POSSIZE.height, IMAGE_INNER_RECT.height,
PIL.Image.Resampling.NEAREST, PIL.Image.Resampling.NEAREST,
HorizontalAnchor.Center, HorizontalAnchor.Center,
VerticalAnchor.Center, VerticalAnchor.Center,
) )
# paste into inner rect # paste into inner rect
jpg_image.paste( jpg_image.paste(bestfit_jpg_image_inner, IMAGE_INNER_RECT.to_tuple())
bestfit_jpg_image_inner, IMAGE_INNER_RECT_POSSIZE.to_pillow_tuple()
)
# build artifacts # build artifacts
# save as temporary for future use # 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 # save for FD
ctx.save_fd_artifact(jpg_image, FdContext.MimeTypes, "image-jpeg") env.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 # save for windows and mac
ctx.save_win_artifact(jpg_image, WinCategory.Extension, "jpg") env.save_win_artifact(jpg_image, WinCategory.Extension, "jpg")
ctx.save_mac_artifact(jpg_image, MacCategory.Extension, "jpg") env.save_mac_artifact(jpg_image, MacCategory.Extension, "jpg")
@@ -1,8 +1,8 @@
from ..assemblicon.highlevel.context import Context from ..types import AuroraContext
from .action_icons import build_action_icons from . import action_icons, status_icons, mimetype_icons
from .status_icons import build_status_icons
def register(ctx: Context) -> None: def register(ctx: AuroraContext) -> None:
build_action_icons(ctx) action_icons.register(ctx)
build_status_icons(ctx) mimetype_icons.register(ctx)
status_icons.register(ctx)
@@ -1,28 +1,31 @@
import PIL.Image import PIL.Image
from ..assemblicon.context import AdvancedContext, FdContext from ..types import AuroraContext, AuroraEnvironment
from ..assemblicon.utils import Artifact from ..assemblicon.highlevel.environment import FdContext
from ..assemblicon.highlevel.utils import Artifact
def build_action_icons(ctx: AdvancedContext) -> None: def register(ctx: AuroraContext) -> None:
_build_go_icons(ctx) ctx.register("std/action/go-[previous|down|next|up]", (), build_go_icons)
_build_object_flip_icons(ctx) ctx.register("std/action/object-flip-*", (), build_object_flip_icons)
_build_object_rotate_icons(ctx) ctx.register("std/action/object-rotate-*", (), build_object_rotate_icons)
_build_zoom_origin_and_fit_best_icons(ctx) ctx.register(
_build_zoom_in_out_icons(ctx) "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 # 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 # build go-* shining
go_inner_shining = ctx.render_svg_then_load( go_inner_shining = env.render_svg_then_load(
ctx.input_artifact("component", "go-inner-shining.svg"), env.input_artifact("component", "go-inner-shining.svg"),
) )
# build go-* inner # build go-* inner
go_inner = ctx.render_svg_then_load( go_inner = env.render_svg_then_load(
ctx.input_artifact("component", "go-inner.svg"), env.input_artifact("component", "go-inner.svg"),
) )
with go_base, go_inner_shining, go_inner: 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) go.paste(go_inner_shining, (0, 0), go_mask)
# save as FD action # 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 # rotate it for next calling
go_mask = go_mask.transpose(PIL.Image.Transpose.ROTATE_90) go_mask = go_mask.transpose(PIL.Image.Transpose.ROTATE_90)
def _build_object_flip_icons(ctx: AdvancedContext) -> None: def build_object_flip_icons(env: AuroraEnvironment) -> None:
art = ctx.render_svg_then_load(ctx.input_artifact("object-flip-horizontal.svg")) art = env.render_svg_then_load(env.input_artifact("object-flip-horizontal.svg"))
with art: with art:
ctx.save_fd_artifact(art, FdContext.Actions, "object-flip-horizontal") env.save_fd_artifact(art, FdContext.Actions, "object-flip-horizontal")
art = ctx.render_svg_then_load(ctx.input_artifact("object-flip-vertical.svg")) art = env.render_svg_then_load(env.input_artifact("object-flip-vertical.svg"))
with art: 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: def build_object_rotate_icons(env: AuroraEnvironment) -> None:
art = ctx.render_svg_then_load(ctx.input_artifact("object-rotate-left.svg")) art = env.render_svg_then_load(env.input_artifact("object-rotate-left.svg"))
with art: with art:
ctx.save_fd_artifact(art, FdContext.Actions, "object-rotate-left") env.save_fd_artifact(art, FdContext.Actions, "object-rotate-left")
art = ctx.render_svg_then_load(ctx.input_artifact("object-rotate-right.svg")) art = env.render_svg_then_load(env.input_artifact("object-rotate-right.svg"))
with art: 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 # load triangle assets
triangle = ctx.render_svg_then_load(ctx.input_artifact("component", "triangle.svg")) triangle = env.render_svg_then_load(env.input_artifact("component", "triangle.svg"))
background = ctx.render_svg_then_load( background = env.render_svg_then_load(
ctx.input_artifact("component", "background.svg") env.input_artifact("component", "background.svg")
) )
# create 4 triangle icons for following building # 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_left.paste(background, (0, 0), triangle)
triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) 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_down.paste(background, (0, 0), triangle)
triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) 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_right.paste(background, (0, 0), triangle)
triangle = triangle.transpose(PIL.Image.Transpose.ROTATE_90) 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) triangle_up.paste(background, (0, 0), triangle)
# save them for reuse # save them for reuse
ctx.save_temporary_artifact(triangle_left, "triangle-left.png") env.save_temporary_artifact(triangle_left, "triangle-left.png")
ctx.save_temporary_artifact(triangle_down, "triangle-down.png") env.save_temporary_artifact(triangle_down, "triangle-down.png")
ctx.save_temporary_artifact(triangle_right, "triangle-right.png") env.save_temporary_artifact(triangle_right, "triangle-right.png")
ctx.save_temporary_artifact(triangle_up, "triangle-up.png") env.save_temporary_artifact(triangle_up, "triangle-up.png")
# build icons # build icons
with triangle_left, triangle_down, triangle_right, triangle_up: with triangle_left, triangle_down, triangle_right, triangle_up:
_build_zoom_origin_icon( build_zoom_origin_icon(
ctx, triangle_left, triangle_down, triangle_right, triangle_up env, triangle_left, triangle_down, triangle_right, triangle_up
) )
_build_zoom_fit_best_icon( build_zoom_fit_best_icon(
ctx, triangle_left, triangle_down, triangle_right, triangle_up env, triangle_left, triangle_down, triangle_right, triangle_up
) )
def _build_zoom_origin_icon( def build_zoom_origin_icon(
ctx: AdvancedContext, env: AuroraEnvironment,
triangle_left: Artifact, triangle_left: Artifact,
triangle_down: Artifact, triangle_down: Artifact,
triangle_right: Artifact, triangle_right: Artifact,
@@ -107,8 +110,8 @@ def _build_zoom_origin_icon(
pass pass
def _build_zoom_fit_best_icon( def build_zoom_fit_best_icon(
ctx: AdvancedContext, env: AuroraEnvironment,
triangle_left: Artifact, triangle_left: Artifact,
triangle_down: Artifact, triangle_down: Artifact,
triangle_right: Artifact, triangle_right: Artifact,
@@ -118,5 +121,5 @@ def _build_zoom_fit_best_icon(
pass pass
def _build_zoom_in_out_icons(ctx: AdvancedContext) -> None: def build_zoom_in_out_icons(env: AuroraEnvironment) -> None:
pass pass
@@ -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"
)
@@ -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: def register(ctx: AuroraContext) -> None:
_build_dialog_icons(ctx) 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. # save dialog icon with FreeDesktop icon and temp icon for reuse.
art = ctx.render_svg_then_load( art = env.render_svg_then_load(
ctx.input_artifact("dialog-infomation.svg"), env.input_artifact("dialog-infomation.svg"),
ctx.temporary_artifact("dialog-infomation.png"), env.temporary_artifact("dialog-infomation.png"),
) )
with art: 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( art = env.render_svg_then_load(
ctx.input_artifact("dialog-warning.svg"), env.input_artifact("dialog-warning.svg"),
ctx.temporary_artifact("dialog-warning.png"), env.temporary_artifact("dialog-warning.png"),
) )
with art: 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( art = env.render_svg_then_load(
ctx.input_artifact("dialog-error.svg"), env.input_artifact("dialog-error.svg"),
ctx.temporary_artifact("dialog-error.png"), env.temporary_artifact("dialog-error.png"),
) )
with art: 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
+14
View File
@@ -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]