package gio import ( "image/color" "gioui.org/layout" "gioui.org/op/paint" "gioui.org/unit" "gioui.org/widget/material" ) var shellColors = struct { background color.NRGBA foreground color.NRGBA primary color.NRGBA onPrimary color.NRGBA secondary color.NRGBA }{ background: color.NRGBA{R: 248, G: 250, B: 252, A: 255}, foreground: color.NRGBA{R: 15, G: 23, B: 42, A: 255}, primary: color.NRGBA{R: 13, G: 148, B: 136, A: 255}, onPrimary: color.NRGBA{R: 255, G: 255, B: 255, A: 255}, secondary: color.NRGBA{R: 71, G: 85, B: 105, A: 255}, } // AppShell is the modern window frame. Feature views are added in later tasks. type AppShell struct { edition string } // NewAppShell creates an empty shell for the supplied build edition. func NewAppShell(edition string) *AppShell { return &AppShell{edition: edition} } // NewTheme creates the semantic palette shared by the modern shell. func NewTheme() *material.Theme { theme := material.NewTheme() theme.Palette = material.Palette{ Bg: shellColors.background, Fg: shellColors.foreground, ContrastBg: shellColors.primary, ContrastFg: shellColors.onPrimary, } theme.FingerSize = unit.Dp(44) return theme } // Layout renders the shell without performing IO or submitting use cases. func (shell *AppShell) Layout(context layout.Context, theme *material.Theme) layout.Dimensions { paint.Fill(context.Ops, theme.Bg) return layout.UniformInset(unit.Dp(32)).Layout(context, func(context layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical}.Layout( context, layout.Rigid(func(context layout.Context) layout.Dimensions { return layout.Flex{Alignment: layout.Middle}.Layout( context, layout.Rigid(material.H5(theme, "SoftBox").Layout), layout.Rigid(layout.Spacer{Width: unit.Dp(16)}.Layout), layout.Rigid(func(context layout.Context) layout.Dimensions { label := material.Body2(theme, shell.edition) label.Color = shellColors.primary return label.Layout(context) }), ) }), layout.Rigid(layout.Spacer{Height: unit.Dp(24)}.Layout), layout.Flexed(1, func(context layout.Context) layout.Dimensions { return layout.Center.Layout(context, func(context layout.Context) layout.Dimensions { return layout.Flex{Axis: layout.Vertical, Alignment: layout.Middle}.Layout( context, layout.Rigid(material.H6(theme, "软件目录准备中").Layout), layout.Rigid(layout.Spacer{Height: unit.Dp(8)}.Layout), layout.Rigid(func(context layout.Context) layout.Dimensions { label := material.Body1(theme, "当前窗口仅验证 Gio AppShell 与双构建链路。") label.Color = shellColors.secondary return label.Layout(context) }), ) }) }), layout.Rigid(func(context layout.Context) layout.Dimensions { label := material.Body2(theme, "Modern · Windows 10/11 x64") label.Color = shellColors.secondary return label.Layout(context) }), ) }) }