Skip to content

Commit 3f1f5be

Browse files
committed
feat(grub-theme): 优化并新增Deepin grub主题支持
- 新增 adjustThemeNormalV25 处理函数,替代旧版本普通主题调整逻辑 - 重构调整启动菜单逻辑,简化 adjustBootMenu 函数,支持不同分辨率下的配置 - 在 Theme 结构体中添加 FindComponentByType 方法,便于根据类型查找组件 - 引入并使用 deepin-v20 主题数据,重命名相关资源文件路径 - 更新 deepin 主题的 theme.txt.tpl 模板,提高启动菜单和标签文字的配置灵活性 - 调整主题背景图片处理逻辑,支持保存背景及主题内背景图 - 测试代码中调用调整普通主题的函数改为新版本接口调用 - 优化字体和界面元素的样式及位置,提升视觉效果和一致性 Bug: PMS-277733
1 parent a712e5d commit 3f1f5be

50 files changed

Lines changed: 253 additions & 77 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

adjust-grub-theme/adjust_grub_theme_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func (s *su) TestAdjustThemeNormal() {
201201
defer func() {
202202
_ = os.RemoveAll(optThemeOutputDir)
203203
}()
204-
err = adjustThemeNormal()
204+
err = adjustThemeNormalV20()
205205
assert.Equal(s.T(), nil, err)
206206

207207
}

adjust-grub-theme/main.go

Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,13 @@ func adjustTheme() {
306306
if optFallbackOnly {
307307
return
308308
}
309-
err = adjustThemeNormal()
309+
err = adjustThemeNormalV25()
310310
if err != nil {
311311
logger.Fatal(err)
312312
}
313313
}
314314

315-
func adjustThemeNormal() error {
315+
func adjustThemeNormalV20() error {
316316
themeInputDir := filepath.Join(optThemeInputDir, themeNameNormal)
317317
themeOutputDir := filepath.Join(optThemeOutputDir, themeNameNormal)
318318

@@ -409,6 +409,100 @@ func adjustThemeNormal() error {
409409
return err
410410
}
411411

412+
func adjustThemeNormalV25() error {
413+
themeInputDir := filepath.Join(optThemeInputDir, themeNameNormal)
414+
themeOutputDir := filepath.Join(optThemeOutputDir, themeNameNormal)
415+
416+
cleanupThemeOutputDir(themeOutputDir)
417+
err := os.MkdirAll(themeOutputDir, 0755)
418+
if err != nil {
419+
return err
420+
}
421+
copyThemeFiles(themeInputDir, themeOutputDir)
422+
423+
bgImg, themeBgImg, err := loadV25BackgroundImage()
424+
if err != nil {
425+
return err
426+
}
427+
428+
err = saveJpeg(bgImg, filepath.Join(themeOutputDir, "background.jpg"))
429+
if err != nil {
430+
return err
431+
}
432+
if themeBgImg != nil {
433+
err = saveJpeg(themeBgImg, filepath.Join(themeOutputDir, "background_in_theme.jpg"))
434+
if err != nil {
435+
return err
436+
}
437+
} else {
438+
_, err = copyFile(filepath.Join(themeOutputDir, "background.jpg"),
439+
filepath.Join(themeOutputDir, "background_in_theme.jpg"))
440+
if err != nil {
441+
return err
442+
}
443+
}
444+
445+
themeFile := filepath.Join(themeInputDir, "theme.txt.tpl")
446+
theme, err := tt.ParseThemeFile(themeFile)
447+
if err != nil {
448+
return err
449+
}
450+
451+
bootMenu := theme.FindComponentByType(tt.ComponentTypeBootMenu)
452+
if bootMenu != nil {
453+
adjustBootMenuV25(bootMenu, optScreenWidth, optScreenHeight)
454+
}
455+
456+
for _, comp := range theme.Components {
457+
if comp.Type == tt.ComponentTypeLabel {
458+
adjustLabelText(comp)
459+
}
460+
}
461+
462+
themeOutput := filepath.Join(themeOutputDir, "theme.txt")
463+
themeOutputFh, err := os.Create(themeOutput)
464+
if err != nil {
465+
return err
466+
}
467+
defer func() {
468+
_ = themeOutputFh.Close()
469+
}()
470+
bw := bufio.NewWriter(themeOutputFh)
471+
// write head
472+
_, err = fmt.Fprintf(bw, "#version:%d\n", VERSION)
473+
if err != nil {
474+
return err
475+
}
476+
_, err = fmt.Fprintf(bw, "#lang:%s\n", optLang)
477+
if err != nil {
478+
return err
479+
}
480+
481+
var inputDir string
482+
inputDir, err = filepath.Abs(themeInputDir)
483+
if err != nil {
484+
logger.Warning(err)
485+
inputDir = themeInputDir
486+
}
487+
488+
_, err = fmt.Fprintf(bw, "#themeInputDir:%s\n", inputDir)
489+
if err != nil {
490+
return err
491+
}
492+
493+
_, err = fmt.Fprintln(bw, "#head end")
494+
if err != nil {
495+
return err
496+
}
497+
498+
_, err = theme.WriteTo(bw)
499+
if err != nil {
500+
return err
501+
}
502+
err = bw.Flush()
503+
return err
504+
}
505+
412506
func adjustThemeFallback() error {
413507
themeInputDir := filepath.Join(optThemeInputDir, themeNameFallback)
414508
themeOutputDir := filepath.Join(optThemeOutputDir, themeNameFallback)
@@ -984,6 +1078,16 @@ func adjustBootMenu(themeOutputDir string, comp *tt.Component, vars map[string]f
9841078
adjustScrollbarThumbPixmapStyle(scrollbarThumbR)
9851079
}
9861080

1081+
func adjustBootMenuV25(comp *tt.Component, width, height int) {
1082+
if width == 1024 && height == 768 {
1083+
// halfWidthPercent represents half of the boot menu width percentage.
1084+
// The boot menu is centered, so width = halfWidthPercent * 2, left = 50% - halfWidthPercent,
1085+
const halfWidthPercent = 18
1086+
comp.SetProp("width", tt.RelNum(halfWidthPercent*2))
1087+
comp.SetProp("left", tt.RelNum(50-halfWidthPercent))
1088+
}
1089+
}
1090+
9871091
const (
9881092
orientationHorizontal = 0
9891093
orientationVertical = 1

grub_theme/themetxt/theme.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,16 @@ func (t *Theme) Dump() {
264264
}
265265
}
266266

267+
// FindComponentByType finds the first component by component type
268+
func (t *Theme) FindComponentByType(compType string) *Component {
269+
for _, comp := range t.Components {
270+
if comp.Type == compType {
271+
return comp
272+
}
273+
}
274+
return nil
275+
}
276+
267277
func (t *Theme) WriteTo(w io.Writer) (n int64, err error) {
268278
for _, prop := range t.Props {
269279
var pn int
File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/antergos.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/antergos.svg

File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/arch.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/arch.svg

File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/chakra.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/chakra.svg

File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/debian.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/debian.svg

File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/deepin.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/deepin.svg

File renamed without changes.

misc/data/grub-themes/deepin/resources/os-logos/elementary.svg renamed to misc/data/grub-themes/deepin-v20/resources/os-logos/elementary.svg

File renamed without changes.

0 commit comments

Comments
 (0)