All plugins

DSH / BUNDLE / CLIENT-UI

dsh-web-bg-2

v2.0.0War-God0108 / dsh-dt-bgdb36b86dc6

InstallableBundlesUI & client pluginsCommunity · Topic auto-analysisWeb UI

Overview

dsh-web-bg-2

DSH 背景替换插件 v2:窗口级壁纸 + 设计令牌 alpha 透明化,面向官方桌面端(0.2.0-rc.2)

README / EN

Package documentation

Registry summary

DSH 背景替换插件 v2:窗口级壁纸 + 设计令牌 alpha 透明化,面向官方桌面端(0.2.0-rc.2)

dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.

Read the full README on GitHub

LIMITATIONS

Known limitations

### 三处显示问题的成因与修法(用户反馈 → 真机命中测试定位) | 现象 | 成因(命中测试实证) | 修法 | |---|---|---| | 内容列左上出现「R 角」、像没盖住 | 官方布局文档写明「内容区仅左上角保留 16px 圆角」,面板没铺满的缺口让壁纸露出来 | 面板与其子级 `border-radius:0`,并把 `--dsh-windows-content-radius` 归零 | | 底部两处渐变黑 | `RlGAzG_card`(712×98,`r=28px` + `box-shadow`)—— 卡片圆角与投影形成的渐变带 | 面板与其子级 `border-radius:0`;卡片底色改由 `--dsh-bg-*` 承担(不透明叠加,不再漏出渐变) | | 菜单栏黑色区域与右侧窗口控制区高度不一致 | 外壳的 `titleBarOverlay` 是**透明**的,而页面顶部那条(`[data-windows-menu]` 所在的 40px)自己不画底色 → 窗口透明区直接透出桌面 | 新增窗口级 **chrome 带**:`top:0`、高度取 `--dsh-frame-top-clearance`、与面板同色、`z-index:-1`,压在页面内容之下、外壳遮罩之下 | > 注:`[data-windows-titlebar]` 是挂在 **`<html>`** 上的无值属性,不是一个可上色的「条」, > 所以不能用它做选择器去染色。 ### 底部渐变黑的真凶(paintProbe 实锤) 用户反馈"窗口底部两处渐变黑不要漏出背景"。前几轮我按"面板底色/圆角/投影"去猜,都没解决; 最后给插件加了 `paintProbe`(把窗口下半部**所有在画东西**的元素的 `background / background-image / box-shadow / mask / radius / overflow` 一次性报出来),一击命中: | 元素 | 画的东西 | |---|---| | `Dc7zOa_composerSeat`(993×128,z=7) | `linear-gradient(color(srgb 0 0 0 / 0) 0px, rgb(21, 21, 23) 36px)` ← **就是那两处渐变黑** | | `_9lTDKa_fade`(侧边栏滚动渐隐) | `linear-gradient(rgba(0,0,0,0), rgb(27,27,28))` | | `_emptyTabHost`(576×782) | 不透明 `rgb(21,21,23)`,会整块盖住壁纸 | 三处都不是"面板底色",而是官方为可读性加的修饰层(让 composer/列表浮起来),在壁纸场景下应当让位: ```css html[data-wbg2-panels] [class*=composerSeat], html[data-wbg2-panels] [class*=fade], html[data-wbg2-panels] [class*=emptyTabHost]{background-image:none!important;background-color:transparent!important} ``` 修后实测:窗口底部 200px 逐段采样,会话列 `(28,120,57)` 与侧边栏 `(29,122,57)` **同色**,无暗段。 ### 顶栏那 40px:插件无法修复(用换色对照实验定死的) | 壁纸 | 顶部 40px | 页面内容 | |---|---|---| | 绿色 | `(28,29,30)` | `(28,84,45)` | | 纯白 | `(27,27,28)` | `(161,161,162)` | **页面从绿变白,顶部 40px 纹丝不动** —— 它是外壳 `titleBarOverlay`(窗口级),不在页面里。 我为此写过一条"顶栏 chrome 带"(`z-index:-1`、高度取 `--dsh-frame-top-clearance`、与面板同色), 三次测量都毫无效果(被遮罩完全覆盖),**已按用户要求撤掉**。要改它只能改官方 `app.asar` 的主进程参数。 > 方法论教训:前几轮我用"屏幕抓取 + 逐像素扫描"判断,而窗口在屏幕上会移动、抓取有偏移, > 几次读出互相矛盾的数字并据此改错了参数。真正定死问题的两个手段是 > **①换色对照实验**(变量法)和 **②让页面自己把绘制属性报出来**(`paintProbe`/`analyzePoint`)。 ### 标题栏遮罩色改不了(机制层确认) Windows 主窗口用 Electron `titleBarOverlay { height: 40 }` 绘制遮罩;外壳框架页会从自己的 探测元素读底色、经 `windowsAppearance` IPC 调 `setTitleBarOverlay`,但主进程只接受来自 `dsh-app://app/` 主框架的调用,而 preload **没有**把 `electron`/`ipcRenderer` 暴露进页面 (实测 `exposeInMainWorld("electron")` 0 处)。插件能做的是让页面在那一段自己画上底色—— 也就是上面那条 chrome 带,这样窗口透明区不再露出桌面。 ### 最致命的一刀:**半透明底色绝不能在每一层后代上重复施加** 现象:重启后 `::before` 已中和,壁纸**仍然**完全不显示。 `occluders` 探针给出决定性数据 —— 同一坐标上的 15 层 `div` **每一层**都是 `bg=rgba(21, 21, 23, 0.38)`。半透明色叠 15 层,等效不透明度 `1 - 0.62^15 ≈ 99.9%`,壁纸被彻底盖死。 成因是我一度把「面板内所有后代」的规则从 `transparent` 改成 `background-color: var(--dsh-bg-*, inherit)`(本意是让"被排除的分组恢复原样"), 结果每一层嵌套容器都各自涂了一遍分组色。修法要分清三类: | 目标 | 规则 | |---|---| | 面板自身 | `background-color: var(--dsh-bg-<组>, inherit)`(值由 applyVisual 写) | | 真正画底色的 `surface` | `background-color: var(--dsh-bg-surface, transparent)` | | **其余纯容器** | `background-color: transparent` ← 必须是 transparent | > 半透明色只能施加在「负责画底色的那一层」上。铺到所有后代 → 指数级叠加成实底; > 一个都不铺 → 面板穿帮。必须在 `surface` 这一层收口。 ### 最隐蔽的一个:**伪元素**把壁纸整块盖住 现象:诊断里一切正常(面板变量是半透明、标记齐全、样式表已注入且内容最新、 全窗扫描**找不到任何不透明元素**、`elementsFromPoint` 前 10 个元素底色全是透明), 但截图实测每个取样点都恒定等于主题底色 —— 壁纸完全没有渲染。 根因靠 `occluders` 探针拿到(沿祖先链**逐层**读取,并额外读 `::before` / `::after`): ``` div bg=rgba(0,0,0,0) ::before=rgb(27, 27, 28) ★ ← 就是它 ``` `BynINW_frame` 自身的 `background-color` 已经被中和成透明了, **但它有一个 `::before` 伪元素在画不透明的 `rgb(27,27,28)`,且铺满整个窗口** (大概率是官方给窗口圆角/阴影做的底色)。伪元素不是元素, `[data-wbg2=canvas]` 这类选择器**永远匹配不到它**,所以之前所有规则都放它过去了。 修法: ```css html[data-wbg2-canvas] [data-wbg2=canvas]::before, html[data-wbg2-canvas] [data-wbg2=canvas]::after{ background-color:transparent!important;background-image:none!important } ``` > 不要顺手清 `content`:有些图标/分隔线是靠伪元素 `content` 画的。 ### 顶栏为什么必须由页面自己画一条 壁纸在整窗铺开之后,顶栏一度出现**"左深右亮"的分段**: 放大截图能看到一条明确的分界线,大约在 x≈150(正好是菜单项的宽度)。 实测(横向六段平均色): | 菜单区 | 文字区 | 中左 | 中右 | 窗口控制区 | 最右 | |---|---|---|---|---|---| | `(36,37,40)` | `(29,29,31)` | `(21,22,24)` | `(21,22,24)` | `(21,22,24)` | `(21,22,24)` | 成因:外壳的 `titleBarOverlay` **只在菜单那一段**叠了一层暗色,其余段不管。 页面改不了