Add Gio app shells and platform stubs (T-003)
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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 Legacy 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 Legacy 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, "Legacy 窗口已就绪,业务功能将在后续任务接入。")
|
||||
label.Color = shellColors.secondary
|
||||
return label.Layout(context)
|
||||
}),
|
||||
)
|
||||
})
|
||||
}),
|
||||
layout.Rigid(func(context layout.Context) layout.Dimensions {
|
||||
label := material.Body2(theme, "Legacy · Windows 7 SP1 x64")
|
||||
label.Color = shellColors.secondary
|
||||
return label.Layout(context)
|
||||
}),
|
||||
)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user