mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-04-24 08:07:23 +08:00
feat: 添加主窗口自适应大小功能,页面缩放功能,支持缩放因子的调整和重置,并在搜索栏中提供缩放控制
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
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 {
|
||||
window.ipcRenderer.send('reset-content-zoom');
|
||||
// 重置后重新获取系统计算的缩放比例
|
||||
const newZoom = await window.ipcRenderer.invoke('get-content-zoom');
|
||||
zoomFactor.value = newZoom;
|
||||
} 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
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user