(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;
})
| 178 | } |
| 179 | |
| 180 | function 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 |
nothing calls this directly
no test coverage detected