feat: 允许歌词窗口不超出任意屏幕而不仅是主屏
This commit is contained in:
parent
489bbb6902
commit
329cbd1830
2
src/common/types/common.d.ts
vendored
2
src/common/types/common.d.ts
vendored
@ -49,7 +49,7 @@ declare namespace LX {
|
|||||||
interface EnvParams {
|
interface EnvParams {
|
||||||
deeplink?: string | null
|
deeplink?: string | null
|
||||||
cmdParams: CmdParams
|
cmdParams: CmdParams
|
||||||
workAreaSize?: Electron.Size
|
workArea?: Electron.Rectangle
|
||||||
}
|
}
|
||||||
|
|
||||||
interface HotKey {
|
interface HotKey {
|
||||||
|
|||||||
@ -382,7 +382,7 @@
|
|||||||
"setting__desktop_lyric_line_gap_add": "Increase spacing",
|
"setting__desktop_lyric_line_gap_add": "Increase spacing",
|
||||||
"setting__desktop_lyric_line_gap_dec": "Reduce spacing",
|
"setting__desktop_lyric_line_gap_dec": "Reduce spacing",
|
||||||
"setting__desktop_lyric_lock": "Lock lyrics",
|
"setting__desktop_lyric_lock": "Lock lyrics",
|
||||||
"setting__desktop_lyric_lock_screen": "It is not allowed to drag the lyrics window out of the main screen",
|
"setting__desktop_lyric_lock_screen": "It is not allowed to drag the lyrics window out of the current screen",
|
||||||
"setting__desktop_lyric_played_color": "color played",
|
"setting__desktop_lyric_played_color": "color played",
|
||||||
"setting__desktop_lyric_reset": "Reset",
|
"setting__desktop_lyric_reset": "Reset",
|
||||||
"setting__desktop_lyric_reset_window": "Reset window settings",
|
"setting__desktop_lyric_reset_window": "Reset window settings",
|
||||||
|
|||||||
@ -382,7 +382,7 @@
|
|||||||
"setting__desktop_lyric_line_gap_add": "加大间距",
|
"setting__desktop_lyric_line_gap_add": "加大间距",
|
||||||
"setting__desktop_lyric_line_gap_dec": "减小间距",
|
"setting__desktop_lyric_line_gap_dec": "减小间距",
|
||||||
"setting__desktop_lyric_lock": "锁定歌词",
|
"setting__desktop_lyric_lock": "锁定歌词",
|
||||||
"setting__desktop_lyric_lock_screen": "不允许歌词窗口拖出主屏幕之外",
|
"setting__desktop_lyric_lock_screen": "不允许歌词窗口拖出当前屏幕之外",
|
||||||
"setting__desktop_lyric_played_color": "已播放颜色",
|
"setting__desktop_lyric_played_color": "已播放颜色",
|
||||||
"setting__desktop_lyric_reset": "重置",
|
"setting__desktop_lyric_reset": "重置",
|
||||||
"setting__desktop_lyric_reset_window": "重置窗口设置",
|
"setting__desktop_lyric_reset_window": "重置窗口设置",
|
||||||
|
|||||||
@ -382,7 +382,7 @@
|
|||||||
"setting__desktop_lyric_line_gap_add": "加大間距",
|
"setting__desktop_lyric_line_gap_add": "加大間距",
|
||||||
"setting__desktop_lyric_line_gap_dec": "減小間距",
|
"setting__desktop_lyric_line_gap_dec": "減小間距",
|
||||||
"setting__desktop_lyric_lock": "鎖定歌詞",
|
"setting__desktop_lyric_lock": "鎖定歌詞",
|
||||||
"setting__desktop_lyric_lock_screen": "不允許歌詞視窗拖出主畫面之外",
|
"setting__desktop_lyric_lock_screen": "不允許歌詞視窗拖出目前畫面之外",
|
||||||
"setting__desktop_lyric_played_color": "已播放顏色",
|
"setting__desktop_lyric_played_color": "已播放顏色",
|
||||||
"setting__desktop_lyric_reset": "重置",
|
"setting__desktop_lyric_reset": "重置",
|
||||||
"setting__desktop_lyric_reset_window": "重置視窗設定",
|
"setting__desktop_lyric_reset_window": "重置視窗設定",
|
||||||
|
|||||||
@ -215,7 +215,7 @@ export const listenerAppEvent = (startApp: () => void) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const initScreenParams = () => {
|
const initScreenParams = () => {
|
||||||
global.envParams.workAreaSize = screen.getPrimaryDisplay().workAreaSize
|
global.envParams.workArea = screen.getPrimaryDisplay().workArea
|
||||||
}
|
}
|
||||||
app.on('ready', () => {
|
app.on('ready', () => {
|
||||||
screen.on('display-metrics-changed', initScreenParams)
|
screen.on('display-metrics-changed', initScreenParams)
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import { isLinux } from '@common/utils'
|
import { isLinux } from '@common/utils'
|
||||||
import { closeWindow, createWindow, getBounds, isExistWindow, alwaysOnTopTools, setBounds, setIgnoreMouseEvents, setSkipTaskbar } from './main'
|
import { closeWindow, createWindow, getBounds, isExistWindow, alwaysOnTopTools, setBounds, setIgnoreMouseEvents, setSkipTaskbar } from './main'
|
||||||
import { sendConfigChange } from './rendererEvent'
|
import { sendConfigChange } from './rendererEvent'
|
||||||
import { buildLyricConfig, getLyricWindowBounds, initWindowSize, watchConfigKeys } from './utils'
|
import { buildLyricConfig, getLyricWindowBounds, initWindowSize, watchConfigKeys, setWorkArea } from './utils'
|
||||||
|
import { screen } from 'electron'
|
||||||
|
|
||||||
let isLock: boolean
|
let isLock: boolean
|
||||||
let isEnable: boolean
|
let isEnable: boolean
|
||||||
@ -53,6 +54,18 @@ export const setLrcConfig = (keys: Array<keyof LX.AppSetting>, setting: Partial<
|
|||||||
}
|
}
|
||||||
if (keys.includes('desktopLyric.isLockScreen') && isLockScreen != global.lx.appSetting['desktopLyric.isLockScreen']) {
|
if (keys.includes('desktopLyric.isLockScreen') && isLockScreen != global.lx.appSetting['desktopLyric.isLockScreen']) {
|
||||||
isLockScreen = global.lx.appSetting['desktopLyric.isLockScreen']
|
isLockScreen = global.lx.appSetting['desktopLyric.isLockScreen']
|
||||||
|
const bounds = getBounds()
|
||||||
|
const displays = screen.getAllDisplays()
|
||||||
|
const displayOn = displays.find((display: Electron.Display) => {
|
||||||
|
const { x, y, width, height } = display.bounds
|
||||||
|
return (
|
||||||
|
bounds.x >= x &&
|
||||||
|
bounds.y >= y &&
|
||||||
|
bounds.x < x + width &&
|
||||||
|
bounds.y < y + height
|
||||||
|
)
|
||||||
|
})
|
||||||
|
setWorkArea(displayOn!.workArea || displays[0].workArea)
|
||||||
if (global.lx.appSetting['desktopLyric.isLockScreen']) {
|
if (global.lx.appSetting['desktopLyric.isLockScreen']) {
|
||||||
setBounds(getLyricWindowBounds(getBounds(), {
|
setBounds(getLyricWindowBounds(getBounds(), {
|
||||||
x: 0,
|
x: 0,
|
||||||
|
|||||||
@ -87,7 +87,7 @@ const winEvent = () => {
|
|||||||
|
|
||||||
export const createWindow = () => {
|
export const createWindow = () => {
|
||||||
closeWindow()
|
closeWindow()
|
||||||
if (!global.envParams.workAreaSize) return
|
if (!global.envParams.workArea) return
|
||||||
let x = global.lx.appSetting['desktopLyric.x']
|
let x = global.lx.appSetting['desktopLyric.x']
|
||||||
let y = global.lx.appSetting['desktopLyric.y']
|
let y = global.lx.appSetting['desktopLyric.y']
|
||||||
let width = global.lx.appSetting['desktopLyric.width']
|
let width = global.lx.appSetting['desktopLyric.width']
|
||||||
@ -95,7 +95,7 @@ export const createWindow = () => {
|
|||||||
let isAlwaysOnTop = global.lx.appSetting['desktopLyric.isAlwaysOnTop']
|
let isAlwaysOnTop = global.lx.appSetting['desktopLyric.isAlwaysOnTop']
|
||||||
// let isLockScreen = global.lx.appSetting['desktopLyric.isLockScreen']
|
// let isLockScreen = global.lx.appSetting['desktopLyric.isLockScreen']
|
||||||
let isShowTaskbar = global.lx.appSetting['desktopLyric.isShowTaskbar']
|
let isShowTaskbar = global.lx.appSetting['desktopLyric.isShowTaskbar']
|
||||||
// let { width: screenWidth, height: screenHeight } = global.envParams.workAreaSize
|
// let { width: screenWidth, height: screenHeight } = global.envParams.workArea
|
||||||
const winSize = initWindowSize(x, y, width, height)
|
const winSize = initWindowSize(x, y, width, height)
|
||||||
global.lx.event_app.update_config({
|
global.lx.event_app.update_config({
|
||||||
'desktopLyric.x': winSize.x,
|
'desktopLyric.x': winSize.x,
|
||||||
|
|||||||
@ -8,6 +8,10 @@ export let minHeight = 50
|
|||||||
// return bounds
|
// return bounds
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
export const setWorkArea = (workArea: Electron.Rectangle) => {
|
||||||
|
global.envParams.workArea = workArea
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param bounds 当前设置
|
* @param bounds 当前设置
|
||||||
@ -19,24 +23,21 @@ export const getLyricWindowBounds = (bounds: Electron.Rectangle, { x = 0, y = 0,
|
|||||||
if (h < minHeight) h = minHeight
|
if (h < minHeight) h = minHeight
|
||||||
|
|
||||||
if (global.lx.appSetting['desktopLyric.isLockScreen']) {
|
if (global.lx.appSetting['desktopLyric.isLockScreen']) {
|
||||||
if (!global.envParams.workAreaSize) return bounds
|
const workArea = global.envParams.workArea
|
||||||
const maxWinW = global.envParams.workAreaSize.width
|
if (!workArea) return bounds
|
||||||
const maxWinH = global.envParams.workAreaSize.height
|
|
||||||
|
|
||||||
if (w > maxWinW) w = maxWinW
|
const maxWinW = workArea.width
|
||||||
if (h > maxWinH) h = maxWinH
|
const maxWinH = workArea.height
|
||||||
|
|
||||||
const maxX = global.envParams.workAreaSize.width - w
|
// 限制宽高不超过工作区域
|
||||||
const maxY = global.envParams.workAreaSize.height - h
|
w = Math.min(w, maxWinW)
|
||||||
|
h = Math.min(h, maxWinH)
|
||||||
|
|
||||||
x += bounds.x
|
const maxX = workArea.x + maxWinW - w
|
||||||
y += bounds.y
|
const maxY = workArea.y + maxWinH - h
|
||||||
|
|
||||||
if (x > maxX) x = maxX
|
x = Math.max(workArea.x, Math.min(x + bounds.x, maxX))
|
||||||
else if (x < 0) x = 0
|
y = Math.max(workArea.y, Math.min(y + bounds.y, maxY))
|
||||||
|
|
||||||
if (y > maxY) y = maxY
|
|
||||||
else if (y < 0) y = 0
|
|
||||||
} else {
|
} else {
|
||||||
y += bounds.y
|
y += bounds.y
|
||||||
x += bounds.x
|
x += bounds.x
|
||||||
@ -97,9 +98,9 @@ export const initWindowSize = (x: LX.AppSetting['desktopLyric.x'], y: LX.AppSett
|
|||||||
if (x == null || y == null) {
|
if (x == null || y == null) {
|
||||||
if (width < minWidth) width = minWidth
|
if (width < minWidth) width = minWidth
|
||||||
if (height < minHeight) height = minHeight
|
if (height < minHeight) height = minHeight
|
||||||
if (global.envParams.workAreaSize) {
|
if (global.envParams.workArea) {
|
||||||
x = global.envParams.workAreaSize.width - width
|
x = global.envParams.workArea.width - width
|
||||||
y = global.envParams.workAreaSize.height - height
|
y = global.envParams.workArea.height - height
|
||||||
} else {
|
} else {
|
||||||
x = y = 0
|
x = y = 0
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user