Specify accent color in style

This commit is contained in:
Christoph Hagen 2023-08-23 16:17:34 +02:00
parent cd37df22bf
commit c9ab73c4ae
10 changed files with 48 additions and 25 deletions

View File

@ -12,10 +12,13 @@ struct CV: View {
var body: some View {
VStack {
TopView(info: info.top, style: style.header)
TopView(
info: info.top,
style: style.header,
accent: style.accentColor)
.frame(height: style.header.height)
Rectangle()
.fill(Color.accentColor)
.fill(style.accentColor)
.frame(height: style.header.lineWidth)
GeometryReader { geo in
let columnWidth = max(0, (geo.size.width - twoColumnSpacing)) / 2
@ -23,9 +26,11 @@ struct CV: View {
VStack(alignment: .leading) {
TitledCareerSection(
style: style.section,
accent: style.accentColor,
content: info.work)
TitledCareerSection(
style: style.section,
accent: style.accentColor,
content: info.education)
}.frame(width: columnWidth)
VStack(alignment: .leading) {
@ -36,7 +41,8 @@ struct CV: View {
PublicationView(
info: item,
borderSpacing: style.section.borderSpacing,
borderWidth: style.section.borderWidth)
borderWidth: style.section.borderWidth,
accent: style.accentColor)
.padding(.bottom, style.section.bottomSpacing)
}
}

View File

@ -59,7 +59,9 @@ struct ContentView: View {
Toggle("Dark mode", isOn: $darkModeEnabled)
.toggleStyle(SwitchToggleStyle())
}
.padding()
.padding([.top, .trailing])
.padding(.leading, 6)
.padding(.bottom, 4)
ScrollView(.vertical) {
CV(info: info, style: style)
}.frame(width: style.pageWidth)

View File

@ -3,6 +3,7 @@ import SwiftUI
let cvStyle = CVStyle(
pageWidth: 600,
accentColor: .init(244, 144, 0),
header: HeaderStyle(
height: 100,
lineWidth: 1,

View File

@ -9,14 +9,15 @@ struct CareerStationView: View {
let borderWidth: CGFloat
let accent: Color
var body: some View {
LeftBorderView(color: .accentColor, spacing: borderSpacing, borderWidth: borderWidth) {
LeftBorderView(color: accent, spacing: borderSpacing, borderWidth: borderWidth) {
VStack(alignment: .leading) {
HStack {
RightImageLabel(info.time, systemSymbol: .calendar)
.padding(.leading, -4)
Spacer()
RightImageLabel(info.location, systemSymbol: .pin)
RightImageLabel(info.location, systemSymbol: .house)
}
.font(.caption)
.foregroundColor(.secondary)
@ -26,7 +27,7 @@ struct CareerStationView: View {
if let subtitle = info.subtitle {
Text(subtitle)
.font(.subheadline)
.foregroundColor(.accentColor)
.foregroundColor(accent)
}
if let text = info.text {
Text(text)
@ -40,14 +41,16 @@ struct CareerStationView: View {
struct CareerStationView_Previews: PreviewProvider {
static var previews: some View {
CareerStationView(info: .init(
time: "Jul 2020 - Jul 2023",
location: "Braunschweig, Germany",
title: "German Aerospace Center",
subtitle: "Systems engineer",
text: "Responsible for aircraft systems and avionics of a high-altitude solar drone, safety, and software."),
borderSpacing: 5,
borderWidth: 3)
CareerStationView(
info: .init(
time: "Jul 2020 - Jul 2023",
location: "Braunschweig, Germany",
title: "German Aerospace Center",
subtitle: "Systems engineer",
text: "Responsible for aircraft systems and avionics of a high-altitude solar drone, safety, and software."),
borderSpacing: 5,
borderWidth: 3,
accent: .orange)
.previewLayout(.fixed(width: 300, height: 100))
}
}

View File

@ -8,8 +8,10 @@ struct PublicationView: View {
let borderWidth: CGFloat
let accent: Color
var body: some View {
LeftBorderView(color: .accentColor, spacing: borderSpacing, borderWidth: borderWidth) {
LeftBorderView(color: accent, spacing: borderSpacing, borderWidth: borderWidth) {
VStack(alignment: .leading) {
Text(info.venue)
.font(.caption)
@ -28,6 +30,7 @@ struct PublicationView_Previews: PreviewProvider {
venue: "My venue",
title: "The publication title"),
borderSpacing: 5,
borderWidth: 3)
borderWidth: 3,
accent: .orange)
}
}

View File

@ -13,7 +13,7 @@ struct LeftImageLabel: View {
}
var body: some View {
HStack(spacing: 0) {
HStack(alignment: .firstTextBaseline, spacing: 0) {
Text(text)
Image(systemSymbol: systemSymbol)
.frame(width: 20)

View File

@ -13,9 +13,9 @@ struct RightImageLabel: View {
}
var body: some View {
HStack(spacing: 0) {
HStack(alignment: .firstTextBaseline, spacing: 3) {
Image(systemSymbol: systemSymbol)
.frame(width: 20)
.aspectRatio(1, contentMode: .fill)
Text(text)
}
}

View File

@ -4,6 +4,8 @@ struct TitledCareerSection: View {
let style: CVStyle.Section
let accent: Color
let content: Titled<CareerStation>
var body: some View {
@ -12,7 +14,8 @@ struct TitledCareerSection: View {
CareerStationView(
info: item,
borderSpacing: style.borderSpacing,
borderWidth: style.borderWidth)
borderWidth: style.borderWidth,
accent: accent)
.padding(.bottom, style.bottomSpacing)
}
}
@ -23,6 +26,7 @@ struct TitledItemSection_Previews: PreviewProvider {
static var previews: some View {
TitledCareerSection(
style: .init(),
accent: .orange,
content: .init(
title: "Work experience",
items: [

View File

@ -7,6 +7,8 @@ struct TopView: View {
let style: HeaderStyle
let accent: Color
var body: some View {
GeometryReader { geo in
let sideWidth = max(0, (geo.size.width - geo.size.height) / 2)
@ -14,7 +16,7 @@ struct TopView: View {
VStack(alignment: .leading, spacing: 0) {
Text(info.name)
.font(.title)
.foregroundColor(.accentColor)
.foregroundColor(accent)
Spacer(minLength: 0)
Text(info.tagLine)
.font(.subheadline)
@ -22,7 +24,6 @@ struct TopView: View {
Spacer(minLength: 0)
HStack {
RightImageLabel(info.place, systemSymbol: .house)
.padding(.leading, -4)
RightImageLabel(info.ageText, systemSymbol: .hourglass)
Spacer()
}.font(.subheadline)
@ -71,7 +72,8 @@ struct TopView_Previews: PreviewProvider {
email: "jobs@christophhagen.de",
phone: "Upon Request",
github: "github.com/christophhagen"),
style: HeaderStyle())
style: HeaderStyle(),
accent: .orange)
.previewLayout(.fixed(width: 540, height: 120))
}
}

View File

@ -26,6 +26,8 @@ struct CVStyle {
let pageWidth: CGFloat
let accentColor: Color
let header: HeaderStyle
let columnSpacing: CGFloat