refactor: fix aurora icon build error
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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 .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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
_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
|
||||
|
||||
@@ -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]
|
||||
Reference in New Issue
Block a user