Skip to content

Commit ccd0c6b

Browse files
committed
🐞 fix: 修复系统开启缩放时,拖拽桌面歌词导致宽高异常
1 parent 1c9109a commit ccd0c6b

2 files changed

Lines changed: 30 additions & 13 deletions

File tree

electron/main/ipc/ipc-lyric.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ const initLyricIpc = (): void => {
126126
store.set("lyric", { ...store.get("lyric"), x, y, width, height });
127127
});
128128

129+
// 更新歌词窗口宽高
130+
ipcMain.on("update-lyric-size", (_, width, height) => {
131+
if (!isWinAlive(lyricWin)) return;
132+
// 更新窗口宽度
133+
lyricWin.setBounds({ width, height });
134+
store.set("lyric", { ...store.get("lyric"), width, height });
135+
});
136+
129137
// 更新高度
130138
ipcMain.on("update-window-height", (_, height) => {
131139
if (!isWinAlive(lyricWin)) return;

src/views/DesktopLyric/index.vue

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ const lyricDragStart = async (_position: Position, event: PointerEvent) => {
165165
if (lyricConfig.isLock) return;
166166
dragState.isDragging = true;
167167
const { x, y, width, height } = await window.electron.ipcRenderer.invoke("get-window-bounds");
168-
dragState.startX = (event?.screenX ?? 0) as number;
169-
dragState.startY = (event?.screenY ?? 0) as number;
170-
dragState.startWinX = x as number;
171-
dragState.startWinY = y as number;
172-
dragState.winWidth = width as number;
173-
dragState.winHeight = height as number;
168+
dragState.startX = event?.screenX ?? 0;
169+
dragState.startY = event?.screenY ?? 0;
170+
dragState.startWinX = x;
171+
dragState.startWinY = y;
172+
dragState.winWidth = width;
173+
dragState.winHeight = height;
174174
};
175175
176176
/**
@@ -180,17 +180,17 @@ const lyricDragStart = async (_position: Position, event: PointerEvent) => {
180180
*/
181181
const lyricDragMove = async (_position: Position, event: PointerEvent) => {
182182
if (!dragState.isDragging || lyricConfig.isLock) return;
183-
const screenX = (event?.screenX ?? 0) as number;
184-
const screenY = (event?.screenY ?? 0) as number;
185-
let newWinX = dragState.startWinX + (screenX - dragState.startX);
186-
let newWinY = dragState.startWinY + (screenY - dragState.startY);
183+
const screenX = event?.screenX ?? 0;
184+
const screenY = event?.screenY ?? 0;
185+
let newWinX = Math.round(dragState.startWinX + (screenX - dragState.startX));
186+
let newWinY = Math.round(dragState.startWinY + (screenY - dragState.startY));
187187
// 可选:限制在屏幕边界(支持多屏)
188188
if (lyricConfig.limitBounds) {
189189
const { minX, minY, maxX, maxY } = await window.electron.ipcRenderer.invoke(
190190
"get-virtual-screen-bounds",
191191
);
192-
newWinX = Math.max(minX as number, Math.min((maxX as number) - dragState.winWidth, newWinX));
193-
newWinY = Math.max(minY as number, Math.min((maxY as number) - dragState.winHeight, newWinY));
192+
newWinX = Math.round(Math.max(minX as number, Math.min(maxX - dragState.winWidth, newWinX)));
193+
newWinY = Math.round(Math.max(minY as number, Math.min(maxY - dragState.winHeight, newWinY)));
194194
}
195195
window.electron.ipcRenderer.send(
196196
"move-window",
@@ -209,7 +209,16 @@ useDraggable(desktopLyricRef, {
209209
onMove: (position, event) => {
210210
lyricDragMove(position, event);
211211
},
212-
onEnd: () => {
212+
onEnd: async () => {
213+
const { width, height } = await window.electron.ipcRenderer.invoke("get-window-bounds");
214+
// 若不等于初始宽高
215+
if (width !== dragState.winWidth || height !== dragState.winHeight) {
216+
window.electron.ipcRenderer.send(
217+
"update-lyric-size",
218+
dragState.winWidth,
219+
dragState.winHeight,
220+
);
221+
}
213222
dragState.isDragging = false;
214223
},
215224
});

0 commit comments

Comments
 (0)