Skip to content

desktopIconLayout

桌面图标网格布局:钳制、吸附、默认排列、框选与坐标换算。

函数签名

typescript
interface DesktopIconPoint { x: number; y: number }
interface DesktopIconSlotSize { width: number; height: number; gap: number }
interface DesktopLayerBounds { width: number; height: number }

function clampDesktopIconPoint(x, y, bounds, slot): DesktopIconPoint
function snapDesktopIconPoint(x, y, slot): DesktopIconPoint
function defaultDesktopIconPoint(index, bounds, slot): DesktopIconPoint
function buildArrangedDesktopIconPositions(itemIds, bounds, slot): Record<string, DesktopIconPoint>
function normalizeDesktopIconPositions(itemIds, bounds, stored, slot): Record<string, DesktopIconPoint>
function resolveDesktopIconPointAtClient(clientX, clientY, layerOffset, bounds, slot): DesktopIconPoint
function desktopMarqueeIntersectsIconBounds(marquee, icon): boolean

参数

函数主要参数说明
clampDesktopIconPointx, y, bounds, slot限制图标原点在图层内
snapDesktopIconPointx, y, slot按槽宽/高 + gap 吸附到网格
defaultDesktopIconPointindex, bounds, slot自上而下填满一列再开下一列
resolveDesktopIconPointAtClient客户端坐标 + 图层偏移点击位置转图标原点并 snap + clamp

返回值

类型说明
DesktopIconPoint图层内图标左上角坐标
Record<string, DesktopIconPoint>批量 id → 坐标
boolean框选矩形是否与图标 bounds 相交

工作原理

  1. 网格步长:列步长 width + gap,行步长 height + gapsnapround 对齐。
  2. 默认布局:macOS 风格按列优先填充;列数由可用高度与行步长决定。
  3. 持久化归一化:已有保存坐标仅 clamp,不再 snap,避免 resize 时跳动。
  4. 框选normalizeDesktopMarqueeRect 规范化矩形后,用 AABB 相交判断选中图标。