refactor: fix aurora icon build error
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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