Skip to content

캔버스 설정 (예정)

이 문서는 앞으로 추가될 드로잉 / 레이저 포인터 / 강조(Annotation) 기능의 사전 기획 초안입니다. 실제 UI 및 API 는 구현 과정에서 일부 변경될 수 있습니다.

목표

프리젠테이션, 강의, 라이브 코드 리뷰 중 화면 위에 실시간으로 그리거나 강조할 수 있는 레이어 제공. OBS/Zoom 공유 화면 위에서도 자연스럽게 표시.

예상 기능 목록

기능설명세부 옵션 (초안)
펜 (Pen)자유 곡선 드로잉색상, 두께, 불투명도, 부드럽기(smoothing)
형광펜 (Highlighter)반투명 굵은 스트로크색상, 두께, 혼합모드(multiply)
레이저 포인터임시 점 + 잔상(Trail)색상, 잔상 길이, 페이드 속도
도형직선, 사각형, 타원테두리/채움 색상, 투명도, Shift 비율 잠금
화살표방향 강조두께, 머리 크기, 채움 여부
번호 마커클릭 순서 번호 찍기색상, 크기, 자동증가/리셋
스포트라이트화면 어둡게 + 원형/사각형 영역만 강조반경, 테두리 흐림, 투명도
지우개드로잉 요소 제거전체/영역/최근 1개
되돌리기/재실행드로잉 스택 관리최대 히스토리 깊이
프리셋도구 + 스타일 묶음 저장이름, 단축키 지정

기술 설계 초안

항목선택지메모
렌더링HTML Canvas 2D초기 단순 구현; 성능 이슈 시 WebGL 고려
구조도형 엔티티 리스트 + 렌더 루프변환/히트 테스트 용이
좌표디스플레이 개별 overlay 창 기준멀티 모니터 분리 관리
저장세션 임시 메모리 (필요 시 export)PNG 투명배경 / JSON 벡터
IPCController ↔ Main ↔ Overlay도구/스타일 변경 브로드캐스트
단축키글로벌/포커스 구분충돌 방지 (Ctrl+Z 등)

예상 상태 모델 (초안 TypeScript 인터페이스)

ts
interface CanvasToolState {
	activeTool: 'pen' | 'highlighter' | 'arrow' | 'shape' | 'marker' | 'spotlight' | 'eraser';
	color: string;            // RGBA 또는 Hex
	thickness: number;        // px
	opacity: number;          // 0~1
	smoothing: number;        // 0~1 (펜 곡선 보정)
	highlightBlend: boolean;  // 혼합 모드 여부
	spotlight?: { radius: number; dimOpacity: number; shape: 'circle' | 'rect' };
	marker?: { autoIncrement: boolean; nextIndex: number };
}

interface CanvasShape {
	id: string;
	type: 'stroke' | 'rect' | 'ellipse' | 'arrow' | 'marker';
	points: { x: number; y: number; }[]; // stroke/polyline
	style: { color: string; thickness: number; opacity: number; fill?: string };
	meta?: any;
}

성능 고려

  • 펜 스트로크: 포인트 단위 → 일정 거리/각도 이하 포인트 단순화 (Ramer–Douglas–Peucker)
  • 레이저 포인터: 잔상은 큐 구조 + 매 프레임 알파 감소 후 제거
  • Undo/Redo: 명령 스택 (Command Pattern) 또는 immutable snapshot (메모리 비용 고려)
  • 멀티 모니터: 각 Overlay 개별 캔버스 → 동시 드로잉 필요 시 브로드캐스트

보안/제한

  • 글로벌 마우스 후킹 이미 존재 → 도구 활성 시 커서 하이라이트와 충돌 가능성 → 모드 전환 UX 필요
  • OS 가속/하드웨어 합성에 따라 투명창 캔버스 성능 차이 발생 가능

UI 초안(컨트롤러 탭 추가)

┌ Canvas 설정 ────────────────────────┐
│ [펜] [형광펜] [화살표] [도형] [레이저] [스포트라이트] [번호] [지우개] │
│ 색상 ●  굵기 ▢▢▢  불투명도 [====]  스무딩 [==]  프리셋 ▼              │
│ 도구별 추가 옵션 패널 (예: 스포트라이트 반경 슬라이더 등)         │
└──────────────────────────────────────┘

로드맵 제안 단계

단계범위산출물
1Pen + Highlighter + UndoMVP 드로잉 기능
2Arrow + Shapes + Export기본 주석 완성
3Spotlight + Marker발표/강의 집중 기능
4Preset + Shortcuts생산성 개선
5레코딩 연동 / OBS Scene Guide배포/홍보 강화

피드백 요청

필요/우선순위가 높은 도구 또는 워크플로를 Issue 로 제안해주세요. 실제 사용 사례(예: CS 강의, UI 리뷰, 라이브 디버깅) 공유 환영.

관련 파일 예정

파일 (예정)역할
canvas-state.ts도구/도형 상태 관리 (store)
canvas-renderer.tsx캔버스 React 컴포넌트
canvas-ipc.tsIPC 채널 (도구 변경/드로잉 동기화)
canvas-utils.ts좌표 변환, 단순화 알고리즘

Released under the EULA License