MCPcopy
hub / github.com/CapSoftware/Cap / TextSegmentOverlay

Function TextSegmentOverlay

apps/desktop/src/routes/editor/TextOverlay.tsx:180–534  ·  view source on GitHub ↗
(props: {
	size: { width: number; height: number };
	segment: TauriTextSegment;
	index: number;
	isSelected: boolean;
	onSelect: (e: MouseEvent) => void;
	updateSegment: (fn: (segment: TextSegment) => void) => void;
	createMouseDownDrag: <T>(
		setup: () => T,
		update: (
			e: MouseEvent,
			value: T,
			initialMouse: { x: number; y: number },
		) => void,
	) => (downEvent: MouseEvent) => void;
	clamp: (value: number, min: number, max: number) => number;
})

Source from the content-addressed store, hash-verified

178}
179
180function TextSegmentOverlay(props: {
181 size: { width: number; height: number };
182 segment: TauriTextSegment;
183 index: number;
184 isSelected: boolean;
185 onSelect: (e: MouseEvent) => void;
186 updateSegment: (fn: (segment: TextSegment) => void) => void;
187 createMouseDownDrag: <T>(
188 setup: () => T,
189 update: (
190 e: MouseEvent,
191 value: T,
192 initialMouse: { x: number; y: number },
193 ) => void,
194 ) => (downEvent: MouseEvent) => void;
195 clamp: (value: number, min: number, max: number) => number;
196}) {
197 const segment = createMemo(() => normalizeSegment(props.segment));
198 let hiddenMeasureRef: HTMLDivElement | undefined;
199 const [mounted, setMounted] = createSignal(false);
200 const [isResizing, setIsResizing] = createSignal(false);
201 let pendingResizeCleanup: (() => void) | null = null;
202
203 onMount(() => {
204 setMounted(true);
205 });
206
207 onCleanup(() => {
208 if (pendingResizeCleanup) {
209 pendingResizeCleanup();
210 pendingResizeCleanup = null;
211 }
212 setIsResizing(false);
213 });
214
215 const isDefaultSize = (size: { x: number; y: number }) =>
216 size.x <= 0.025 || size.y <= 0.025;
217
218 const [lastContent, setLastContent] = createSignal(segment().content);
219 const [lastFontSize, setLastFontSize] = createSignal(segment().fontSize);
220
221 const measureAndUpdateSize = (forceUpdate = false) => {
222 if (!hiddenMeasureRef) return false;
223
224 const seg = segment();
225 if (!forceUpdate && !isDefaultSize(seg.size)) return true;
226
227 const { width: naturalWidth, height: naturalHeight } =
228 hiddenMeasureRef.getBoundingClientRect();
229
230 if (
231 naturalWidth === 0 ||
232 naturalHeight === 0 ||
233 !props.size.width ||
234 !props.size.height
235 )
236 return false;
237

Callers

nothing calls this directly

Calls 7

normalizeSegmentFunction · 0.85
segmentFunction · 0.85
onFunction · 0.85
measureAndUpdateSizeFunction · 0.85
onMoveFunction · 0.85
rectFunction · 0.70
createResizeHandlerFunction · 0.70

Tested by

no test coverage detected