mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-06-08 04:09:15 -04:00
8c20f448ed
misc: fix layer shell enum usage
114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
function spanWidthFor(baseWidth, widgetWidth, spacing) {
|
|
const w = widgetWidth || 50
|
|
if (w <= 25)
|
|
return (baseWidth - spacing * 3) / 4
|
|
if (w <= 50)
|
|
return (baseWidth - spacing) / 2
|
|
if (w <= 75)
|
|
return (baseWidth - spacing * 2) * 0.75
|
|
return baseWidth
|
|
}
|
|
|
|
function isSliderWidget(id) {
|
|
return id === "volumeSlider" || id === "brightnessSlider" || id === "inputVolumeSlider"
|
|
}
|
|
|
|
function computeSlots(widgets, order, baseWidth, spacing, rowSpacing, sliderHeight, normalHeight) {
|
|
const slots = []
|
|
let x = 0
|
|
let y = 0
|
|
let rowRight = 0
|
|
let rowMaxH = 0
|
|
let countInRow = 0
|
|
|
|
for (let p = 0; p < order.length; p++) {
|
|
const sourceIndex = order[p]
|
|
const widget = widgets[sourceIndex]
|
|
if (!widget)
|
|
continue
|
|
|
|
const itemW = spanWidthFor(baseWidth, widget.width, spacing)
|
|
const itemH = isSliderWidget(widget.id || "") ? sliderHeight : normalHeight
|
|
|
|
if (countInRow > 0 && (rowRight + spacing + itemW > baseWidth + 0.5)) {
|
|
y += rowMaxH + rowSpacing
|
|
rowRight = 0
|
|
rowMaxH = 0
|
|
countInRow = 0
|
|
}
|
|
|
|
x = countInRow === 0 ? 0 : rowRight + spacing
|
|
slots[sourceIndex] = {
|
|
"x": x,
|
|
"y": y,
|
|
"w": itemW,
|
|
"h": itemH
|
|
}
|
|
rowRight = x + itemW
|
|
rowMaxH = Math.max(rowMaxH, itemH)
|
|
countInRow++
|
|
}
|
|
|
|
return {
|
|
"slots": slots,
|
|
"totalHeight": y + rowMaxH
|
|
}
|
|
}
|
|
|
|
function slotContainingPoint(slots, order, px, py) {
|
|
for (let p = 0; p < order.length; p++) {
|
|
const s = slots[order[p]]
|
|
if (!s)
|
|
continue
|
|
if (px >= s.x && px < s.x + s.w && py >= s.y && py < s.y + s.h)
|
|
return p
|
|
}
|
|
return -1
|
|
}
|
|
|
|
function calculateRowsAndWidgets(controlCenterColumn, expandedSection, expandedWidgetIndex) {
|
|
var rows = []
|
|
var currentRow = []
|
|
var currentWidth = 0
|
|
var expandedRow = -1
|
|
|
|
const widgets = SettingsData.controlCenterWidgets || []
|
|
const baseWidth = controlCenterColumn.width
|
|
const spacing = Theme.spacingS
|
|
|
|
for (var i = 0; i < widgets.length; i++) {
|
|
const widget = widgets[i]
|
|
const widgetWidth = widget.width || 50
|
|
|
|
var itemWidth
|
|
if (widgetWidth <= 25) {
|
|
itemWidth = (baseWidth - spacing * 3) / 4
|
|
} else if (widgetWidth <= 50) {
|
|
itemWidth = (baseWidth - spacing) / 2
|
|
} else if (widgetWidth <= 75) {
|
|
itemWidth = (baseWidth - spacing * 2) * 0.75
|
|
} else {
|
|
itemWidth = baseWidth
|
|
}
|
|
|
|
if (currentRow.length > 0 && (currentWidth + spacing + itemWidth > baseWidth)) {
|
|
rows.push([...currentRow])
|
|
currentRow = [widget]
|
|
currentWidth = itemWidth
|
|
} else {
|
|
currentRow.push(widget)
|
|
currentWidth += (currentRow.length > 1 ? spacing : 0) + itemWidth
|
|
}
|
|
|
|
if (expandedWidgetIndex === i) {
|
|
expandedRow = rows.length
|
|
}
|
|
}
|
|
|
|
if (currentRow.length > 0) {
|
|
rows.push(currentRow)
|
|
}
|
|
|
|
return { rows: rows, expandedRowIndex: expandedRow }
|
|
}
|