AppKit → 한선씨 이관 후보 리스트업 (2026-07-17)
사장님 지시: "AppKit 기능도 하나씩 숙지하면서 더 빠르고 더 코드 효율적으로 한선씨로 끌어올 수 있는 기능들 리스트업."
근거: 신셸 5모듈 전수 인벤토리(병렬 에이전트 3기 — chrome/panels/overlays·content+헤더·engine) + 탭드래그 디버깅 실측(같은 날).
1. 인벤토리 요약 (신셸이 실제 쓰는 AppKit)
| 카테고리 | 사용처 | 규모 |
|---|
| 수동 frame 레이아웃 | 전 모듈(NSLayoutConstraint 0건, autoresizingMask 5건뿐) | 전면 |
| CALayer 색·코너·보더 | chrome 30+곳, panels/overlays 다수 — 전부 CAColor(토큰) 스칼라 대입 | 전면 |
| NSBezierPath 코드 아이콘 | chrome 6종(뒤로/앞으로/새로고침/별/원호/삼각형)+overlays 행 렌더 | 중 |
| drawRect 수제 렌더 | engine(벡터 표시리스트 — 이미 벡터직결), overlays(메뉴/다이얼로그/히스토리), 런처 카드 | 중 |
| 이벤트 | 탭 드래그 상태기계, keyDown→입력코어.toau, 키모니터, 트래킹에어리어, 롱프레스 | 중 |
| NSTask+파이프 | hanseonc/crownyc 2단 페어 6쌍+, 앱상주서버 상주(TCP 왕복 2~5ms) | 중 |
| WKWebView | content 핵심(브릿지 5종·스킴핸들러·다운로드 KVO·evaluateJS) | 대 |
| 창/타이틀바 | CAWindow(isMovable 동적판정)·고스트창·오버레이 3창·캐스케이드 | 소 |
| 분산노티 IPC | adoptTab(창간 탭이동)·입력소스 감지 | 소 |
| 토스트/다운로드바 | 뷰 조립+타이머(진행바도 CALayer 수제 — NSProgressIndicator 미사용) | 소 |
관찰: 이 셸은 표준 AppKit 위젯 의존이 이미 최소(제약레이아웃 0, 시스템 프로그레스바 0, NSAlert 0, 메뉴도 수제) — "좌표·색·패스 계산"과 "OS 통합"이 분리돼 있어 이관에 유리한 형태.
2. 이관 판정 (4상)
티 — 지금 끌어올 것 (우선 5, 효과 큰 순)
- 탭바·툴바·북마크바 레이아웃 수식 →
브라우저크롬.한선 확장(기존 자산). ObjC는 결과 rect 적용만. 탭폭 2단축소·3단 적응·옴니 우선순위 축소(오늘 N9) 같은 규칙이 전부 순수 산술 — 한선씨 이관 시 규칙 재사용+창세대(win32/CrownyOS) 공유. 크기: 중.
- 탭 드래그 4상 판정 자산화 — 오늘 검증된 규칙(선택=티/분리진입 dy40·dx80·outside=옴/자기밴드 드롭=타 취소/타겟판정=창간이동·tear-off)을 셀코어 룰+한선씨 함수로. ObjC는 이벤트 수신·창 API만. 크기: 소. learn 등록 대상.
- 아이콘 벡터패스 6종 →
.cifv 벡터글리프로 이관 — engine에 CGPath 캐시·직결렌더가 이미 있음(1627~1747). NSBezierPath 코드 삭제, 아이콘=데이터. 크기: 소.
- 토스트·다운로드바 UI 명세 → 뷰.한선 위젯 기술(레이아웃+색 전부 토큰 산술, 로직=타이머·스택뿐). ObjC는 NSView 호스팅만. 크기: 소~중.
- overlays 수제 메뉴/다이얼로그/히스토리 행 렌더 → 한선씨 표시리스트 발행 → engine drawRect 소비(벡터직결 경로 재사용). 이미 drawRect 수제라 시스템 룩 손실 0. 크기: 중.
옴 — 조건부 (선행 필요)
- 옴니/설정 텍스트 입력: engine의 자체 입력경로(keyDown→입력코어.toau ~10ms)가 선례 — 필드에디터 대체엔 IME 조합·선택·클립보드 보강 필요.
- 집사 도킹 UI: 말풍선/칩 레이아웃은 티 후보나, NSTextView 자동높이 의존 — 텍스트측정 opcode 보강 후.
- 다운로드 진행 KVO→UI: UI는 티 1~4에 흡수, NSProgress KVO 수신부만 ObjC 잔류.
타 — ObjC 잔류 (OS 통합이 정답)
창/타이틀바/isMovable 동적판정(오늘 교훈: 이벤트 순서 의존 우회 불가)·이벤트 수신(mouseDown/keyDown 원천)·트래킹에어리어·IME/입력소스(분산노티 감지)·WKWebView와 그 브릿지·NSTask 스폰 자체·분산노티 송수신 API·접근성·고스트창 등 NSWindow 계열.
3. 선례 정합 (중복 구축 방지)
- 벡터직결 실물 = crowny-ai-engine.m(한선씨 표시리스트→CG 드로우, sendVectorEvent 왕복 실측) + 앱상주서버.한선(1327줄).
- 크롬 위젯 한선씨 = 브라우저크롬.한선(기존), 한선씨웹엔진.한선, libs/뷰.한선·HAL크라우니.한선.
- Path B(완전 커스텀 렌더)는 별도 장기 트랙 — 본 리스트는 Path A 신셸의 점진 이관.
4. 다음 스텝 (권장 순서)
티2(드래그 판정 자산화, 소) → 티3(아이콘 글리프, 소) → 티1(크롬 레이아웃, 중) → 티4(토스트/바, 소~중) → 티5(오버레이 렌더, 중).
크라우니코드 보고줄
lookup: "브라우저크롬"·"뷰"·"레이아웃" 등 기존 자산 확인(브라우저크롬.한선·뷰.한선 HIT — 재사용 전제로 판정). 이 문서=판정 산출물(코드 생성 없음).