mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-05-17 10:18:57 +08:00
93 lines
2.2 KiB
TypeScript
93 lines
2.2 KiB
TypeScript
import { ref } from 'vue';
|
|
|
|
/**
|
|
* 页面缩放功能的组合式API
|
|
* 提供页面缩放相关的状态和方法
|
|
*/
|
|
export function useZoom() {
|
|
// 缩放相关常量
|
|
const MIN_ZOOM = 0.5;
|
|
const MAX_ZOOM = 1.5;
|
|
const ZOOM_STEP = 0.05; // 5%的步长
|
|
|
|
// 当前缩放因子
|
|
const zoomFactor = ref(1);
|
|
|
|
// 初始化获取当前缩放比例
|
|
const initZoomFactor = async () => {
|
|
try {
|
|
const currentZoom = await window.ipcRenderer.invoke('get-content-zoom');
|
|
zoomFactor.value = currentZoom;
|
|
} catch (error) {
|
|
console.error('获取缩放比例失败:', error);
|
|
}
|
|
};
|
|
|
|
// 增加缩放比例,保证100%为节点
|
|
const increaseZoom = () => {
|
|
let newZoom;
|
|
|
|
// 如果当前缩放低于100%并且增加后会超过100%,则直接设为100%
|
|
if (zoomFactor.value < 1.0 && zoomFactor.value + ZOOM_STEP > 1.0) {
|
|
newZoom = 1.0; // 精确设置为100%
|
|
} else {
|
|
newZoom = Math.min(MAX_ZOOM, Math.round((zoomFactor.value + ZOOM_STEP) * 20) / 20);
|
|
}
|
|
|
|
setZoomFactor(newZoom);
|
|
};
|
|
|
|
// 减少缩放比例,保证100%为节点
|
|
const decreaseZoom = () => {
|
|
let newZoom;
|
|
|
|
// 如果当前缩放大于100%并且减少后会低于100%,则直接设为100%
|
|
if (zoomFactor.value > 1.0 && zoomFactor.value - ZOOM_STEP < 1.0) {
|
|
newZoom = 1.0; // 精确设置为100%
|
|
} else {
|
|
newZoom = Math.max(MIN_ZOOM, Math.round((zoomFactor.value - ZOOM_STEP) * 20) / 20);
|
|
}
|
|
|
|
setZoomFactor(newZoom);
|
|
};
|
|
|
|
// 重置缩放比例到系统建议值
|
|
const resetZoom = async () => {
|
|
try {
|
|
setZoomFactor(1);
|
|
} catch (error) {
|
|
console.error('重置缩放比例失败:', error);
|
|
}
|
|
};
|
|
|
|
// 设置为100%标准缩放
|
|
const setZoom100 = () => {
|
|
setZoomFactor(1.0);
|
|
};
|
|
|
|
// 设置缩放比例
|
|
const setZoomFactor = (zoom: number) => {
|
|
window.ipcRenderer.send('set-content-zoom', zoom);
|
|
zoomFactor.value = zoom;
|
|
};
|
|
|
|
// 检查是否为100%缩放
|
|
const isZoom100 = () => {
|
|
return Math.abs(zoomFactor.value - 1.0) < 0.001;
|
|
};
|
|
|
|
return {
|
|
zoomFactor,
|
|
initZoomFactor,
|
|
increaseZoom,
|
|
decreaseZoom,
|
|
resetZoom,
|
|
setZoom100,
|
|
setZoomFactor,
|
|
isZoom100,
|
|
MIN_ZOOM,
|
|
MAX_ZOOM,
|
|
ZOOM_STEP
|
|
};
|
|
}
|