@@ -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 */
181181const 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