feat: imagegen2 아이콘·글리프·일러스트 생성 후 GUI 전면 적용 (투명 배경)
codex noninteractive + imagegen2로 앱 비주얼 에셋 일괄 생성, 코드 생성 차단 (gen-one.sh: FORBID 블록 + 코드파일 감지 + 재시도). 모든 산출물은 플러드필 배경 제거로 진짜 알파 투명 PNG화. 생성 에셋 (assets-gen/): - app-master: 앱 아이콘 마스터 (사이클 화살표, 솔리드 타일 유지) - 카테고리 글리프 8종: image/video/audio/document/data/vector/archive/ai - 일러스트 2종: illus-empty(드롭존), illus-done(완료) - logo-mark: 브랜드 마크 GUI 적용: - 사이드바 헤더 브랜드 → logo-mark - 드롭존 빈 상태 → illus-empty - QuickProgressWindow 완료 → illus-done - AI 작업 패널 → glyph-ai 스파클 - 큐/과거결과 행 라벨 아이콘 → 카테고리 글리프 (CategoryGlyphs 매핑) - 미리보기 placeholder → 형식별 카테고리 글리프 (경고 대신) 앱 아이콘: - app.ico (멀티 크기 16~256) + 윈도우 Icon - MSIX 타일 4종(Square44/150·Wide310·Store) app-master 기반 갱신 - Package 버전 1.0.2.0
This commit is contained in:
parent
ef10c139cd
commit
acb3fdbfd1
37 changed files with 189 additions and 34 deletions
63
src/Everything2Everything.App/Views/CategoryGlyphs.cs
Normal file
63
src/Everything2Everything.App/Views/CategoryGlyphs.cs
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace Everything2Everything.App.Views;
|
||||
|
||||
/// <summary>
|
||||
/// 파일 확장자 → 카테고리 글리프(imagegen2 생성 PNG) 매핑.
|
||||
/// 큐 행·미리보기 placeholder 등에서 형식을 한눈에 보여주기 위해 사용한다.
|
||||
/// </summary>
|
||||
public static class CategoryGlyphs
|
||||
{
|
||||
private static readonly Dictionary<string, string> ExtToCategory = new(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
// image
|
||||
[".jpg"] = "image", [".jpeg"] = "image", [".jpe"] = "image", [".png"] = "image",
|
||||
[".webp"] = "image", [".avif"] = "image", [".bmp"] = "image", [".tif"] = "image",
|
||||
[".tiff"] = "image", [".gif"] = "image", [".heic"] = "image", [".heif"] = "image",
|
||||
[".cr2"] = "image", [".nef"] = "image", [".arw"] = "image", [".dng"] = "image", [".raw"] = "image",
|
||||
// vector
|
||||
[".svg"] = "vector", [".eps"] = "vector", [".ai"] = "vector",
|
||||
// video
|
||||
[".mp4"] = "video", [".webm"] = "video", [".mkv"] = "video", [".mov"] = "video", [".avi"] = "video",
|
||||
// audio
|
||||
[".mp3"] = "audio", [".aac"] = "audio", [".m4a"] = "audio", [".opus"] = "audio",
|
||||
[".ogg"] = "audio", [".flac"] = "audio", [".wav"] = "audio",
|
||||
// document
|
||||
[".pdf"] = "document", [".docx"] = "document", [".doc"] = "document",
|
||||
[".hwp"] = "document", [".hwpx"] = "document", [".html"] = "document", [".htm"] = "document",
|
||||
[".md"] = "document", [".txt"] = "document", [".rtf"] = "document",
|
||||
// data
|
||||
[".csv"] = "data", [".json"] = "data", [".xlsx"] = "data", [".xls"] = "data",
|
||||
[".tsv"] = "data", [".xml"] = "data", [".yaml"] = "data", [".yml"] = "data",
|
||||
// archive
|
||||
[".zip"] = "archive", [".7z"] = "archive", [".rar"] = "archive",
|
||||
[".tar"] = "archive", [".gz"] = "archive",
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, ImageSource> Cache = new(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
/// <summary>확장자(.jpg 등)에 해당하는 카테고리 글리프 이미지. 매핑이 없으면 document로 폴백.</summary>
|
||||
public static ImageSource ForExtension(string? extension)
|
||||
{
|
||||
var ext = string.IsNullOrWhiteSpace(extension) ? "" : extension.Trim();
|
||||
if (ext.Length > 0 && ext[0] != '.') ext = "." + ext;
|
||||
var category = ExtToCategory.TryGetValue(ext, out var c) ? c : "document";
|
||||
return ForCategory(category);
|
||||
}
|
||||
|
||||
/// <summary>카테고리명(image/video/audio/document/data/vector/archive/ai)에 해당하는 글리프.</summary>
|
||||
public static ImageSource ForCategory(string category)
|
||||
{
|
||||
if (Cache.TryGetValue(category, out var cached)) return cached;
|
||||
var uri = new Uri($"pack://application:,,,/Assets/glyph-{category}.png", UriKind.Absolute);
|
||||
var img = new BitmapImage();
|
||||
img.BeginInit();
|
||||
img.CacheOption = BitmapCacheOption.OnLoad;
|
||||
img.UriSource = uri;
|
||||
img.EndInit();
|
||||
img.Freeze();
|
||||
Cache[category] = img;
|
||||
return img;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue